美文网首页
用go语言分割pcm双声道音频

用go语言分割pcm双声道音频

作者: droid_zf | 来源:发表于2018-08-23 23:03 被阅读6次
pcm数据存储方式

根据上图可以很清晰的分析出如何分割出两个声道的音频(以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
}

相关文章

网友评论

      本文标题:用go语言分割pcm双声道音频

      本文链接:https://www.haomeiwen.com/subject/ludviftx.html