2012-04-06 2 views
1

녹음 된 사운드를 3 번 ​​반복하지만 루프 사이에 1 초간 무음을 사용하고 싶습니다. 어떻게해야합니까? play_button에 대한 내 코드 :AVFoundation : 재생 루프 사이에 무음 포즈 추가

-(IBAction) play_button_pressed{ 

AVAudioPlayer * avPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:recordedTmpFile error:&error]; 

[avPlayer setNumberOfLoops: 2]; 
[avPlayer play]; 

} 

1) 1 초 동안 침묵을 추가 할 수있는 방법은 무엇입니까?

2) 그렇지 않은 경우 실제 녹음에 두 번째 무음을 추가하는 방법이 있습니까?

편집 : 감사합니다; 나는 2 초의 일시 정지로 소리를 한 번 반복하는 해결책을 얻었다; 그것은 무한히 반복되지 않지만, 내가 누락 된 것을 말할 수 있습니까?

-(IBAction) play_button_pressed{ 

AVAudioPlayer * avPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:recordedTmpFile error:&error]; 

//[avPlayer setNumberOfLoops: 2]; 
avPlayer.delegate = self; 
[avPlayer prepareToPlay]; 
[avPlayer play]; 

} 

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)avPlayer successfully:(BOOL)flag 
{ 
NSLog(@"audioPlayerDidFinishPlaying"); 
tm = [NSTimer scheduledTimerWithTimeInterval:2.0 
           target:self 
           selector:@selector(waitedtoplay) 
           userInfo:nil 
           repeats:NO]; 
} 

-(void) waitedtoplay 
{ 
    AVAudioPlayer * avPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:recordedTmpFile error:&error]; 
[tm invalidate]; 
[avPlayer prepareToPlay]; 
[avPlayer play]; 
NSLog(@"waitedtoplay"); 
} 

답변

1

내가 아는 한, AVAudioPlayer의 어떤 방법도 재생 루프 사이에 "무음"을 만들지 않습니다.

같은 종류의 루프를 만들 때 AVAudioPlayerDelegate 및 timer에 정의 된 콜백 메소드를 사용했습니다.

헤더 파일에서 다음과 같이 AVAudioPlayerDelegate를 사용하도록 선언하십시오. AVPlayer를 소리를 재생이 종료되면

@interface xxxxController : UIViewController 
<AVAudioPlayerDelegate>{ 

는 방법 "audioPlayerDidFinishPlaying은"호출됩니다.

그런 다음 메서드를 호출하여 특정 시간 동안 대기합니다 (예 :

-(void) wait{ 
float seconds = 2.0f; 
tm = [NSTimer scheduledTimerWithTimeInterval:seconds 
             target:self 
            selector:@selector(waitedtoplay) 
            userInfo:nil 
            repeats:NO]; 
} 

그리고, 방법 "waitedtoplay", 호출 다음 [AVPlayer를 플레이]

-(void) waitedtoplay{ 
    [tm invalidate]; 
    [avPlayer play]; 
} 

이 너무 루프 = 3의 수를 제한하는 카운터를 추가하십시오, 끝없는 루프입니다.

는 "waitedtoplay"로 추가 방법에있어서 편집

, 당신은 "avplayer.delegate = 자기"로 설정 놓쳤다. 따라서 AVAudioPlayer는 "audioPlayerDidFinishPlaying"을 호출하지 않습니다.

-(void) waitedtoplay 
{ 
AVAudioPlayer * avPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:recordedTmpFile error:&error]; 
[tm invalidate]; 
avPlayer.delegate = self; <<=== MISSING ! 
[avPlayer prepareToPlay]; 
[avPlayer play]; 
NSLog(@"waitedtoplay"); 
} 

...

+0

고마워, 신 위와 같이 추가, 그것은 무한히 반복됩니다주세요! – MikeDaMike