我想循环录制的声音3次,但想要在循环之间静音一秒钟,我该如何解决这个问题呢?我的play_button代码:
-(IBAction) play_button_pressed{
AVAudioPlayer * avPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:recordedTmpFile error:&error];
[avPlayer setNumberOfLoops: 2];
[avPlayer play];
}
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");
}
答案 0 :(得分:1)
据我所知,AVAudioPlayer的方法在播放循环之间没有“沉默”。
当我进行相同类型的循环时,我使用了AVAudioPlayerDelegate和timer中定义的回调方法。
在头文件中,声明如下使用AVAudioPlayerDelegate;
@interface xxxxController : UIViewController
<AVAudioPlayerDelegate>{
当avPlayer结束播放声音时, 将调用“audioPlayerDidFinishPlaying”方法。
然后调用方法等待一段时间,例如;
-(void) wait{
float seconds = 2.0f;
tm = [NSTimer scheduledTimerWithTimeInterval:seconds
target:self
selector:@selector(waitedtoplay)
userInfo:nil
repeats:NO];
}
并且,在方法“waitedtoplay”中,调用next [avPlayer play]
-(void) waitedtoplay{
[tm invalidate];
[avPlayer play];
}
这是一个永无止境的循环,所以请添加计数器来限制loop = 3的数量。
编辑
在您添加为“waitedtoplay”的方法中,您错过了设置“avplayer.delegate = self”。 因此,AVAudioPlayer不会调用“audioPlayerDidFinishPlaying”。
-(void) waitedtoplay
{
AVAudioPlayer * avPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:recordedTmpFile error:&error];
[tm invalidate];
avPlayer.delegate = self; <<=== MISSING !
[avPlayer prepareToPlay];
[avPlayer play];
NSLog(@"waitedtoplay");
}
请按上面的说法添加,它会无限重复......