2009年10月アーカイブ

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)
みるとHE-AAC形式は従来のAACの部分と拡張した部分とがきれいに分かれており、AACの部分のサンプルレートは元のサンプルレートの半分(22kHz)でエンコーディングされていることがわかります。 半分にすることで空いた領域に、拡張した分をこれは指定されたサンプルレート(44kHz)でエンコーディングして入れています。 そしてADTS上に表記するサンプルレートはAACの方である半分の値(22kHz)とする決まりのようです。

逆にプレイヤーWinampが以前から通常のAACのサンプルレートを高く誤表示するのも、ここらへんに理由があるのかもしれませんね。

Google Translate

ウェブページ

OpenID対応しています OpenIDについて
Creative Commons License
このブログはクリエイティブ・コモンズでライセンスされています。
Powered by Movable Type 5.02