Fork me on GitHub

wave文件头之笔记

工作中接触到ASR(音频转文本),所以在网上查阅了相关资料,给自己做个笔记。

我们用的科大讯飞的私有云,其中音频格式大部分是PCM编码格式,在转为wave文件时,需要加上一个文件头,这个文件头为44个字节。

(1)wave是文件的格式,只要有一个符合格式的“头”和大量的”数据块“按要求组成文件就可以了。它并没有详细规定数据块中的数据采用哪种编码。
PCM就是一种编码格式,保存为WAV文件的音频可以有多种编码格式,既可以是PCM也可以是ADPCM、A-Law、u-Law等等。常见的WAV可用编码格式还有:IEEE浮点、GSM6.1甚至MpegLayer-3。没错,就是MP3。
所有,有时会内看到这个WAV能播放,另一容不能播放,但是换一台电脑又可以播放了的情况。这是因为第一台电脑上没有安装对应的解码器。

(2)透过脉冲编码调制PCM(Pulse Code Modulation)将声音数字化,即模拟音频信号经模数转换(A/D变换)直接形成二进制序列,该文件没有附加的文件头和
文件结束标志,windows的Convert工具能够把PCM音频格式的文件转换成Microsoft的WAV格式的文件。

(3)计算:
总区块大小:36+子区块2大小 或者 4+(8+子区块1大小)+(8+子区块2大小);
注:如果为PCM,子区块1大小为16

传输速率取样率*声道数*每个样点对应的位数(位元深度)/8 单位:Byte/s;

一个样点的字节数:声道数*每个样点对应的位数(位元深度)/8;

子区块2大小(实际样本数据的大小):秒数*声道数*每个样点对用的位数(位元深度)/8

文件所占容量:采样频率*采样位数*声道*时间/8

(4)wave文件格式解析:
wave格式,是微软开发的一种文件格式规范,整个文件分为两部分,第一部分是“文件头”,记录重要的参数信息,对于音频而言,
就包括:采样率、通道数、位宽等等;第二部分是“数据块”,即一帧一帧的二进制数据,对于音频而言,就是原始的 PCM 数据。
所以wave格式 = Header(44 bytes) + data;每个wave文件的头四个字节便是”RIFF“。


关于文件头:一般分为三个部分
第一:RIFF 共三个属性,分别是“RIFF”、所有数据总长度、“WAVE”

第二:fmt 共两个属性,分别是“fmt"、子区块1大小,

注意:https://blog.csdn.net/Sssssusu/article/details/70184147中的例子里,fmt分别为66、6d、74、20,后面有个20不代表任何属性且值不定,是个过度字节;

第三:data 共八个属性,分别是编码格式(wFormatTag)、声道数(nChannels)、取样率(nSamplesPerSec)、传输速率(nAvgBytesPerSec)、一个样点的字节数(nBlockAlign)、

位元深度(wBitsPerSample)、”data"、子区块2大小(cbSize)

(5)各属性的解释:
声道数:有单身道和立体声之分,单声道的声音只能使用一个喇叭发声(有的也处理成两个喇叭输出同一个声道的声音),立体声的pcm可以是两个喇叭都发声。

采样位数:即采样值或取样值(就是将采样样本幅度量化),指的是描述数字信号所使用的位数。它是用来衡量声音波动变化的一个参数,也可以说是声卡的分辨率,他的数值越大,

      分辨率也就越高,所发出声音的能力越强。计算机中通常有8、16位。

采样频率:即取样频率,指每秒钟取得声音样本的次数。采样频率越高,声音的质量也就越好,声音的还原也就越真实,但同时它占的资源比较多,

      由于人耳的分辨率很有限,太高的频率并不能分辨出来,所以不是采样频率越高越好。

比特率:指经过编码后的音频数据每秒钟需要用多少个比特来表示

干货:https://www.cnblogs.com/ngcheck/articles/2891666.html

ASCⅡ码:
A - 65(十进制) - 0x41(十六进制)
Z - 90(十进制) - 0x5A(十六进制)
a - 97(十进制) - 0x61(十六进制)
z - 122(十进制) - 0x7A(十六进制)


 

这里附上一个关于wave文件头的参数解析:

 

  

posted @ 2020-04-19 15:29  秋刀  阅读(966)  评论(0编辑  收藏  举报