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

Posted

技术标签:

【中文标题】OpenAL 是不是支持 Mac OS X 上的 5.1 输出?【英文标题】:Does OpenAL support 5.1 output on Mac OS X?OpenAL 是否支持 Mac OS X 上的 5.1 输出? 【发布时间】:2011-01-13 16:11:16 【问题描述】:

我正在将应用程序从 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】:

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

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

【讨论】:

如果枚举不受支持,那么 alEnumGetValue 函数应该返回 0,不是吗?

以上是关于OpenAL 是不是支持 Mac OS X 上的 5.1 输出?的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 是不是仍支持 Mac OS X - 2016 年 7 月

Mac OS X 上的`probemod` 打印出神秘的 hexdump 而不是模块名称

Mac OS X 10.6(雪豹)上的 Qt 4.4 视觉伪影是不是有解决方法

Mac OS X 上的单声道调整终端大小

为啥在Windows XP上用VMware 9装Mac OS X 10.7,装好了却说“客户机操作系统不支持Mac OS X服务器”。

在 Mac OS X 上的 Firefox 中强制可见滚动条