AVAudioPlayer クラスを使用してオーディオを再生していますが、問題は、オーディオを再生するときに、ファイルの再生が終了したときに audioPlayerDidFinishPlaying でコールバックを受信せず、ループ数が 1 に設定されていてもファイルが再び開始されることです。
これがコードです。
.h
@interface AudioController : NSObject <AVAudioPlayerDelegate>
-(void) playBigGameTheme{
-(void) playMusic:(NSString*) fileName isLooping: (BOOL) isLooping;
@end
.m
@implementation AudioController{
AVAudioPlayer *audioPlayer;
}
-(void) playMusic:(NSString*) fileName isLooping: (BOOL) isLooping{
int loop = 1;
if(isLooping){
loop = -1;
}
[audioPlayer stop];
NSURL* soundUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:fileName ofType:@"mp3"]];
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundUrl error:nil];
audioPlayer.numberOfLoops = loop;
[audioPlayer setDelegate:self];
NSLog(@"===Number of loops : %d", audioPlayer.numberOfLoops);
[audioPlayer play];
}
- (void) audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
NSLog(@"HERE");
}
-(void) playBigGameTheme{
[self playMusic:BGAME_MAIN_MUSIC_FILE_NAME isLooping:NO];
}
@end
playBigGameTheme を呼び出すと、オーディオが正しく再生され始めます。ただし、サウンドが終了すると再開し、オーディオが 2 回目に終了すると、audioPlayerDidFinishPlaying メソッドのみが呼び出されます。
私は立ち往生していて、何がうまくいかないのかわからない..