我已经尝试了PCM将一次保存到WAV类型文件中,并使用C语言添加文件标头。这段时间,由于业务需求,我需要使用Golang重写该功能,并且数据源也已从PCM到Float类型采样数据。在此过程中,我遇到了很多问题。编写一篇文章以记录解决方案过程。源代码放置在文章末尾。
1.定义文件标头,然后转换为[]字节类型Golang语言文件操作均匀地将文件内容转换为[]字节或[]符文类型。最好的解决方案是字符串缝合文件标头。但是,文件标头的数据类型不统一,转换很麻烦。因此,我将Golang的结构用作载体。
使用两个结构编写WAV文件标头,因为如果使用浮动采样数据,则WAVE的请求标头与PCM不一致。UIBITSPERSEMPLAME元素后面有一个两个字节徽标。如果使用结构,则将是数据,因为数据会导致中间的两个无效字节,因此两个结构用于转动[]字节,然后在编写时拼接。
创建文件头:
创建标头后,您需要将内容序列化为[]字节并编写文件。检查信息并知道GO指针很强类型,并且不允许直接获得内存中的值,因此请参阅两个层指针的方法:
由于它是两个层指针的强制性类型转换,因此标头的LEN不准确,因此您需要控制写作的长度。“ F”是一个打开的文件。
2.将文件标头添加到尾部,然后将其写回文件。首先阅读标题文件,然后将值给予两个文件头结构指针
OUPUT是计算数据内容和采样率并回报文件所需的文件。
InputConten将转向[]字节的FLAOT阵列,而Inputlen是其长度。
来源如下:
3.确定文件是否存在,如果没有存在,将创建和添加文件,否则只会添加。
在这一点上,文本已经结束。
代码的全文如下: