我正在使用avaudioplayer在iPhone游戏中播放声音效果。
这是我的代码的一部分:
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,因为它比音频队列更简单,但我需要声音来播放,而不是崩溃我的应用程序。