私は次のように動作するiOSアプリを持っています:
最初のビュー 異なるビューにリンクする 3 つのボタン。それぞれに独自のオーディオ ファイルがあります。
ユーザーが 1 つのビューを開いて、オーディオ ファイルの再生を開始したとします。彼らがアプリをナビゲートするとき、オーディオファイルはまだ再生されますが、これは問題ありません。私はそれに満足しています.
ただし、ユーザーが 2 番目のオーディオ ファイルを開いて再生を押すと、最初のオーディオ ファイルの上に重ねて再生されるため、2 つのオーディオが一緒に再生されます。
別の再生ボタンが押された場合、再生中の最初のオーディオ ファイルを停止する必要があることをコードに伝えるにはどうすればよいですか??
これを行うためにAVFoundationフレームワークを使用しています
コードは次のとおりです。
NSString *stringPath = [[NSBundle mainBundle]pathForResource:@"01" ofType:@"MP3"];
NSURL *url = [NSURL fileURLWithPath:stringPath];
NSError *error;
avPlayer = [[AVAudioPlayer alloc]initWithContentsOfURL:url error:&error];
[avPlayer setNumberOfLoops:2];
[avPlayer setVolume:self.sliderVolumeOutlet.value];
[NSTimer scheduledTimerWithTimeInterval:.1 target:self selector:@selector(updateMyProgress) userInfo:nil repeats:YES];
-(void)updateMyProgress
{
float progress = [avPlayer currentTime]/[avPlayer duration];
self.myProgressView.progress = progress;
}
- (IBAction)sliderVolumeAction:(id)sender {
UISlider *mySlider = sender;
[avPlayer setVolume:mySlider.value];
}
- (IBAction)stopButton:(id)sender {
[avPlayer stop];
[avPlayer setCurrentTime:0];
}
- (IBAction)pauseButton:(id)sender {
[avPlayer pause];
}
- (IBAction)playButton:(id)sender {
[avPlayer play];
}
- (IBAction)backButtonEvent:(id)sender {
[self dismissViewControllerAnimated:YES completion:NULL];
}