根据上图可以很清晰的分析出如何分割出两个声道的音频(以16位为例):
1.前2个字节存储左声道,后2个字节存储右声道,以此类推
2.将16bit双声道音频按4个字节读取,前两个自己写入到左声道,后两个字节写入到右声道
package main
import (
"os"
"log"
"io"
)
func main() {
buf := make([]byte, 4)
bufcopy := make([]byte, 2)
file, err := os.Open("test.pcm")
if err != nil {
print(err.Error())
}
out1, err := create("l.pcm")
out2, err2 := os.Create("r.pcm")
if err != nil || err2 != nil {
return
}
for {
n, err := file.Read(buf)
if (err != nil && err != io.EOF) || n == 0 {
println(err.Error())
break
}
copy(bufcopy, buf[:2])
out1.Write(bufcopy)
copy(bufcopy, buf[2:])
out2.Write(bufcopy)
}
out1.Close()
file.Close()
}
func create(file string) (*os.File, error) {
out, err := os.Create(file)
if err != nil {
log.Print(err.Error())
}
return out, err
}
网友评论