AVAudioPlayer 间歇性地无法播放声音



我在ipad上有一个音乐播放器应用程序。我从服务器下载 m4a 文件并将它们保存到文档目录。我还使用核心数据来保存播放列表信息。我有超过 1000 首歌曲,我的桌子加载完美,播放完美。我可以毫无问题地播放播放列表。但。。。每隔一段时间就会播放一首歌。没有声音!我可以按单元格播放歌曲或转到下一首歌曲,一切恢复正常。所以这个问题是随机的和间歇性的。卡住的从来都不是同一首歌。我不能给你任何调试语句,就像我说的,它是如此随机和间歇性,很难复制。我想知道这是否是 ARC 问题。请帮忙,因为这个应用程序很快就会投入生产。

相对代码:

// setup music session
NSError *error = nil;
[[AVAudioSession sharedInstance] setDelegate: self];
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: &error];
[[AVAudioSession sharedInstance] setActive: YES error: &error];
NSLog(@"error AVAudioSession:%@", [error description]);
AVAudioPlayer *player = [[AVAudioPlayer alloc] init];
NSString *fullPath = fullPath = [self.docDirPath stringByAppendingPathComponent:filename];
NSURL *musicFileURL = [[NSURL alloc] initFileURLWithPath:fullPath];
// getting song from docDir
    NSData *songData = [[NSData alloc] initWithContentsOfURL:musicFileURL];
    player = [player initWithData:songData error:&error];
    NSLog(@"error player reg:%@", [error description]);
//NSLog(@"playing %@ at index:%d", musicFileURL, index);
    self.appPlayer = player;
    [self.appPlayer prepareToPlay];
    [self.appPlayer setEnableRate: YES];
    [self.appPlayer setDelegate: self];
    [self.appPlayer play];

如果您使用 ARC,开始解决问题的好点是观察仪器中的引用计数。我也有问题。我的所有文件都没有播放。我在乐器中看到AVAudioPlayer实例是在声音开始播放之前发布的。至少它看起来像是被释放了。在我把AVAudioPlayer的引用存储在核心数据模型中后,这个错误得到了修复!在另一个没有 ARC 的项目中,相同的代码确实无需存储引用即可工作。

或者你可以尝试在属性声明中使用strong而不是保留

@property(非原子,强)AVAudio播放器*播放器;

最新更新