OpenAL是否支持Mac OS X上的5.1输出?

时间:2011-01-13 16:11:16

标签: macos audio core-audio openal

我正在将应用程序从Windows移植到Mac OS X.它正在使用OpenAL来处理声音,但我在Mac OS X上的声音引擎初始化中遇到了奇怪的行为(代码在MacBook Pro上运行。

以下是代码:

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,立体声,......)吗?

1 个答案:

答案 0 :(得分:3)

该枚举属于AL_EXT_MCFORMATS扩展名。它在Mac OS X上不可用。

是的,CoreAudio可以处理5.1(或任何我认为)扬声器设置。我不知道如何提供数据的细节。