簡體   English   中英

第二次播放文件時調用AVAudioPlayer audioPlayerDidFinishPlaying

[英]AVAudioPlayer audioPlayerDidFinishPlaying called when the file is played second time

我正在使用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時,音頻開始正常播放。 但是當聲音結束並且音頻第二次結束時它會重新啟動,然后只調用audioPlayerDidFinishPlaying方法。

我被困住了,不知道什么是錯的..

即使循環次數設置為1

這正是原因所在。 此屬性的名稱和行為有點違反直覺,但如果您已閱讀文檔,則很明顯它會設置重復次數,而不是播放次數。 文檔引用:

值0(默認值)表示播放一次聲音。

因此將其設置為0(或者不設置它,零是默認值)並且它將僅播放音頻文件一次:

audioPlayer.numberOfLoops = 0;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM