网上找的一些资料,和自己的调试经验,总结~
https://blog.csdn.net/imxiangzi/article/details/80265978
https://www.cnblogs.com/ranson7zop/p/7657874.html
音频文件
链接:https://pan.baidu.com/s/1g4hsl_NFreNsiRzBtKoolA
提取码:73p1
WAV
WAV文件是在PC机平台上很常见的、最经典的多媒体音频文件,最早于1991年8月出现在Windows 3.1操作系统上,文件扩展名为WAV,是WaveFom的简写,也称为波形文件,可直接存储声音波形,还原的波形曲线十分逼真。WAV文件格式简称WAV格式是一种存储声音波形的数字音频格式,是由微软公司和IBM联合设计的,经过了多次修订,可用于Windows,Macintosh,Linix等多种操作系统,详述如下。
格式解析
(1)、RIFF区块
- 以’RIFF’为标识
- Size是整个文件的长度减去ID和Size的长度
- Type是WAVE表示后面需要两个子块:Format区块和Data区块
typedef struct
{
uint32_t ID; /* "RIFF" = 0x46464952 */
uint32_t Size; /* file length - 8 */
uint32_t Format; /* WAVE = 0x45564157 */
} WavRIFF;
(2)、FORMAT区块
- 以’fmt '为标识
- Size表示该区块数据的长度(不包含ID和Size的长度)
- AudioFormat表示Data区块存储的音频数据的格式,PCM音频数据的值为1
- NumChannels表示音频数据的声道数,1:单声道,2:双声道
- SampleRate表示音频数据的采样率
- ByteRate每秒数据字节数 = SampleRate * NumChannels * BitsPerSample / 8
- BlockAlign每个采样所需的字节数 = NumChannels * BitsPerSample / 8
- BitsPerSample每个采样存储的bit数,8:8bit,16:16bit,32:32bit
typedef struct
{
uint32_t ID; /* "fmt " = 0x20746D66 */
uint32_t Size;
uint16_t AudioFormat;
uint16_t NumOfChannels;
uint32_t SampleRate;
uint32_t ByteRate;
uint16_t BlockAlign;
uint16_t BitsPerSample;
uint16_t ByteExtraData;
} WavFMT;
NumChannels=2(双声道)、SampleRate = 44100Hz、BitsPerSample=16
ByteRate = 176400、BlockAlign = 4;
(3)、DATA区块
- 以’data’为标识
- Size表示音频数据的长度,N = ByteRate * seconds
- Data音频数据
typedef struct
{
uint32_t ID; /* "data" = 0x61746164 */
uint32_t Size;
} WavDATA;
size = 0x05fdfd50 = 100531536
从data头到尾,一共刚好100531536;