OpenAL随机停止播放某些声音,只能通过重新启动来修复。

17

应用程序:两个使用Cocos2d的通用iOS游戏,拥有大量客户群。

问题:几个月前(2011年),开始出现报告说声音会随机中断,应用程序只播放部分声音,其他声音则不播放。这个问题只能通过设备重启才能修复。

重要提示和详细信息:

  • 同样的代码和相同的声音文件在一年多的时间里一直没有出现过此类错误报告。我希望我能确定一个日期,但我认为该问题始于iOS更新。

  • 这个bug非常难以重现。我个人见过一次,但我无法再次引发它。尽管如此,我们每天收到1-2封支持电子邮件,都是关于同样的问题,其中一些形成了糟糕的评论。如果我必须瞎猜一个数字,我会猜测它是千分之一的发生率。看起来在iPad上可能更常见,但我不确定。

  • 重新启动设备是唯一解决该问题的方法。重新启动应用程序无效,删除应用程序并重新安装也无效,必须强制关机然后重新开机。

  • 几周前,为了盲目地修复问题,我放弃了Cocos2d音效引擎,并将其中一款应用程序切换到ObjectAL(另一个基于OpenAL的音效引擎),希望它能解决问题。但它没有,同样的问题仍在发生。正如您所看到的,这两个引擎都是OpenAL的接口。

  • 声音文件使用苹果推荐的方法转换为caf格式,使用-c 1标志使它们成为单声道。 ( https://developer.apple.com/library/ios/#codinghowtos/AudioAndVideo/_index.html )

  • 仅仅为了明确,此故障与通常的声音问题(静音开关、音量)无关。部分声音正常播放,但在设备关闭并重新启动之前,它们将永远不会全部播放。

  • 如果有任何想法,我会非常感激帮助。我已经失去耐心,试图修复一个我无法重现且似乎是由我无法控制的东西引起的持久性故障。


    3
    听起来像是iOS中OpenAL实现的一个深层次的bug,可能但不一定是A4中GPUnit的硬件问题。为什么呢?因为你在代码中可能犯的错误都应该能够通过重新启动应用程序来修复。我认为你应该向客户解释这个问题,并向苹果公司提交一个错误报告,只是出于好奇。如果用户安装了你的两个应用程序之一并开始出现问题,另一个应用程序会有何反应?询问受影响的客户。 - ilmiacs
    @peter:我可能有同样的问题,你找到任何解决方案了吗? - Jonas Byström
    几年前,当我审查苹果的OpenAL源代码时,它充斥着线程错误,并且很容易被重负载测试(每秒播放20个声音,让电脑连续运行一夜)导致失败。看起来似乎没有什么改变。 - StilesCrisis
    我刚刚将声音引擎从cocos2dx内置的CocosDenshion更换为ObjectAL,希望能解决随机丢失声音的问题,但我又遇到了这个问题。对我来说没有什么运气。 - jayatubi
    这个问题可以持续地重现。使用openAL播放您的声音文件循环。确保您的应用启用了后台模式音频。播放应用程序和音效。进入后台。(声音仍在播放)。打开另一个使用音频的应用程序...(您的应用程序现在没有播放声音)。当您将应用程序带到前台时,openAL的代码仍将运行,但没有声音出现。也没有错误。获取声音的唯一方法(无需重新启动设备)是进行适当的dealloc(清理所有内容),然后进行适当的init。 - TomV
    1个回答

    3
    我曾遇到与评论者所述的OpenAL类似的问题。我们在不同硬件和操作系统版本上都遇到了偶发性问题。实际上,几乎无法重现。唯一之所以能够发现问题是因为有相当数量的用户经历了崩溃或其他严重的音频问题。我们试了数月时间想让它正常工作,但最终我们遇到的稳定性问题无法控制。最终,我们使用了另一个库,并完全放弃了OpenAL。我肯定不会推荐它用于新项目。

    4
    你有没有建议的库来替代OpenAL? - jayatubi

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接