ぼく用あれこれまとめ

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じゃないよー。


参考文献

記事メニュー
目安箱バナー