1

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 メソッドのみが呼び出されます。

私は立ち往生していて、何がうまくいかないのかわからない..

4

1 に答える 1

3

ループ回数を1回にしても

それがまさにその理由です。このプロパティの名前と動作は少し直感に反していますが、ドキュメントを読んだことがあれば、再生回数ではなく繰り返し回数を設定することは明らかです。ドキュメントからの引用:

デフォルトの値 0 は、サウンドを 1 回再生することを意味します。

したがって、0 に設定すると (または設定しないでください。ゼロがデフォルト値です)、オーディオ ファイルが 1 回だけ再生されます。

audioPlayer.numberOfLoops = 0;
于 2012-12-29T08:57:20.577 に答える