網上找的一些資料,和自己的調試經驗,總結~
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;