4 byte | RIFF形式の識別子 'RIFF' |
4 byte | ファイルサイズ(byte単位) |
4 byte | RIFFの種類を表す識別子 'WAVE' |
4 byte | タグ 1 参照 |
4 byte | データの長さ 1 |
n byte | データ 1 |
4 byte | タグ 2 参照 |
4 byte | データの長さ 2 |
n byte | データ 2 |
4 byte | タグ 3 参照 |
4 byte | データの長さ 3 |
n byte | データ 3 |
(以下同様) |
4 byte | R' 'I' 'F' 'F' | RIFFヘッダ | |
4 byte | これ以降のファイルサイズ (ファイルサイズ - 8) | ||
4 byte | W' 'A' 'V' 'E' | WAVEヘッダ | RIFFの種類がWAVEであることをあらわす |
4 byte | f' 'm' 't' ' ' (←スペースも含む) | fmt チャンク | フォーマットの定義 |
4 byte | バイト数 | fmt チャンクのバイト数 | リニアPCM ならば 16(10 00 00 00) |
2 byte | フォーマットID | 参照 | リニアPCM ならば 1(01 00) |
2 byte | チャンネル数 | モノラル ならば 1(01 00) ステレオ ならば 2(02 00) |
|
4 byte | サンプリングレート | Hz | 44.1kHz ならば 44100(44 AC 00 00) |
4 byte | データ速度 (Byte/sec) | 44.1kHz 16bit ステレオ ならば 44100×2×2 = 176400(10 B1 02 00) |
|
2 byte | ブロックサイズ (Byte/sample×チャンネル数) | 16bit ステレオ ならば 2×2 = 4(04 00) |
|
2 byte | サンプルあたりのビット数 (bit/sample) | WAV フォーマットでは 8bit か 16bit | 16bit ならば 16(10 00) |
2 byte | 拡張部分のサイズ | リニアPCMならば存在しない | |
n byte | 拡張部分 | リニアPCMならば存在しない | |
4 byte | d' 'a' 't' 'a' | data チャンク 参照 | |
4 byte | バイト数n | 波形データのバイト数 | |
n byte | 波形データ | 参照 |
#define FormatID 'fmt ' /* chunkID for Format Chunk. NOTE: There is a space at the end of this ID. */ typedef struct { ID chunkID; long chunkSize; short wFormatTag; unsigned short wChannels; unsigned long dwSamplesPerSec; unsigned long dwAvgBytesPerSec; unsigned short wBlockAlign; unsigned short wBitsPerSample; /* Note: there may be additional fields here, depending upon wFormatTag. */ } FormatChunk;'data' チャンク構造体
#define DataID 'data' /* chunk ID for data Chunk */ typedef struct { ID chunkID; long chunkSize; unsigned char waveformData[]; } DataChunk;
mmioCreateChunk 関数が呼び出されたときに、チャンクサイズが MMCKINFO 構造体の cksize メンバにある値と異なる場合、mmioAscend 関数は、チャンクから退出する前にファイルのチャンクサイズを修正します。
チャンクサイズが奇数の場合、mmioAscend 関数は、チャンクの終わりに NULL の埋め込みバイトを書き込みます。
+0 | +1 | +2 | +3 | +4 | +5 | +6 | +7 | +8 | +9 | +A | +B | +C | +D | +E | +F | |
00 | 52 | 49 | 46 | 46 | -- | -- | -- | -- | 57 | 41 | 56 | 45 | 66 | 6D | 74 | 20 |
(内容) | R | I | F | F | ファイルサイズ - 8 | W | A | V | E | f | m | t | ||||
01 | 10 | 00 | 00 | 00 | 01 | 00 | 02 | 00 | 44 | AC | 00 | 00 | 10 | B1 | 02 | 00 |
(内容) | 16 | 1 | 2 | 44100 | 176400 | |||||||||||
02 | 04 | 00 | 10 | 00 | 64 | 61 | 74 | 61 | -- | -- | -- | -- | -- | -- | -- | -- |
(内容) | 4 | 16 | d | a | t | a | データサイズ | 以後データ |
4 byte | "fmt " | フォーマット定義 最初のタグ 必須 4文字目の ' '(スペース)も含まれるので注意 |
4 byte | "fact" | 全サンプル数 波形データの前に存在する 無くても良い |
4 byte | "data" | 波形データ 必須 |
4 byte | "LIST" | コメントや著作権情報 無くても良い |
0x0000 | unknown | |
0x0001 | PCM | Windows 標準サポート |
0x0002 | MS ADPCM | Windows 標準サポート |
0x0005 | IBM CSVD | |
0x0006 | A-Law | Windows 標準サポート |
0x0007 | μ-Law | Windows 標準サポート |
0x0010 | OKI ADPCM | |
0x0011 | IMA/DVI ADPCM | Windows 標準サポート |
0x0012 | MediaSpace ADPCM | |
0x0013 | Sierra ADPCM | |
0x0014 | ADPCM (G.723) | |
0x0015 | DIGISTD | |
0x0016 | DIGIFIX | |
0x0020 | YAMAHA ADPCM | |
0x0021 | SONARC | |
0x0022 | TrueSpeech | Windows 標準サポート |
0x0023 | Echo Speech1 | |
0x0024 | AF36 (Audiofile) | |
0x0025 | Apix | |
0x0026 | AF10 (Audiofile) | |
0x0030 | AC2 (Dolby) | |
0x0031 | GSM 6.10 | Windows 標準サポート |
0x0033 | ANTEX ADPCM | |
0x0034 | VQLPC (Control Resources) | |
0x0035 | DIGIREAL | |
0x0036 | DIGIADPCM | |
0x0037 | CR10 (Control Resources) | |
0x0040 | ADPCM (G.721) | |
0x0101 | IBM μ-LAW | |
0x0102 | IBM A-LAW | |
0x0103 | IBM ADPCM | |
0x0200 | Creative Labs ADPCM | |
0x0300 | FM TOWNS | |
0x1000 | Olivetti GSM | |
0x1001 | Olivetti ADPCM | |
0x1002 | Olivetti CELP | |
0x1003 | Olivetti SBC | |
0x1004 | Olivetti OPR |