3

録音したサウンドを 3 回ループさせたいのですが、ループ間に 1 秒間の無音を入れたいのですが、どうすればよいですか? play_button の私のコード:

-(IBAction) play_button_pressed{

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

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

}

1) この 1 秒間の無音を追加するために、このメソッドに追加できるものはありますか?

2) そうでない場合、実際の録音に 1 秒間の無音を追加する方法はありますか?

編集:ありがとう; 2 秒間停止して、サウンドを 1 回繰り返すソリューションが得られました。無限にループするわけではありませんが、何が欠けているのか教えていただけますか?

-(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と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[avPlayerplay]を呼び出します。

-(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 に答える