2013-11-26 2 views
5

내가 조금 이상한 사건으로 난처한 해요 통해 재생 된 후 효과를 가지고 :AVAudioPlayer 번호는 한 번만

나는 한 번 탭 중 하나를 오디오 플레이어에 대한 루프를 설정하거나 재설정있는 UIButton을 가지고 0 (루프 없음). 여기에 방법입니다 - 어떤 이유로 지금

-(void)changeLoopValueForPlay:(int)tag toValue:(bool)value{ 
    AVAudioPlayer *av = [self.playerArray objectAtIndex:tag]; 
    if(value){ 
     [av setNumberOfLoops:100]; 
     [av prepareToPlay]; 
    } 
    else{ 
     [av setNumberOfLoops:0]; 
    } 
} 

, 플레이어가 루프 값이 즉시 영향을받지 않는 것을 의미 오디오 한 시간을 통해 재생 한 후에 만 ​​적용됩니다 루프,하지만 "numberOfLoops" 내가 연주하기 전에 값을 확인할 때 플레이어의 값은 실제로 100으로 설정됩니다. 나는 이것이 플레이어의 초기화 또는 로딩과 관련이 있다고 가정하고 있지만, 두 개의 연극 사이에서 다시 초기화하지는 않습니다 (하나는 루프가없고 다른 하나는). 왜 이런 일이 일어나는 지 아십니까? 다른 코드를보고 싶다면 알려주세요.

답변

1

이 문제가 해결되었지만 직접 해결 방법이 아닌 해결 방법 인 것처럼 느껴집니다. 내가 한 것은 numberOfLoops 값을 원하는대로 설정 한 새로운 AVAudioPlayer를 만들고 기존 플레이어의 값을 변경하는 대신 해당 플레이어를 기존 플레이어로 교체하는 것입니다.

0

나는 numberOfLoops을 모두 포기하고 대신 내 자신의 논리를 사용하여 문제를 해결합니다. ,

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer*)player successfully:(BOOL)flag 
{ 
    if(flag && <#(bool)i_want_to_repeat_playing#>) 
    { 
     [self.audioPlayer play]; 
    } 
} 

그냥 예를 들어, 원하는 논리 <#(bool)i_want_to_repeat_playing#> 교체 카운터가있는 경우 확인 :

self.audioPlayer.delegate = self; 

다음, 대리인의 -audioPlayerDidFinishPlaying:successfully:을 구현 :

첫째, AVAudioPlayer의 대리자를 설정 특정 임계 값에 도달했습니다.