I would like to read the audio level of a wav/flac/mp3 file (mono/stereo) every 50 milliseconds (or about). I assume that I need to open the file, load the samples, and then process them using PCM to get the audio level at any given time. How can I do this in 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])
}
}