首页 文章

AVAudioPlayer 间歇性地不会播放声音

提问于
浏览
0

我在 ipad 上有一个音乐播放器应用程序。我从服务器下载 m4a 文件并将它们保存到 doc 目录。我还使用 Core Data 来保存播放列表信息。我有超过 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];

2 回答

  • 0

    如果你使用 ARC 一个好的开始解决问题的方法是观察仪器中的引用计数。我也遇到了这个问题。我的文件都没有播放。我在 Instruments 中看到 AVAudioPlayer 实例在声音开始播放之前就已经发布了。至少它看起来像是被释放了。在我将核心数据模型中的 AVAudioPlayer 的引用存储后,错误被修复了!在没有 ARC 的另一个项目中,相同的代码在不存储引用的情况下工作。

  • 0

    或者您可以尝试在属性声明中使用 strong 而不是 retain

    @property(nonatomic,强)AVAudioPlayer *播放器;

相关问题