私は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、ステレオ、...)にオーディオを変換する必要がありますか?
enumがサポートされていない場合、alEnumGetValue関数は0を返します。 –
これはバグのようですね。 http://bugreport.apple.com/ – OneSadCookie