你怎么读golang中的wav / flac文件的音频级别?

时间:2016-12-18 04:00:40

标签: audio go wav pcm

我想每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])
    }
}

0 个答案:

没有答案