WAVEファイルの構造
今回はWAVEファイルの構造についての説明です。
■概要
WAVEファイルとは、Windowsで標準的に扱われている波形オーディオデータファイルです。
.wavまたは.waveの拡張子のファイルがこれに該当します。
一般的にはPCM(Pulse Code Modulation)と呼ばれる非圧縮データを格納していますが、MP3などの圧縮データも保持することが可能です。
■ファイル構造
WAVEファイルの中身は一般に以下のようになっています。
[“RIFF” (4byte)]
[ファイルサイズ-8 (4byte)]
[“WAVE” (4byte)]
[フォーマットチャンク]
[データチャンク]
([LISTチャンク] 省略可)
これはRIFF(Resource Interchange File Format)と呼ばれるファイルフォーマットの一種です。
チャンクと呼ばれるデータの塊を連結させた構造になっています。
[識別子の文字列 (4byte)]
[データサイズ(n) (4byte)]
[データ (n byte)]
識別子にはASCIIで4文字のチャンクの種類を識別するための文字列が入ります。
データサイズにはデータ部分のサイズが入ります。
これはチャンク全体サイズから識別子とデータサイズを差し引いた値となります。
したがって、
データサイズ = チャンク全体サイズ – 8
という関係が成り立ちます。
チャンク内に子チャンクを持たせることも可能です。
WAVEファイルはRIFFチャンク内にフォーマットチャンクとデータチャンクを持つ構造になります。
RIFFチャンク以外にはLISTチャンクを持たせることも可能です。
これは音声データそのものには直接関係無い付加情報です。
したがって、音声データを読み込んであれこれしたい場合は無視してよい情報です。
フォーマットチャンクは以下のようになります。
[“fmt ” (4byte)]
[フォーマットサイズ (4byte)]
[フォーマット]
フォーマット部分には、オーディオデータの形式情報が入ります。
PCM形式の場合、フォーマットにはWAVEFORMATEX構造体のデータが入り、
フォーマットの先頭2バイト(WAVEFORMATEX構造体のwFormatTagメンバ)がWAVE_FORMAT_PCM(=1)となります。
ここを調べることで、オーディオ形式を判断することが出来ます。
データチャンクは以下のような構造になっています。
[“data” (4byte)]
[データサイズ (4byte)]
[データ]
データ部分に実際のオーディオデータが入ります。
これは前述のフォーマットに従ったデータとなります。
詳しい解説は割愛させていただきます。
ここまでがWAVEファイルで最低限必要になる情報です。
LISTチャンクもありますが、本記事では割愛させていただきます。
実際にWAVEファイルを読み込んで再生したい場合は、このチャンクを探索してフォーマットとデータを取得すれば良いです。
再生方法についてはまた別の機会にて説明できればと思います。
■参考サイト
WAV 【 WAVフォーマット 】 .wavファイル / WAVEファイル
RIFF について
RIFF (Resource Interchange File Format)