WAV文件解析
目錄
一、WAV簡介
二、WAV文件結構
2.1 首部數據
2.2?Format數據塊
2.3?Data數據塊
2.4其他數據塊
參考資料
一、WAV簡介
WAV格式是微軟公司開發的一種聲音文件格式,也叫波形聲音文件,是最早的數字音頻格式,被Windows平臺及其應用程序廣泛支持。WAV格式支持許多壓縮算法,支持多種音頻位數、采樣頻率和聲道,采用44.1kHz的采樣頻率,16位量化位數,因此WAV的音質與CD相差無幾,但WAV格式對存儲空間需求太大不便于交流和傳播。
二、WAV文件結構
WAV文件遵循RIFF規則,其內容以區塊(chunk)為最小單位進行存儲。WAV文件一般由3個區塊組成:RIFF chunk、Format chunk和Data chunk。另外,文件中還可能包含一些可選的區塊,如:Fact chunk、Cue points chunk、Playlist chunk、Associated data list chunk等。
下文將通過分析一個wav示例文件來詳細介紹WAV文件格式。
圖1 wav示例文件2.1 首部數據
整個WAV都是由RIFF數據塊組成,可以將整個WAV文件看作一個完整的RIFF數據塊,在這個RIFF數據塊中又包含若干的子塊存放不同的信息。
對于整個WAV文件而言,其首部結構,也即整個RIFF數據塊的頭部結構如下。
| 名稱 | 偏移地址 | 字節數 | 端序 | 內容 |
| ID | 0x00 | 4Byte | 大端 | 'RIFF' (0x52494646) |
| Size | 0x04 | 4Byte | 小端 | 文件大小 |
| Type | 0x08 | 4Byte | 大端 | 'WAVE'(0x57415645) |
在UltraEdit軟件中打開樣例音頻文件。
?
WAV首部數據部分在圖中用橫線畫出。
- 紅線部分是ID,52 49 46 46 對應的ASCII字符為RIFF。
- 黃線部分是Size,代表文件大小,注意該項的端序為小端開始,即從低位向高位讀入。該部分的實際值應為 80 B1 45 01 的反向順序即 01 45 B1 80 換成10進制為21344640字節(20844kB)。
- 藍線部分是Type,57 41 56 45對應的ASCII字符為WAVE。
2.2?Format數據塊
WAV文件的其中一個重要的子塊就是Format數據塊,包含WAV音頻文件的一些詳細屬性,具體結構如下。
| 名稱 | 偏移地址 | 字節數 | 端序 | 內容 |
| ID | 0x00 | 4Byte | 大端 | 'fmt ' (0x666D7420) |
| Size | 0x04 | 4Byte | 小端 | 16 |
| AudioFormat | 0x08 | 2Byte | 小端 | 音頻格式 |
| NumChannels | 0x0A | 2Byte | 小端 | 聲道數 |
| SampleRate | 0x0C | 4Byte | 小端 | 采樣率 |
| ByteRate | 0x10 | 4Byte | 小端 | 每秒數據字節數 |
| BlockAlign | 0x14 | 2Byte | 小端 | 數據塊對齊 |
| BitsPerSample | 0x16 | 2Byte | 小端 | 采樣位數 |
繼續分析示例文件,可以看到RIFF數據塊后即為Format數據塊。
紅線部分是ID,66 6D 74 20對應的ASCII字符即為fmt 。(20對應的SCII字符為空格)
黃線部分是聲道數,02 00 表示該音頻文件為雙聲道。
綠線部分是采樣率,同樣從小端開始,00 00 AC 44 換成10進制為44100。
2.3?Data數據塊
Data數據塊是存放實際音頻數據的數據塊,具體結構如下。
| 名稱 | 偏移地址 | 字節數 | 端序 | 內容 |
| ID | 0x00 | 4Byte | 大端 | 'data' (0x64617461) |
| Size | 0x04 | 4Byte | 小端 | N |
| Data | 0x08 | NByte | 小端 | 音頻數據 |
樣例文件中紅線部分即為Data數據塊的ID部分, 64 61 74 61 對應的ASCII字符為data。
藍線部分為Data數據塊的Size部分,代表Data數據塊的長度,01 45 B0 BC換成10進制為21344444字節。
藍線后的部分即為實際的音頻數據,對于不同的聲道數和采樣率,音頻數據的布局也不同,具體的布局如下。
| 采樣1 | 采樣2 |
| 數據1 | 數據2 |
| 采樣1 | 采樣2 | ||
| 聲道1數據1 | 聲道2數據1 | 聲道1數據2 | 聲道2數據2 |
| 采樣1 | 采樣2 | ||
| 數據1低字節 | 數據1高字節 | 數據1低字節 | 數據1高字節 |
| 采樣1 | 采樣2 | ||||||
| 聲道1數據1低字節 | 聲道1數據1高字節 | 聲道2數據1低字節 | 聲道2數據1高字節 | 聲道1數據2低字節 | 聲道1數據2高字節 | 聲道2數據2低字節 | 聲道2數據2高字節 |
2.4其他數據塊
在WAV中還存在其他的數據塊,存放不同的輔助信息,這些塊都以RIFF數據塊格式存儲,格式如下。
當ID為“RIFF”或“LIST”時,允許該數據塊中包含子塊。
"LIST"塊的數據域的起始位置也有一個四字節類型碼(List Type),用于說明LIST數據域的數據內容。比如,類型碼為"INFO"時,其數據域可能包括"ICOP"、"ICRD"塊,用于記錄文件版權和創建時間信息。
?例如在示例文件中就有“IART”塊(紅線部分)用于存放音樂家姓名,“INAM”塊(黃線部分)用于存放音樂標題;“IPRD”塊(藍線部分)用于存放音樂所屬專輯名稱。
參考資料
WAV_百度百科 (baidu.com)https://baike.baidu.com/item/WAV/218914?fromtitle=WAV%E6%A0%BC%E5%BC%8F&fromid=291538&fr=aladdin史上全最的WAV格式詳解 - 簡書 (jianshu.com)https://www.jianshu.com/p/b7cadd3e9c4dWAV文件格式詳解_imxiangzi的專欄-CSDN博客_wav格式https://blog.csdn.net/imxiangzi/article/details/80265978
總結
- 上一篇: 统计分析干货 | 秩和检验及其两两比较的
- 下一篇: 播放Wav声音