AVAudioPlayer 15 次不播放音频

Posted

技术标签:

【中文标题】AVAudioPlayer 15 次不播放音频【英文标题】:AVAudioPlayer doesn't play audio in once in 15 times 【发布时间】:2013-02-07 07:06:35 【问题描述】:

我在使用 AVAudioPlayer 时遇到了一个非常奇怪的问题。我已经初始化了 AVAudioPlayer,如下所示。 它大部分时间播放音频,但每 15-20 次没有音频播放一次。播放器正在正确初始化并且没有错误。 请帮我解决问题。

AVAudioPlayer *backgroundMusicPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:backgroundMusicURL error:&error];
self.backgroundMusicPlayer = backgroundMusicPlayer;
[backgroundMusicPlayer release];
[self.backgroundMusicPlayer setDelegate:self];
[self.backgroundMusicPlayer prepareToPlay];
[self.backgroundMusicPlayer play];

【问题讨论】:

显示你的 URl 代码 & 获取音频文件数据 如果您不使用 GCD,请查看我的答案 【参考方案1】:

使用GCD to load audio data。使用 GCD 异步加载 歌曲的数据到 NSData 的一个实例中,并将其用作提要 音频播放器。你必须这样做,因为加载音频的数据 文件,取决于音频文件的长度,可能需要很长时间 如果您在主线程上执行此操作,那么您正在运行 UI 体验停滞的风险。因此,您必须使用 全局并发队列,以确保您的代码不会在 主线程。如果它在主线程上,那么问题就像你一样 面对发生。 查看此示例代码

     dispatch_queue_t dispatchQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
        dispatch_async(dispatchQueue, ^(void)
      
    NSBundle *mainBundle = [NSBundle mainBundle];
        NSString *filePath = [mainBundle pathForResource:@"MySong" ofType:@"mp3"];
        NSData *fileData = [NSData dataWithContentsOfFile:filePath]; NSError *audioPlayerError = nil;
     self.audioPlayer = [[AVAudioPlayer alloc] initWithData:fileData error:&audioPlayerError];

        if (self.audioPlayer != nil)
    
        self.audioPlayer.delegate = self;
        if ([self.audioPlayer prepareToPlay] && [self.audioPlayer play])
    
        NSLog(@"Successfully started playing.");
         
    else 
     
    NSLog(@"Failed to play the audio file.");
     self.audioPlayer = nil;
        
         
    else  NSLog(@"Could not instantiate the audio player.");
 );

您的问题也可能是因为initWithContentsOfURL 而发生的,如果它没有通过该 URL 获取数据,那么它就不会播放音频。

您的代码的其他问题可能是释放 audioPlayer 对象。如果您分配了很多对象并且从不从内存中释放它们。这最终可能导致内存不足。

【讨论】:

感谢 Ravindra,我面临的问题是 ("- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successful:(BOOL)flag") 被调用。但实际上没有播放音频。 等等,我发现有时音频播放失真。 我尝试使用您的代码。但我仍然面临这个问题。有时音频仍然会被分发。

以上是关于AVAudioPlayer 15 次不播放音频的主要内容,如果未能解决你的问题,请参考以下文章

AV音频播放器。音频文件的可选重定向。在 _audio 我得到空

如何在 Swift 5 中使用 AV 音频播放器在特定时间间隔内快进或快退音频(如歌曲)?

当音频输入添加到 AVCaptureSession 时 AVAudioPlayer 停止

无法在 swift 4 中使用 avaudioplayer 播放 http 音频

AVAssetWriter / AVAudioPlayer 冲突?

AVAudioPlayer 不会播放一个 mp3 的音频,但会播放其他的?