AVAudioPlayer 间歇性不播放声音
Posted
技术标签:
【中文标题】AVAudioPlayer 间歇性不播放声音【英文标题】:AVAudioPlayer intermittently wont play sound 【发布时间】:2012-08-08 16:26:52 【问题描述】:我在 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];
【问题讨论】:
【参考方案1】:如果您使用 ARC,开始解决问题的一个好点是观察 Instruments 中的引用计数。我也有这个问题。我的文件都没有播放。我在 Instruments 中看到 AVAudioPlayer 实例是在声音开始播放之前释放的。至少它看起来像是被释放了。在我将 AVAudioPlayer 的引用存储在核心数据模型中后,该错误已修复!在另一个没有 ARC 的项目中,相同的代码确实可以在不存储引用的情况下工作。
【讨论】:
感谢您这么久后回答我的问题。确实,我的问题与应该提前发布有关。【参考方案2】:或者你可以尝试在属性声明中使用strong而不是retain
@property(nonatomic, strong) AVAudioPlayer *player;
【讨论】:
以上是关于AVAudioPlayer 间歇性不播放声音的主要内容,如果未能解决你的问题,请参考以下文章
触发 AVAudioPlayer 以停止所有声音并播放选定的声音,除非单击播放(选定)按钮