我正在尝试读取带符号的 16 位整数(wav 格式)的缓冲流,但 bufio.Read 方法只接受一个字节数组。我的问题是一个两部分:
我可以将字节流预先格式化为缓冲的 int16 数组吗?
如果我不能,将字节数组后处理为 int16 数组的最佳方法是什么?我最初的想法是使用 tmp 数组并继续推送/处理它们,但我很好奇是否有更惯用的方法来做到这一点?
package main
import (
"bufio"
"io"
"log"
"os/exec"
)
func main() {
app := "someapp"
cmd := exec.Command(app)
stdout, err := cmd.StdoutPipe()
r := bufio.NewReader(stdout)
if err != nil {
log.Fatal(err)
}
if err := cmd.Start(); err != nil {
log.Fatal(err)
}
//"someapp" outputs signed 16bit integers (little endian))
buf := make([]byte, 0, 4*1024)
for {
n, err := r.Read(buf[:cap(buf)]) //r.Read only accepts type []byte
buf = buf[:n]
if n == 0 {
if err == nil {
continue
}
if err == io.EOF {
break
}
log.Fatal(err)
}
log.Printf("%x\n", buf)
//process buf here
if err != nil && err != io.EOF {
log.Fatal(err)
}
}
}