MacOSプログラミング/Linear PCM以外のAudioStreamBasicDescriptionの値の取り方

AudioStreamBasicDescriptionの各種パラメータについては、リニアPCMを使用する場合のサンプルや解説はたくさんあるのですが、mp3やaac, m4aなどを扱う際の適切なパラメータは、あまりどこかに書いてあるという訳でもない様です。これらを扱いたい場合、どうしたもんかと思ったのですが、Audio APIから直に取得、設定させる事ができることが分かりました。

方法としては、AudioFormatGetPropertyで、kAudioFormatProperty_FormatInfo プロパティを取得すればOKです。以下にコードを示します。

AudioStreamBasicDescription outputFormat;
UInt32 size; 
// need to set at least these fields for kAudioFormatProperty_FormatInfo
outputFormat.mFormatID = formatID; // kAudioFormat* の値
outputFormat.mSampleRate = inputFormat.mSampleRate;
outputFormat.mChannelsPerFrame = inputFormat.mChannelsPerFrame;

// use AudioFormat API to fill out the rest.
size = sizeof(outputFormat);
err = AudioFormatGetProperty(kAudioFormatProperty_FormatInfo, 0, NULL, &size, &outputFormat);


これで、outputFormatの設定済みの3フィールド以外に、適切な値が設定されます。

最も、この調査は私にとっては完全な徒労でした。これを調べた動機は、MovieAudioExtraction API やAudioConverter API でPCM以外の形式で出力する事だったのですが、どうも出力形式はPCMしかサポートしていないようです。
よくよくマニュアルを読んでみると、「PCMでの出力を可能にします」とはっきり書いてありました。とほほ・・・。

参照:
- Using the Audio Extraction API in QuickTime 7

Comment

管理者だけに表示を許可する

Trackback

Trackback URL:

http://deathcube.blog36.fc2.com/tb.php/7-292200f5