2009-04-22 48 views
0

我正在使用AVAudioPlayer在iPhone遊戲中播放聲音效果。 這是我的代碼部分:AVAudioPlayer掛起整個應用程序

可以,因爲它起着基於用戶互動的重複播放,並且經常,
AVAudioPlayer *player = [dict objectForKey:@"Player"]; 
if (player.playing) { 
    player.currentTime = 0; 
} else { 
    [player play]; 
} 

一個聲音。當用戶移動他的手指時,我重複地調用這段代碼。

如果你這樣做,應用程序掛起,這是我得到的崩潰日誌中的錯誤:

0 libSystem.B.dylib    0x3146bb18 semaphore_timedwait_signal_trap + 8 
1 libSystem.B.dylib    0x3146297c semaphore_timedwait_signal + 8 
2 libSystem.B.dylib    0x3145f0fe _pthread_cond_wait + 898 
3 libSystem.B.dylib    0x3145f25a pthread_cond_timedwait_relative_np + 10 
4 AudioToolbox     0x348ddd50 CAGuard::WaitFor(unsigned long long) + 116 
5 AudioToolbox     0x3491b94c ClientAudioQueue::ServicePendingCallbacks() + 232 
6 AudioToolbox     0x3491ba60 AudioQueueReset + 44 
7 AVFoundation     0x34d16668 -[AVAudioPlayer setCurrentTime:] + 444 

這在我看來就像裏面AVAudioPlayer鎖定的問題,我一直沒能解決這個問題。我嘗試了不同的聲音格式(CAFF和IMA4),都以相同的方式失敗。

任何指針?我真的很喜歡堅持使用AVAudioPlayer,因爲它比音頻隊列簡單得多,但我需要播放聲音而不會使應用程序崩潰。

回答

0

我找不到解決此問題的方法。我通過使用OpenAL來解決我的聲音需求。

0

您是否曾嘗試在重置currentTime之前調用stop,然後調用play?編輯您的例子:

if (player.playing) { 
    [player stop]; 
    player.currentTime = 0; 
    [player play]; 
} else { 
    [player play]; 
} 

我不知道,如果是這樣的話,但也許重置currentTime的同時播放聲音時可能會導致鎖定問題。文檔當然不會警告這個或任何東西。