如何在iPhone上的精确时刻播放声音?

如何在iPhone上的精确时刻播放声音?,第1张

概述我正在努力在iPhone上创建一个简单的节拍器.该应用程序现在所做的是运行计时器,每1/1000秒输入计时器的功能.然后它检查当前时间与启动应用程序的时间(我正在使用CACurrentMediaTime()函数). CFTimeInterval currentTime = CACurrentMediaTime();if (self.beatingStartTime == 0) { sel 我正在努力在iPhone上创建一个简单的节拍器.该应用程序现在所做的是运行计时器,每1/1000秒输入计时器的功能.然后它检查当前时间与启动应用程序的时间(我正在使用CACurrentMediaTime()函数).

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上的精确时刻播放声音?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1070458.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存