2009-04-22 12 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はAudio Queuesよりもはるかに簡単なので、私は本当にAVAudioPlayerに固執したいと思っていますが、再生するサウンドとアプリケーションをクラッシュさせないサウンドが必要です。

答えて

0

この問題を解決する方法が見つかりませんでした。代わりに私のサウンドニーズにOpenALを使用して取り組んだ。

0

currentTimeをリセットする前にstopを呼び出そうとしましたが、再生を呼び出しましたか?あなたの例の編集:

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

私は、このような場合には見当がつかないが、音がロックの問題を引き起こしている可能性があります再生しながら、おそらくCURRENTTIMEをリセットします。ドキュメントは確かにこれや何かに対して警告しません。

関連する問題