3

我想将录制的声音循环 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");
}
4

1 回答 1

1

据我所知,没有任何 AVAudioPlayer 方法在播放循环之间产生“沉默”。

当我制作相同类型的循环时,我使用了 AVAudioPlayerDelegate 和计时器中定义的回调方法。

在头文件中,声明使用 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];
}

这是一个永无止境的循环,因此请添加计数器以限制循环数 = 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");
}

请如上添加,它会无限重复...

于 2012-04-08T03:28:17.453 回答