RIFF (Resource Interchange File Format) チャンクは、データの種類を示します。
フィールド | バイト数 | 内容 |
---|---|---|
ckID | 4 | チャンクID 'RIFF' |
cksize | 4 | チャンクサイズ 4+n |
WAVE ID | 4 | Wave ID 'WAVE' |
WAVEチャンク | n | 書式情報とサンプルデータ |
fmtチャンクは、データの書式を示します。
フィールド | バイト数 | 内容 |
---|---|---|
ckID | 4 | Chunk ID: "fmt " |
cksize | 4 | Chunk size: 16, 18 or 40 |
wFormatTag | 2 | Format code |
nChannels | 2 | Number of interleaved channels |
nSamplesPerSec | 4 | Sampling rate (blocks per second) |
nAvgBytesPerSec | 4 | Data rate |
nBlockAlign | 2 | Data block size (bytes) |
wBitsPerSample | 2 | Bits per sample |
cbSize | 2 | Size of the extension (0 or 22) |
wValidBitsPerSample | 2 | Number of valid bits |
dwChannelMask | 4 | Speaker position mask |
SubFormat | 16 | GUID, including the data format code |
Format Code | PreProcessor Symbol | Data |
---|---|---|
0x0001 | WAVE_FORMAT_PCM | PCM |
0x0003 | WAVE_FORMAT_IEEE_FLOAT | IEEE float |
0x0006 | WAVE_FORMAT_ALAW | 8-bit ITU-T G.711 A-law A-law algorithm - Wikipedia |
0x0007 | WAVE_FORMAT_MULAW | 8-bit ITU-T G.711 µ-law μ-law algorithm - Wikipedia |
0xFFFE | WAVE_FORMAT_EXTENSIBLE | Determined by SubFormat |
factチャンクは、圧縮された、非PCM形式であることを示します。
フィールド | バイト数 | 内容 |
---|---|---|
ckID | 4 | Chunk ID: "fact" |
cksize | 4 | Chunk size: minimum 4 |
dwSampleLength | 4 | Number of samples (per channel) |
dataチャンクは、サンプルデータを示します。
フィールド | バイト数 | 内容 |
---|---|---|
ckID | 4 | Chunk ID: "data" |
cksize | 4 | Chunk size: n |
sampled data | n | Samples |
pad byte | 0 or 1 | Padding byte if n is odd |
矩形波 (4000Hz) は、次のような内容となります。
FF 00 FF 0064.0 Kbps, 8 000 Hz, 8 bits, 1 channel, PCM (Little / Unsigned)
FF 7F 00 80 FF 7F 00 80128 Kbps, 8 000 Hz, 16 bits, 1 channel, PCM (Little / Signed)
FF FF FF 7F 00 00 00 80 FF FF FF 7F 00 00 00 80256 Kbps, 8 000 Hz, 32 bits, 1 channel, PCM (Little / Signed)
00 00 80 3F 00 00 80 BF 00 00 80 3F 00 00 80 BF256 Kbps, 8 000 Hz, 32 bits, 1 channel, PCM (IEEE ) (Float)
アーティスト名などのメタ情報を示します。
たとえばAudacityで「アーティスト名」を「AAA」とした場合は、'INFO'以降は次のようになります。
49 4E 46 4F 49 41 52 54 04 00 00 00 41 41 41 00 69 64 33 20 18 00 00 00 49 44 33 03 00 00 00 00 00 0E 54 50 45 31 00 00 00 04 00 00 00 41 41 41
データ | フィールド | 説明 | 値 |
---|---|---|---|
49 4E 46 4F | ckID | チャンクID | 'INFO' |
49 41 52 54 | cksize | タグID | 'IART' (Artist) |
04 00 00 00 | タグのバイト数 | 0x04 | |
41 41 41 00 | タグの内容 | 'AAA' | |
69 64 33 20 | タグID? | 'id3 ' | |
18 00 00 00 | タグのバイト数 (これ以降のすべて) |
0x18 (24) | |
49 44 33 | ファイル識別子 | 'ID3' | |
03 00 | ID3タグのバージョン | ID3v2.3.0 | |
00 | ID3タグのフラグ | ||
00 00 00 0E | ID3タグのバイト数 | 0x0E (14) | |
54 50 45 31 | フレームID | 'TPE1' | |
00 00 00 04 | フレームのバイト数 | 0x04 | |
00 00 | フレームのフラグ | ||
00 | フレームのエンコーディング | ISO-8859-1 | |
41 41 41 | フレームの内容 | 'AAA' |
この例ではメタ情報は2つの規格で記録されており、たとえばエクスプローラでは最初の'IART'の内容を参照しますが、他のツールでは'TPE1'を参照するものもあります。
PCMデータは、次のような形式となります。
区分 | アドレス | バイト数 | フィールド | 説明 | 値 |
---|---|---|---|---|---|
0x00 | 4 | ckID | チャンクID | 'RIFF' | |
0x04 | 4 | cksize | 次の項目以降のファイルサイズ | ||
0x08 | 4 | WAVEID | Wave ID | 'WAVE' | |
fmtチャンク | 0x0C | 4 | ckID | チャンクID | 'fmt ' |
0x10 | 4 | cksize | fmtチャンクのバイト数 (16、18または40) |
|
|
0x12 | 2 | wFormatTag | フォーマットコード | ||
0x14 | 2 | nChannels | チャンネル数 | ||
0x18 | 4 | nSamplesPerSec | サンプリングレート (1秒あたりのブロック数) | ||
0x1C | 4 | nAvgBytesPerSec | データ速度 | ||
0x1E | 2 | nBlockAlign | ブロックサイズ [byte] | ||
0x20 | 2 | wBitsPerSample | サンプルあたりのビット数 | ||
0x22 | 2 | cbSize | 拡張のサイズ (0または22) |
(fmtチャンクのバイト数が16ならば、この項目は存在しない)
|
|
0x24 | cbSize | 拡張 | |||
dataチャンク | 0x24+cbSize | 4 | ckID | チャンクID | 'data' |
0x28+cbSize | 4 | cksize | 波形データのバイト数 | ||
0x2C+cbSize | cksize | 波形データ |
データは下位バイトから順に配置される、リトルエンディアン (little endian) です。
たとえば次のような矩形波 (1000Hz、10msec) は、
次のようなデータとなります。
52 49 46 46 74 00 00 00 57 41 56 45 66 6D 74 20 10 00 00 00 01 00 01 00 40 1F 00 00 40 1F 00 00 01 00 08 00 64 61 74 61 50 00 00 00 FF FF FF FF 00 00 00 00 FF FF FF FF 00 00 00 00 FF FF FF FF 00 00 00 00 FF FF FF FF 00 00 00 00 FF FF FF FF 00 00 00 00 FF FF FF FF 00 00 00 00 FF FF FF FF 00 00 00 00 FF FF FF FF 00 00 00 00 FF FF FF FF 00 00 00 00 FF FF FF FF 00 00 00 00
この意味は、下表の通りです。
データ | フィールド | 説明 | 値 |
---|---|---|---|
52 49 46 46 | ckID | チャンクID | 'RIFF' |
74 00 00 00 | cksize | ファイルサイズ | 0x00000074 (116 byte) |
57 41 56 45 | WAVEID | Wave ID | 'WAVE' |
66 6D 74 20 | ckID | チャンクID | 'fmt ' |
10 00 00 00 | cksize | fmtチャンクのバイト数 | 0x00000010 (16 byte) |
01 00 | wFormatTag | フォーマットID | 0x01 |
01 00 | nChannels | チャンネル数 | 0x01 |
40 1F 00 00 | nSamplesPerSec | サンプリングレート | 0x00001F40 (8000 Hz) |
40 1F 00 00 | nAvgBytesPerSec | データ速度 | 0x00001F40 (8000) |
01 00 | nBlockAlign | ブロックサイズ | 0x01 |
08 00 | wBitsPerSample | サンプルあたりのビット数 | 0x08 (8bit) |
64 61 74 61 | ckID | チャンクID | 'data' |
50 00 00 00 | cksize | 波形データのバイト数 | 0x00000050 (80 byte) |