我们的ipad应用程序并行播放一堆OpenAL源,每个持续触摸一个。源是在touchesMoved上创建和启动的,并在touchesEnded或touchesCancelled上停止。
事情似乎工作得很好,除了一个错误,有时一个来源似乎在触摸结束后继续播放。这似乎只在生成大量触摸事件时才会发生。
我已经确认,当发生这种情况时,我的所有AL源都已使用alSourceStop停止并且已使用alDeleteSources销毁。 OpenAL未报告任何错误。但声音并没有停止。
我开始认为这可能是OpenAL的iOS实现中的一个错误。有没有人见过这样的东西?
答案 0 :(得分:2)
我自己也有同样的OpenAL问题,在iPad 2和iOS 5上启用了新的混响功能。我可以绝对确认同一声音的播放/停止命令已配对,即使你出现问题不要重复使用来源。延迟停止没有帮助,也没有监视使用GCD生成的线程上的状态转换。不知道如何继续,但我想在调试这个问题时我会传递我的观察结果。
答案 1 :(得分:0)
当一个或多个手指移动或结束触摸时触发[Moved | Ended]触摸。 iOS?有吗?有5个手指的硬限制不止于此,事件似乎有点不稳定。如果您遇到此限制,则可能需要重新考虑您的实施。
由于您没有提供任何实现细节,因此很难假设您的代码可能有什么错误。我不知道您是如何验证所有AL源已经停止的。也许你应该在启动源时递增一个全局变量,并在停止源时递减它,然后检查变量并确保它为0(恕我直言,你可能会看到它是> 0)。 iOS的最大源限制是32,但是你说你没有收到openAL错误......所以你很可能没有达到这一点。
答案 2 :(得分:0)
您可能会发现以下解决方案很有帮助。我一直在遇到与我的应用程序相同的问题,到目前为止,我找到的最好的解决方案是简单地创建一个“沉默”的开源(一个带有缓冲区的源,即 - 充满零),然后播放它总是在我停止声音之后。
这似乎解决了即使在停止命令之后仍然继续播放的声音问题,尽管偶尔会引入一个小的“咔嗒声”。在任何情况下,我发现一个小的“咔哒”声音比声音应该停止时声音更能容忍......
希望这有助于那里的人!