我正在將應用程序從Windows移植到Mac OS X.它使用OpenAL處理聲音,但在Mac OS X上的聲音引擎初始化過程中出現奇怪的行爲(代碼在MacBook Pro上運行)。Mac OS X上的OpenAL支持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;
}
這調用alBufferData
,與AL_INVALID_VALUE
錯誤期間,當失敗。在追蹤代碼時,我們發現alGetEnumValue("AL_FORMAT_51CHN16")
正在返回0xfffffffful
,我們懷疑這是問題的根源。
的alGetEnumValue
說:
ALuint alGetEnumValue(const ALchar *enumName);
返回
0
如果枚舉無法找到,並設置AL_INVALID_VALUE
錯誤條件。枚舉值的存在並不能保證擴展對當前上下文的適用性。非零返回僅表示實現意識到此擴展的存在。
我想我正確地使用該功能。 OpenAL的Mac OS X實現中是否存在錯誤?在Mac OS X上是否通過OpenAL支持5.1輸出?它是否通過Core Audio支持(如果這是真的,移植到Core Audio可能是一個選項)?我應該將5.1音頻轉換爲另一種格式(3.1,立體聲,...)嗎?
如果enum不受支持,那麼alEnumGetValue函數應該返回0,不是嗎? – 2011-01-26 20:27:09