Mac OS X 10.6 Snow Leopard の Core Audio には HE-AAC(別名AAC+)エンコーダーがつきました。OSがエンコーダーを標準で備えるということは、なるべくリーガルに事をやろうとするLadioCastのようなソフトウェアにとって非常に喜ばしいことです。
既にLadioCastのHE-AAC形式への対応実装は済みました。 今回はその際にはまったHE-AACの不思議な決まりについての話。
AACやHE-AACはストリーミング形式で送信する際ADTSという形式を使ったりします。 そこには他の情報とともに、そのエンコーディングがサンプルレートいくつで成されたものかを表記する仕様になっています。 最初AACの時と同じように素直にそのままサンプルレートをのせたのですが、どうしてもうまく再生されません。 結論からいうと、プレイヤーで正しく再生される HE-AAC on ADTS 形式の音声データは、用いたサンプルレートの半分の値を表記することになっているようです。
実際そのようにして生成させ正しく再生できたファイルを、音声形式を調べるコマンド afinfo を使って調べてみると、以下のように表示されます。
File type ID: adts
Data format: 2 ch, 22050 Hz, 'aac ' (0x00000000) 0 bits/channel, 0 bytes/packet, 1024 frames/packet, 0 bytes/frame
・・・
format list:
[ 0] format: 2 ch, 44100 Hz, 'aach' (0x00000000) 0 bits/channel, 0 bytes/packet, 2048 frames/packet, 0 bytes/frame
Channel layout: Stereo (L R)
[ 1] format: 2 ch, 22050 Hz, 'aac ' (0x00000000) 0 bits/channel, 0 bytes/packet, 1024 frames/packet, 0 bytes/frame
Channel layout: Stereo (L R)
逆にプレイヤーWinampが以前から通常のAACのサンプルレートを高く誤表示するのも、ここらへんに理由があるのかもしれませんね。

