WAVフォーマットのファイル構造

WAVは、音声データを記録するファイル形式の一つです。

一般には、無圧縮のPCM方式のデータが記録されていることが多いですが、ADPCM、WMA形式やMP3 (MPEG-1 Audio Layer-3) 形式などで圧縮された音声データをWAVファイルに記録することもできます。

以下は、無圧縮のPCM方式のデータであるときのフォーマットを記載します。

WAVE ァイルの構造

 

オフセット (バイト) サイズ (バイト) 説明
0 4 チャンク識別子 "RIFF" (0x52494646)
4 4 チャンク サイズ = 全体のファイルサイズ - 8
8 4 フォーマット "WAVE" (0x57415645)
12 4 サブチャンク 1 識別子 "fmt " (0x666D7420)
16 4 サブチャンク 1 サイズ = 16 + 拡張パラメータのサイズ
20 2 音声フォーマット 1 - 65,535
22 2 チャンネル数 1 - 65,535
24 4 サンプリング周波数 1 - 0xFFFFFFFF
28 4 1 秒あたりバイト数の平均 1 - 0xFFFFFFFF
32 2 ブロックサイズ 1 - 65,535
34 2 1 サンプルあたりのビット数 2 - 65,535
- (2) 拡張パラメータのサイズ 0 - 65,535
- (*) 拡張パラメータ (拡張パラメータ)
36 4 サブチャンク 2 識別子 "data" (0x64617461)
40 4 サブチャンク 2 サイズ = 波形データのバイト数
44 * データ (波形データ)

WAVE ファイルは、全体が RIFF チャンクになっており、そのサブチャンクとしてフォーマット チャンク (12バイト以降) とデータ チャンク (36バイト以降) を含む構造になっています。

フォーマット チャンクとデータ チャンクの2つのサブチャンクは必須なので、どの WAVE ファイルにも含まれています。これら以外のサブチャンクとしては、Fact チャンクなどがあります。

バイトオーダーは、チャンク識別子とフォーマット、サブチャンク 1 識別子、サブチャンク 2 識別子がビッグエンディアン、それ以外はリトルエンディアンです。

CDとして記録されるステレオ音楽などは、「16ビット、リニアPCM」なので、「サブチャンク 1 サイズ」は「16」、「音声フォーマット」はPCMなので「1」、「チャンネル数」は「2」、「サンプリング周波数」は「44100」、「1 秒あたりバイト数の平均」はサンプリング周波数 × チャンネル数 × 1サンプルあたりのビット数 / 8、「ブロックサイズ」はチャンネル数 × 1サンプルあたりのビット数 / 8、「1 サンプルあたりのビット数」は「16」となります。