2011-07-14 25 views
2

我試圖對聲音進行非常精確的定時觸發。帶音頻的定時器精度

我用這個代碼來創建計時器:

timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0));  
    dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 1ull*500000000, 5000ull); 
    dispatch_source_set_event_handler(timer, ^{[myAVAudioPlayer play];}); 
    dispatch_resume(timer); 

myAVAudioPlayer初始化這樣的:

NSURL *soundURL = [NSURL fileURLWithPath:[mainBundle pathForResource:@"clock" ofType:@"aiff"]]; 
    myAVAudioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundURL error:&error]; 
    [myAVAudioPlayer prepareToPlay]; 

我也曾嘗試使用的.caf聲音的格式和蘋果的SoundEffect類BubbleLevel示例代碼,在性能上沒有顯着差異。

如果發射率很低,聲音相當準確。但是,如果我加快發射速度,聲音非常不準確。

任何幫助將不勝感激。

+0

我有同樣的問題,你找到一個解決方案? – QuiBongJin

回答

1

調度計時器不是爲音頻精度準確度設計的。 IIRC是蘋果公司推薦人們仍然直接使用線程而不是調度隊列的少數幾個領域之一。

比這更好的是調查Core Audio,除其他外,它的目的是精確處理你想要的:精確控制時間。我在那裏沒有太多的細節幫助,因爲我對API不熟悉,而且它的傳統記錄很糟糕,但是快速谷歌出現了at least one person doing the same thing,所以你可能會找到更好的解決方案。

+0

謝謝。我會研究這一點。 – Reggian

+0

你的「至少有一個人做同樣的事」的鏈接參考(http://kylehalladay.com/?p=35)似乎進入網站的根目錄,我無法找到他的帖子,他討論這個話題。你是否記得他的解決方案的基礎? – BigMacAttack