ファイル構造
*.wav 形式のファイルフォーマットについての解説。
全体はRIFF形式となっている。[fmt ]チャンクと[data]チャンクは必須。
その他のチャンクはオプショナルであり、アプリケーションは未知のチャンクは無視しなくてはならない。
数値はリトルエンディアンで扱われる。
| フィールド | 例 | 長さ | ||
|---|---|---|---|---|
| RIFFヘッダー | RiffID | 0x52 0x49 0x46 0x46 | 4バイト | Riffファイルである事を示すID。”RIFF”固定バイト |
| FileSize | 4バイト | RiffID+FileSizeを除くファイル全体の長さ。リトルエンディアン | ||
| Format | 0x57 0x41 0x56 0x45 | 4バイト | Wavファイルである事を示すID。”WAVE”に固定 | |
| fmt チャンク | ChunkID | 0x66 0x6D 0x74 0x20 | 4バイト | fmtチャンクヘッダー。”fmt “ |
| ChunkSize | 0x00000010 | 4バイト | ChunkID+ChunkSizeを除くチャンクのサイズ。PCMの場合は通常16 | |
| wFormatTag | 0x0001 | 2バイト |
|
|
| nChannels | 0x0002 | 2バイト | チャンネル数。1=モノラル、2=ステレオ | |
| nSamplesPerSec | 0x0000ac44 | 4バイト | サンプリングレート。0xac44=44.1KHz | |
| nAvgBytesPerSec | 0x0002b110 | 4バイト | 平均バイトレート。nSamplesPerSec*nBlockAlign | |
| nBlockAlign | 0x0004 | 2バイト | 1ブロックのバイト数。PCMの場合はnChannels*wBitsPerSample/8 | |
| wBitsPerSample | 0x0010 | 2バイト | 1サンプルのビット数。8/16/24/32など。 | |
| (cbSize) | 0x0000 | 2バイト | 追加情報のサイズ。PCMフォーマットではcbSizeおよび追加情報はなくても良い。 | |
| (追加情報) | cbSize | 追加情報。 | ||
| factチャンク (PCMフォーマットではオプショナル) |
ChunkID | 0x66 0x61 0x63 0x74 | 4バイト | factチャンクヘッダー。”fact” |
| ChunkSize | 0x00000004 | 4バイト | ChunkID+ChunkSizeを除くチャンクのサイズ | |
| dwSampleLength | 4バイト | dataチャンクに記録されている1チャンネル当たりのサンプル数 | ||
| PEAKチャンク (オプショナル) ファイル中の信号のピークを記録 |
ChunkID | 0x50 0x45 0x41 0x4B | 4バイト | PEAKチャンクヘッダー。”PEAK” |
| ChunkSize | 0x00000018 | 4バイト | ChunkID+ChunkSizeを除くチャンクのサイズ | |
| version | 0x00000001 | 4バイト | PEAKチャンクのバージョン。今の所1となっている。 | |
| timeStamp | 0x5190B5CF | 4バイト | PEAKチャンクが作られた時刻。1970/01/01からの秒数 | |
| PositionPeak | 0x3F356806 0x000165D5 0x3F13D772 0x00023058 |
8*nChannels バイト |
ピーク値/サンプル位置の組をチャンネル数分並べる。ピーク値は1.0を0dBFSとする符号付float値。サンプル位置はバイト位置ではなく、サンプルの番号 | |
| dataチャンク | ChunkID | 0x64 0x61 0x74 0x61 | 4バイト | dataチャンクヘッダー。”data” |
| ChunkSize | 4バイト | ChunkID+ChunkSize+パディングを除くチャンクのサイズ。 | ||
| サンプルデータ | ChunkSize | サンプルデータ
|
||
| (パディング) | 0 | 1バイト | ChunkSizeが奇数の場合のみ追加される | |



