wav檔案的檔案頭
wav檔案的檔案頭
wave檔案的格式:
00H 4 char "RIFF"標誌
04H 4 long int 檔案長度
08H 4 char "WAVE"標誌
0CH 4 char "fmt"標誌
10H 4 過渡位元組(不定)
14H 2 int 格式類別(10H為PCM形式的聲音資料)
16H 2 int 通道數,單聲道為1,雙聲道為2
18H 2 int 取樣率(每秒樣本數),表示每個通道的播放速度,
1CH 4 long int 波形音訊資料傳送速率,其值為通道數×每秒資料位數×每樣
本的資料位數/8。播放軟體利用此值可以估計緩衝區的大小。
20H 2 int 資料塊的調整數(按位元組算的),其值為通道數×每樣本的資料位
值/8。播放軟體需要一次處理多個該值大小的位元組資料,以便將其
值用於緩衝區的調整。
22H 2 每樣本的資料位數,表示每個聲道中各個樣本的資料位數。如果有多
個聲道,對每個聲道而言,樣本大小都一樣。
24H 4 char 資料標記符"data"
28H 4 long int 語音資料的長度
04H 4 long int 檔案長度
08H 4 char "WAVE"標誌
0CH 4 char "fmt"標誌
10H 4 過渡位元組(不定)
14H 2 int 格式類別(10H為PCM形式的聲音資料)
16H 2 int 通道數,單聲道為1,雙聲道為2
18H 2 int 取樣率(每秒樣本數),表示每個通道的播放速度,
1CH 4 long int 波形音訊資料傳送速率,其值為通道數×每秒資料位數×每樣
本的資料位數/8。播放軟體利用此值可以估計緩衝區的大小。
20H 2 int 資料塊的調整數(按位元組算的),其值為通道數×每樣本的資料位
值/8。播放軟體需要一次處理多個該值大小的位元組資料,以便將其
值用於緩衝區的調整。
22H 2 每樣本的資料位數,表示每個聲道中各個樣本的資料位數。如果有多
個聲道,對每個聲道而言,樣本大小都一樣。
24H 4 char 資料標記符"data"
28H 4 long int 語音資料的長度
檔案頭長度加起來是42位元組,但是實際長度是44個位元組(用UltraEdit開啟一個WAVE檔案,數一下就知道了)。如果用以個結構體來定義WAVE檔案頭應該為:
struct WAVEFILEHEADER
{
char chRIFF[4];
DWORD dwRIFFLen;
char chWAVE[4];
char chFMT[4];
DWORD dwFMTLen;
PCMWAVEFORMAT pwf;
char chDATA[4];
DWORD dwDATALen;
};
但是實際測試,並不是所有的wave檔案頭都一樣。比較麻煩的就是windows下自帶的那個錄音機錄下的wav,檔案頭有58個 Byte。所以,比較好的辦法是,首先讀取n長的一段字元,例如60個;然後從中查詢關鍵字“data”,“data”之後的一個DWORD是實際音訊數 據的長度,得到這個長度len,再從這DWORD後開始讀取len個位元組,就可以讀到檔案尾。如果是雙聲道的,那麼資料是交替存放的;如果是16bit採 樣的,每兩個位元組會以小端的方式儲存一個AD值。根據這樣的方式,就可以順利讀取音訊資料了。
原文地址:http://www.cnblogs.com/huaping-audio/archive/2010/03/08/1680654.html
相關文章
- 如何播放 WAV 檔案?
- 大型WAV檔案的播放 (轉)
- 將WAV檔案做到EXE檔案的方法及注意事項 (轉)
- WAV音訊檔案按秒切片段音訊
- Laravel 專案中 PCM 音波檔案轉 WAV 音訊檔案案例【經驗分享】Laravel音訊
- locate標頭檔案和庫檔案
- 【C#學習筆記】播放wav檔案C#筆記
- 8.13 標頭檔案剖析:標頭檔案路徑(下)
- C 標頭檔案
- 標頭檔案的作用分析
- 標頭檔案與庫檔案與菜鳥 (轉)
- WAV音訊檔案中隱藏惡意軟體音訊
- #include sys/xxx.h標頭檔案 UNIX標頭檔案
- PHP檔案頭BOM頭問題PHP
- C 標頭檔案 作用
- Oracle檔案頭資訊(zt)Oracle
- 祖傳標頭檔案
- 標頭檔案講解
- 02@在類的標頭檔案中儘量少引入其他標頭檔案
- 資料檔案拷貝檔案頭驗證錯誤
- 關於控制檔案與資料檔案頭資訊的說明(zt)
- PE檔案檢測DOS頭\NT頭
- java通過檔案頭內容判斷檔案型別Java型別
- fcntl.h標頭檔案
- 各種型別檔案頭型別
- linux 標頭檔案 作用Linux
- 轉儲日誌檔案頭
- bbed 與檔案頭恢復
- 什麼是 標頭檔案
- 關於C++的標頭檔案C++
- VSCode 配置檔案頭的snippetVSCode
- Java解析ELF檔案:使用Java讀取檔案頭部、節區頭部表、程式頭部表Java
- C/C++標頭檔案太難記?一個萬能標頭檔案全搞定!C++
- gcc g++ 新增標頭檔案路徑和庫檔案路徑的方法GC
- .ora檔案、.dbf檔案和.dat檔案的區別
- 檔案-ALERT檔案
- 大型專案開發: 標頭檔案順序
- 使用 header 頭下載檔案Header