ぼく用あれこれまとめ
WAVEファイル
最終更新:
bokuyo
-
view
WAVEファイルについて
- WAVEフォーマットからその読み込みまでをまとめます。
FOURCC識別子(4文字コード/4CharCode)
- 4文字のASCIIコードでできた識別子
- ASCIIなので、「a-z A-Z 0-9」だけでなく半角スペースも使える
- Win32 API の<MMSystems.h> の mmioFOURCC マクロなどを使うとプログラムが楽に。
PCMフォーマット
FOURCC識別子 | 説明 |
'RIFF' | チャンクの最初4バイトに'WAVE'だとか'XWMA'だとかがくる。 |
'fmt ' | WAVEFORMATEX, WAVEFORMATEXTENSIBLE, ADPCMWAVEFORMAT, XMA2WAVEFORMATEXのどれかに対応する。 |
'data' | 波形、いわゆるオーディオデータが入ってる。バッファに読み込むやつ。 |
WAVフォーマット
大きさ | 中身 | 説明 |
4Byte | 'RIFF' | RIFF形式のFOURCC識別子 |
4Byte | ファイルサイズ(Byte) | 16進数 |
4Byte | 'WAVE' | RIFFの種類を表すこれまたFOURCC識別子 |
(4+4+n)Byte | チャンク | タグのFOURCC識別子(4Byte) データサイズ(4Byte) 可変長のデータ(nByte) からなる可変ブロック |
(4+4+n)Byte | チャンク | 可変ブロック |
… | … | 以下、チャンクが続きます。 |
WAVフォーマット(LPCM)のfmtチャンク
大きさ | 中身 | 説明 |
4Byte | 'fmt ' | fmtチャンク(=チャンクの定義) |
4Byte | fmtチャンクのデータサイズ(Byte) | LPCMだと10進数で16 (16進数で'10 00 00 00') |
2Byte | フォーマットID | LPCMだと1(16進数'01 00') (注意:16進数だったら '00 01'と思いがちだけど、 ここでは'01 00'='1(10進数)' となっている。 これはよく使われるWAV フォーマットのバイトオーダーがリトルエンディアンだから。) |
2Byte | チャンネル数 | モノラルなら1(16進数'01 00') ステレオなら2(16進数'02 00') |
4Byte | サンプリングレート(Hz) | 44.1kHz=44100Hz(16進数'44 AC 00 00') |
4Byte | ビットレート(bps) | 2ch*44.1kHz*16bit=176400bps (16進数'10 B1 02 00') |
2Byte | 波形データの1サンプルあたりの ブロックサイズ(ch*Byte/sample) |
Stereo(2チャンネル)*16bit(ビット深度) =4(16進数'04 00') |
2Byte | 1サンプルあたりのビット数 | ビット深度のこと。もっとかっこよくいうと、量子化ビット数。8bitか16bitが一般的。 16bitなら16(16進数'10 00') |
2Byte | 拡張部分のサイズ(何の拡張?) | LPCMでは使わない(存在してないから ここはもうdataチャンクになってるはず) |
nByte | 拡張部分(何の拡張かしら?) | LPCMでは使わない |
WAVフォーマットのdataチャンク
4Byte | 'data' | dataチャンク(=チャンクの定義) |
4Byte | 波形データサイズ(Byte) | 16進数 |
nByte | 波形データ | fmtチャンクで定義した通りの波形データが可変長に入ってる |
バイトオーダー
- 基本的にリトルエンディアンっぽい。ビッグエンディアンのWAV フォーマットも存在するのかどうかよく調べてないのでわかりません。
- フォーマットとして決まってるのかどうかも知りたい。
LPCM(リニアPCM)
WAVEやCDDAのような編集してない生の音を残す音声方式。非圧縮音声方式(?)とでもいうのかしら?
最近はPS3やBlue-layでも使われてる模様。非圧縮だからもちろん音綺麗。ただデータサイズはもちろんでかい。
MP3やoggは圧縮してるからたぶん(というか絶対)LPCMじゃないよー。
最近はPS3やBlue-layでも使われてる模様。非圧縮だからもちろん音綺麗。ただデータサイズはもちろんでかい。
MP3やoggは圧縮してるからたぶん(というか絶対)LPCMじゃないよー。