2009-04-22 4 views
0

iPhone 게임에서 AVAudioPlayer를 사용하여 사운드 효과를 재생하고 있습니다. 이 내 코드의 일부입니다 : 그것은 사용자 상호 작용을 기반으로 연극 있기 때문에, 매우 자주 반복해서 재생 될 수전체 애플리케이션에 걸려있는 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)으로 시도했는데 같은 방식으로 실패했다.

포인터가 있습니까? Audio Queues보다 AVAudioPlayer를 사용하는 것이 훨씬 간단하므로 AVAudioPlayer를 계속 사용하고 싶습니다.하지만 재생할 사운드가 필요하고 응용 프로그램이 손상되지 않아야합니다.

답변

0

이 문제를 해결할 수있는 방법을 찾지 못했습니다. 대신 OpenAL을 사용하여 사운드 요구 사항을 해결했습니다.

0

currentTime을 다시 설정하기 전에 stop을 호출 한 다음 재생을 호출 했습니까? 귀하의 예제 편집 :이 경우이지만, 소리가 잠금 문제를 일으킬 수 있습니다 재생되는 동안 아마도 currentTime을 재설정하는 경우

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

나는 아무 생각이 없습니다. 문서는 분명히 이것이나 다른 것에 대해 경고하지 않습니다.