OpenAL 中的 ALC_STEREO_SOURCES 是啥?

Posted

技术标签:

【中文标题】OpenAL 中的 ALC_STEREO_SOURCES 是啥?【英文标题】:Waht is ALC_STEREO_SOURCES in OpenAL?OpenAL 中的 ALC_STEREO_SOURCES 是什么? 【发布时间】:2019-09-02 12:33:49 【问题描述】:

我需要确定在 OpenAL 中同时播放源的最大数量。在this 回答@deft_code 建议查询ALC_STEREO_SOURCES 的上下文。

OpenAL 1.1 规范说:

ALC_STEREO_SOURCES:指示应该有多少来源的提示 能够支持立体声数据

从这个描述中不清楚,如果ALC_STEREO_SOURCES 表示可以通过alGenSources 创建的最大源,或者同时播放源的最大数量。

那么ALC_STEREO_SOURCES到底是什么意思?

【问题讨论】:

【参考方案1】:

TL;DR:OpenAL 的设计和文档都很糟糕。

说来话长: Creative 员工自己建议使用 OpenAL Soft 而不是 Creative 提供的实现(但是我还没有使用 OpenAL Soft,因此目前无法保证)。显然它也更快。 您可以在他们的邮件列表中阅读该建议:http://openal.996291.n3.nabble.com/what-s-going-on-with-connect-creativelabs-com-td5546.html

ALC_STEREO_SOURCESALC_MONO_SOURCES 确实是提示,但是它们也应该可以使用 alcGetIntegerv 进行查询。你也可以在他们的邮件列表中阅读:http://openal.996291.n3.nabble.com/Max-number-of-sources-and-legit-id-values-for-each-OpenAL-implementation-td3200.html

从这个描述不清楚,如果 ALC_STEREO_SOURCES 表明 可以通过 alGenSources 创建的最大源,或最大数量 同时播放源。

根据我收集到的信息,没有人知道。正如您已经注意到的那样,这取决于实现,并且文档对它(以及许多其他事情)非常不清楚。

我读到的另一个问题是:alcGetIntegerv 可能会告诉您例如可以播放/拥有 32 个来源。然而,根据 OpenAL 实现,该数字可以跨进程共享。因此,其他进程会在您不知情的情况下从该数字中减去。在运行时,当您在 32 个源的限制范围内尝试创建或播放源时,这将导致 OpenAL 错误。

就我个人而言,我会编写一个资源管理器,仅在没有未使用的资源时才回收资源并分配新的资源。

【讨论】:

已经有这样的经理了,但是进程间共享的资源吓到我了。感谢您的回复! @Sergey 是的,我想你现在已经想出了一个解决方案。关于共享资源:这似乎只适用于硬件 OpenAL 驱动程序。

以上是关于OpenAL 中的 ALC_STEREO_SOURCES 是啥?的主要内容,如果未能解决你的问题,请参考以下文章

ios 上 OpenAL 中的消音和立体声延迟?

通过 openAL 将录制的音频保存为 .wav

使用 OpenAL 播放到特定频道

加载 WAV 文件时出现 OpenAL 错误 40963

OpenAL不播放声音

OpenAL 2d 平移 C++