AVAudioPlayer在15次中不会播放一次音频

时间:2013-02-07 07:06:36

标签: iphone ios core-audio avaudioplayer

我遇到了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];

1 个答案:

答案 0 :(得分:3)

  

使用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,您的问题也可能会发生,如果它没有通过该网址获取数据,那么它就不会播放音频。

您的代码的其他问题可能是释放audioPlayer对象。如果要分配大量对象而不从内存中释放它们。这最终可能会导致内存不足。