OpenAL播放声音,处理一个实例,另一个实例的声音都被分散了?



我使用OpenAL在我的NPAPI插件(浏览器插件)中播放来自网络流的声音。当我打开多个浏览器的选项卡时,我关闭其中一个选项卡,其他选项卡的声音也会消失。有人可以给我一些帮助吗?或者任何人都可以给我一些播放流音频的建议,例如来自麦克风或此类设备的音频。当我使用音频队列服务时,它仍然无法支持多实例。出于工作的原因,我无法将我的代码粘贴在那里,对此感到抱歉。我以某种方式使用 OpenAL 作为 Apple 开发人员的示例 - oalTouch,链接是https://developer.apple.com/library/ios/samplecode/oalTouch/Introduction/Intro.html

我使用

系统默认设备播放声音,这意味着我使用alcOpenDevice(NULL)打开设备。

当包含插件的页面关闭时,插件的相应实例将被销毁;每个插件都有一个实例同时在浏览器中处于活动状态。据推测,问题在于您正在插件实例中执行某些操作,该操作会破坏全局内容。

如果无法看到有关代码正在做什么的任何信息,则很难看出任何人如何帮助弄清楚该内容是什么。

现在我找到了原因。OpenAL确实支持多音频源,但是当我将其用作oalTouch示例时,我没有更改任何内容。我关闭一个浏览器的选项卡,声音停止的原因是当我销毁插件实例时,设备被我关闭了。所以如果我想在多实例中使用它,我应该仔细设计它,这是我的设计:我使用静态 var 来指示默认设备是否打开,如果打开,我不会再次打开它(使用 alOpenDevice(NULL) 方法)。但是对于不同的选项卡,我使用不同的sourceId(使用alGenSource(...)方法)。当我关闭浏览器的 teb 时,插件实例也被销毁了。我使用静态变量来检查是否还有插件实例使用默认音频设备,如果是,则什么都不做,否则关闭设备。

最新更新