2009-07-27 3 views
1

AVAudioPlayer를 사용하여 짧은 사운드를 재생하고 싶습니다. 시스템 사운드보다 더 많은 컨트롤이 있기 때문에.내 아이폰에서 AVAudioPlayer로 짧은 사운드를 재생할 수 있습니까?

몇 개의 다른 짧은 소리를 재생하기 위해 몇 개의 버튼이 연결되어 있습니다. 각 사운드 파일은 약 1.5 - 2.0 초입니다.

모든 것이 정상적으로 작동합니다 ...을 제외한 ... 버튼을 누르기 전에 소리가 들릴 때까지 기다려야합니다. 그러면 소리가 다시 재생됩니다.

는 현재 개별 AVAudioPlayers이있는 viewDidLoad에 생성됩니다 ... 그리고 소리는 버튼이 나는 버튼을 누를 때 ...이 위의 문제를 해결 플레이어를 만드는 시도

을 누를 때 재생이라고합니다. ..하지만 잠시 후 앱이 다운됩니다 ... 모든 소리가 멈 춥니 다.

아이디어가 있으십니까? 감사합니다. Jonathan

답변

0

AVAudioPlayer가 사운드 재생을 중지하면 일반적으로 생성 된 플레이어 인스턴스가 너무 많아서 일반적으로 유출되기 때문입니다. 당신은 당신이 끝나고 나서 얼마간 풀어 주어야한다.

0

재생하기 전에 플레이어의 currentTime0으로 설정해야합니다. 이미 재생 중일 때 [player play]을 호출해도 아무 효과가 없습니다.

player.currentTime = 0; 
[player play]; 
0

짧은 소리를 많이 사용하려는 경우 OpenAL로 전환하는 것이 좋습니다. 더 복잡한 것은 아니며 나중에 복잡한 오디오 설정에서 약간의 문제가 발생할 수 있습니다.

유용한 튜토리얼과 유용한 코드가 있습니다 here (archived here). 새로 만들기

+2

링크는 현재 액세스 할 수 없습니다. –

+0

사실, "iphone-programming-part-6-multiple-sounds-with-openal"을 검색하고 Google 캐시를 살펴보십시오. – Bersaelor

0

괜찮지 만, 헤더 선언 있는지 확인하고 수행이 '그 mahboudz에 따라, 더 이상 필요 없습니다 할 아무것도의 메모리를 해제합니다

- (void) audioPlayerDidFinishPlaying: (AVAudioPlayer *) player successfully: (BOOL) completed { 
    [player release];       
} 

앱이 간단한 경우

, 암시.

사운드 파일 크기에 따라, 그리고 장면을 dealloc하면 이것은 충돌을 완전히 방지하지 못할 수도 있습니다.

if (self.view.superview) { //release } 

또는 무엇인가를 추가 할 수 있습니다.

이것은 모두 메모리 처리입니다. 문자 그대로 브러시를 사용하여 플레이어 오브젝트를 처리하는 방법을 알고 싶다면 dealloc 또는 didFinish : delegate 함수에 릴리스를 배치하는 것이 편안하고 다른 함수에 속하지 않는 이유를 알아야합니다.

iPhone은 언제든지 중단, 중지 및 혼란을 일으킬 수 있으므로 메모리 처리 방법 및 문제 발생시 대처 방법을 알아야합니다. 나는 방금 비슷한 성질의 충돌이 있었고 위의 모든 것은 그것에 적용되었습니다. NSAML 델리게이트는 포인터를 모른 채 악몽이 될 것입니다 ... AVAudioPlayer와 동일합니다 ...

관련 문제