2011-01-13 24 views
4

私はWindowsからMac OS Xにアプリケーションを移植しています.Onalを使用してサウンドを処理していますが、Mac OS X上のサウンドエンジンの初期化で奇妙な動作が発生しています(コードMacBook Proで動作しています)。OpenALはMac OS Xで5.1出力をサポートしていますか?

int InitSoundEngine(void* data[NB_BUFFERS], size_t data_size[NB_BUFFERS]) 
{ 
    ALCdevice *device; 
    ALCcontext *context; 
    ALenum format; 
    ALuint buffers[NB_BUFFERS]; 

    device = alcOpenDevice(NULL); 
    if (device == NULL) 
     goto failed; 

    context = alcCreateContext(device, NULL); 
    if (context == NULL) 
     goto failed; 

    alcMakeContextCurrent(context); 

    format = alGetEnumValue("AL_FORMAT_51CHN16"); 
    if (format == 0) 
     goto failed; 

    alGenBuffers(NB_BUFFERS, buffers); 
    if (alGetError() != AL_NO_ERROR) 
     goto failed; 

    for (int i = 0; i < NB_BUFFERS; ++ i) 
    { 
     alBufferData(buffers[i], format, data[i], data_size[i], 48000); 
     if (alGetError() != AL_NO_ERROR) 
      goto failed; 
    } 

    return NO_ERROR; 

failed: 
    /* Cleanup omitted for brievety */ 
    return INITIALIZATION_FAILED; 
} 

これはAL_INVALID_VALUEのエラーでalBufferDataの呼び出し、中に失敗します。ここでは

はコードです。コードをトレースするうちに、 alGetEnumValue("AL_FORMAT_51CHN16")0xffffffffulを返していることが判明し、これが問題の根源であると思われます。

alGetEnumValueは言う:列挙が見つかった、とAL_INVALID_VALUEエラー条件を設定することができない場合

ALuint alGetEnumValue(const ALchar *enumName);

0を返します。 enum値が存在しても、現在のコンテキストに対する拡張の適用性は保証されません。非ゼロの戻り値は、実装がこの拡張機能の存在を認識していることを示しています。

私は正しく機能を使用すると思います。 OpenALのMac OS X実装にバグはありますか? 5.1出力はMac OS X上でOpenAL経由でサポートされていますか? Core Audio経由でサポートされていますか(Core Audioへの移植は可能でしょうか?) 5.1から別のフォーマット(3.1、ステレオ、...)にオーディオを変換する必要がありますか?

答えて

3

その列挙型はAL_EXT_MCFORMATS拡張に属します。それはMac OS Xでは利用できません。

はい、CoreAudioは5.1(または私が思う)のスピーカー設定を処理できます。私はそれをどのようにデータをフィードするかの詳細を知らない。

+0

enumがサポートされていない場合、alEnumGetValue関数は0を返します。 –

+0

これはバグのようですね。 http://bugreport.apple.com/ – OneSadCookie

関連する問題