gpt4 book ai didi

macos - OpenAL 在 Mac OS X 上支持 5.1 输出吗?

转载 作者:行者123 更新时间:2023-12-02 04:12:23 25 4
gpt4 key购买 nike

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

Returns 0 if the enumeration can not be found, and sets an AL_INVALID_VALUE error condition. The presence of an enum value does not guarantee the applicability of an extension to the current context. A non-zero return indicates merely that the implementation is aware of the existence of this extension.

我认为我正确地使用了该功能。 OpenAL 的 Mac OS X 实现中是否存在错误? Mac OS X 上的 OpenAL 支持 5.1 输出吗?是否通过 Core Audio 支持(如果是的话,可以选择移植到 Core Audio)?我应该将音频从 5.1 转换为其他格式(3.1、立体声……)吗?

最佳答案

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

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

关于macos - OpenAL 在 Mac OS X 上支持 5.1 输出吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4682249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com