原文 Technical Q&A QA1318: How to handle audio data with magic cookie information (http://developer.apple.com/qa/qa2001/qa1318.html)
最終更新日:2003年10月22日
質問: AudioConverter を使用する際、様式指定(Magic Cookie)を持った音声データを扱うには、どうすればよいのでしょうか。
回答:
いくつかの音声形式は、音声データを伸長するのに必要となる、その形式に関連付けられた様式指定を持ちます。
様式指定(時に Macgic Cookie は Magic Number とも呼ばれます)は、データ形式を表わすのに使用されるファイルヘッダを含む情報です。
音声データを変換する際は、そのデータ形式が様式指定を持っているかどうかを見て確認しなければなりません。
音声データが関連付けられた Magic Cookie を持つようであれば、AudioConverterSetProperty と kAudioConverterDecompressionMagicCookie を使って、その情報を Audio Converter に付け加え、適切に AudioFile を伸長しなければなりません。
メモ: 殆どのデータ形式は様式指定を持ちませんが、データの変換前に情報を確認しなければなりません。
Listing 1. Audio Converter で様式指定を利用する
AudioConverterRef *conv; AudioFileID *musicFileID; UInt32 magicCookieSize = 0; //... // ここで新しく AudioFile を開き、かつ、新しく AudioConverter を作成します // ... //様式指定が存在すれば、それを取得し変換器に渡します err = AudioFileGetPropertyInfo(*musicFileID, kAudioFilePropertyMagicCookieData, &magicCookieSize, NULL); if (err == noErr) { void *magicCookie = calloc (1, magicCookieSize); if (magicCookie) { err = AudioFileGetProperty (*musicFileID, kAudioFilePropertyMagicCookieData, &magicCookieSize, magicCookie); // 様式指定の伸長パラメータが存在したら、AudioConverter に渡す if (err == noErr) { err = AudioConverterSetProperty( *conv, kAudioConverterDecompressionMagicCookie, magicCookieSize, magicCookie); } if (magicCookie) free(magicCookie); } }else //音声データが様式指定データを必要としない場合 err = noErr; //エラー状態をリセットする