2013-10-18 46 views
0

我正在研究僅需iOS7的應用程序,需要使用滴答聲顯示時鐘。我使用了1秒的NSTimer,並且我使用AVAudioPlayer來每秒鐘播放滴答聲。準確調度iOS中的聲音7

不幸的是,這個時機有點偏差。我已經測量過這個計時器是在2秒到22萬秒之間關閉的,你認爲這不會有什麼大不了的,但是這個延遲造成了一個令人討厭的緊張感......有點像心跳一樣:-)

我環顧了一下,但它聽起來像使用音頻隊列服務是唯一的出路..我真的不喜歡深入研究特定框架的深度。

我的問題:是否有其他方式獲取iOS 7中精確調度的聲音事件,並且失敗了,是否有一個體面的包裝框架可用於某處的音頻隊列服務?還是有更好的方法來更精確地調度NSTimers?

+0

你有'dispatch_after'的問題嗎? –

回答

0

使用NSTimerlibdispatch中的任何一個,或者產生一個睡眠時間週期的線程,都要依靠基礎線程及時調度。內核不能保證這一點,你觀察時序抖動並不奇怪;您觀察到的延遲看起來很合理。

NSTimer在主線程上運行很可能會執行其中最糟糕的操作,因爲您還在通過它交付其他事件。

我認爲你的選擇是使用音頻隊列服務,一個實時線程用AVAudioPlayer安排事件,或者將音頻自己渲染到一個remoteIO單元。

我不認爲AVPlayer提供任何特定的時間保證。

+0

「實時線程」=單獨的線程? –

+0

AVAudioPlayer甚至線程安全嗎? –

+0

另一個「解決方案」是播放循環60秒左右的節拍,它可以保證節拍之間的時間間隔,但不會與時鐘上的秒數同步變化。「 –