様式指定(Magic Cookie)を伴った音声データの扱い方

原文 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 を持つようであれば、AudioConverterSetPropertykAudioConverterDecompressionMagicCookie を使って、その情報を 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;     //エラー状態をリセットする
 
翻訳文章/オーディオ/technical_q_a/qa1318_様式指定_magic_cookie_を持った音声データの扱い方.txt · 最終更新: 2007/05/31 20:20 (外部編集)
 
特に明示されていない限り、本Wikiの内容は次のライセンスに従います:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki