CFTimeInterval currentTime = CACurrentMediaTime();if (self.beatingStartTime == 0) { self.beatingStartTime = currentTime;}if ( (currentTime - self.beatingStartTime) >= self.timeIntevalBetweenTicks * self.internalTimerCounter ) { self.internalTimerCounter ++; // ...}
如果有一个播放音频的好时机,使用OpenAL播放它的代码会被触发.
基本就是这样.我检查了在模拟器和2个设备(iPad和越狱iPhone 3GS)上运行时播放的声音,并且有一个问题 – 当我录制声音并查看Reaper
软件中的波形时,有些声音播放时间太晚了,还有一些 – 有点太早了(即使我能理解“太晚了”的部分,我真的不知道它应该如何才能发挥它应该 – 因为应用程序每次检查秒数,它基本上可以’然后指定的时间更早 – 但根据我的记录,它是.
与此同时,有一些节拍器应用程序在定时方面以“坚如磐石”着称,所以我猜有一种方法.我只是想知道我错过了什么……
编辑:将定时器调用从1/1000秒更改为例如1/100并没有帮助.
编辑2:当我从计时器切换到线程(并且我让线程在指定时间内休眠)时,我仍然会遇到奇怪的行为.节奏四处移动,虽然我可以理解一点滞后并且播放一些声音太晚,问题是它们中的一些确实发挥得太早 – 这意味着2节拍之间的时间距离应该超过应该通过的时间.
差异大约是3%,相当于大约10-15毫秒,这对我来说非常重要.任何人都知道为什么声音可以更早播放?我在iPhone模拟器和iPad实际设备上都试过了,我唯一的猜测是计时器有问题–CACurrentMediaTime()返回它应该的秒数.它甚至可能吗?
解决方法 尝试使用NSSound,并将其作为实例变量加载,除非您的节拍器没有运行,否则不要释放它.通过将文件加载到循环内存中可能导致延迟.另一件需要考虑的事情是节拍器可能不需要每1/1000秒轮询一次.如果你不经常这样做,你就不太可能让cpu饱和,你可能会得到更一致的结果.最后,看看Apple的演示如何工作:http://developer.apple.com/library/ios/#samplecode/Metronome/Introduction/Intro.html
可能会让你更好地了解如何完成你想要做的事:)
总结以上是内存溢出为你收集整理的如何在iPhone上的精确时刻播放声音?全部内容,希望文章能够帮你解决如何在iPhone上的精确时刻播放声音?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)