我想每50毫秒(或大约)读取一次wav / flac / mp3文件(单声道/立体声)的音频电平。我假设我需要打开文件,加载样本,然后使用PCM处理它们以获得任何给定时间的音频级别。我怎么能在Golang中做到这一点?
package main
import (
"flag"
"fmt"
"log"
"os"
"azul3d.org/audio.v1"
_ "azul3d.org/audio/flac.v0" // Add FLAC decoding support.
)
func main() {
flag.Parse()
for _, path := range flag.Args() {
err := parseFLAC(path)
if err != nil {
log.Fatal(err)
}
}
}
func parseFLAC(path string) error {
// Open file.
f, err := os.Open(path)
if err != nil {
return err
}
defer f.Close()
// Create decoder.
dec, _, err := audio.NewDecoder(f)
if err != nil {
return err
}
// Decode audio stream.
for {
samples := make(audio.PCM32Samples, 1024)
n, err := dec.Read(samples)
if err != nil {
if err == audio.EOS {
return nil
}
return err
}
fmt.Println(samples[:n])
}
}