Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios OpenAL源代码在停止和删除后继续播放_Ios_Openal - Fatal编程技术网

Ios OpenAL源代码在停止和删除后继续播放

Ios OpenAL源代码在停止和删除后继续播放,ios,openal,Ios,Openal,我们的ipad应用程序并行地播放一组OpenAL源代码,每一个源代码对应一个正在进行的触摸。源在touchesMoved上创建和启动,在touchesEnded或touchesCancelled上停止 事情似乎很顺利,除了一个bug,有时候一个源在触摸结束后似乎继续播放。这似乎只有在产生大量触摸事件时才会发生 我已经证实,当这种情况发生时,我所有的AL来源都已被alSourceStop阻止,并已被alDeleteSources销毁。OpenAL没有报告任何错误。然而声音并没有停止 我开始认为这可

我们的ipad应用程序并行地播放一组OpenAL源代码,每一个源代码对应一个正在进行的触摸。源在touchesMoved上创建和启动,在touchesEnded或touchesCancelled上停止

事情似乎很顺利,除了一个bug,有时候一个源在触摸结束后似乎继续播放。这似乎只有在产生大量触摸事件时才会发生

我已经证实,当这种情况发生时,我所有的AL来源都已被alSourceStop阻止,并已被alDeleteSources销毁。OpenAL没有报告任何错误。然而声音并没有停止


我开始认为这可能是OpenAL的iOS实现中的一个bug。有人见过这样的情况吗?

当一个或多个手指移动或结束触摸时,触动[移动|结束]就会触发。iOS?有吗?有一个5个手指的硬限制,超过这个限制,事件似乎变得有点不稳定。如果您遇到了这个限制,您可能需要重新考虑您的实现


因为您没有给出任何实现细节,所以很难假设代码可能有什么错误。我不知道你是怎么核实你所有的情报来源都停止了。也许您应该在启动一个源时递增一个全局变量,在停止一个源时递减一个全局变量,然后检查该变量并确保它为0(当然您可能会看到它大于0)。iOS的最大源代码限制是32,但你说你没有收到openAL错误。。。所以你很可能没有达到这一点。

我自己也有同样的OpenAL问题,在iPad2和iOS5上启用了新的混响功能。我可以绝对确认相同声音的播放/停止命令是成对的,即使您不重用源,问题也会发生。延迟停止没有任何帮助,在使用GCD生成的线程上监视状态转换也没有帮助。不知道如何继续,但我想在调试此问题时将观察结果传递给大家。

您可能会发现以下解决方案很有帮助。我的应用程序也遇到了同样的问题,到目前为止,我找到的最好的解决方案是简单地创建一个“静默”开放源代码(一个带有静默缓冲区的源代码,充满了零),并在我停止声音后始终播放它

这似乎解决了即使在发出停止命令后仍会继续播放的声音的问题,尽管它偶尔会引入一个小的“点击”。在任何情况下,我发现一个小的“咔哒”声比在应该停止的时候让声音继续更容易忍受


希望这能帮助别人

您如何将每个触摸事件与其相应的OpenAL声音相关联?你会错过关闭其中一个吗?你可能会在你的触摸屏方法中发布代码吗?至少你可以在停止声音之前将增益设置为0。如果它继续播放,那么你肯定会错过它。嗨,迈克尔,同样的问题也发生在这里。你找到解决办法了吗?到目前为止,我的解决方案是将计时器设置为提前0.03秒,在计时器的回调上,我检查源是否未播放,排队缓冲区计数是否>0,然后将缓冲区设置为零,这将停止声音。但这也会导致脏的“咔哒”声,因为声音“硬”停止,不会像应该的那样随着混响而消失。