Date Tags ADPCM

まずはIMA-ADPCM互換のデコーダ/エンコーダを作ってみますかね。かなり情報あるし。 FFMPEGで出力する方法は:

ffmpeg -i <input.wav> -f wav -acodec adpcm_ima_wav <output.wav>

Macで再生もできた。ほぼ1/4になる。理論的には1/4だけどwavに余計なチャンクが入っているから減っている?

ステレオ以上はどうなってるのか見ている。インターリーブしているようだ。

上記のサイト含めてフォーマットをまとめると( 全て リトルエンディアン)

名前 サイズ[byte] 内容
RIFFチャンクID 4 'R', 'I', 'F', 'F'
RIFFチャンクサイズ 4 ファイルサイズ - 8(これ以降の残りファイルサイズ)
ファイルフォーマットタイプ 4 'W', 'A', 'V', 'E'
FMTチャンクID 4 'f', 'm', 't', ' '
FMTチャンクサイズ 4 これ以降のFMTフィールドのサイズ
WAVEフォーマットタイプ 2 IMA-ADPCMなら17
チャンネル数 2 IMA-ADPCMの場合は1(モノラル)か2(ステレオ)しかないっぽい
サンプリングレート 4  
データ速度(byte/sec) 4 = ブロックサイズ * サンプリングレート / ブロックあたりサンプル数
ブロックサイズ 2 ブロックのヘッダと圧縮済みデータを含めたサイズ
サンプルあたりビット数 2 IMA-ADPCMなら4のはず
エキストラサイズ 2 これ以降に続く追加データサイズ
ブロックあたりサンプル数 2  
FACTチャンクID 4 'f', 'a', 'c', 't'
FACTチャンクサイズ 4 これ以降のFACTチャンクサイズ
サンプル数 4 = DATAチャンクサイズ * ブロックあたりサンプル数 / ブロックサイズ
DATAチャンクID 4 'd', 'a', 't', 'a'
DATAチャンクサイズ 4 これ以降のDATAチャンクサイズ
圧縮済みデータ ※ = DATAチャンクサイズ