AVAudioPlayer 初始化正常,但拒绝播放
Posted
技术标签:
【中文标题】AVAudioPlayer 初始化正常,但拒绝播放【英文标题】:AVAudioPlayer initializes fine, but refuses to play 【发布时间】:2011-12-06 17:12:41 【问题描述】:我对@987654321@ 类有一个奇怪的问题。我创建了一个播放器,从初始化程序中获取了一个非零引用,但 -play
消息返回 NO
并且播放器不播放。我已经实现了播放器委托方法并且没有调用-audioPlayerDecodeErrorDidOccur:error:
。初始化程序的错误未设置。
我已经检查了通常的嫌疑人。我确实设置了音频会话类别,我也激活了它。播放器的音频文件在播放前由应用程序录制。当我用不同的声音(来自应用程序包)初始化播放器时,它会播放。当我将录制的文件复制到应用程序包中,然后使用此副本初始化播放器时,它会播放。当我在加载文件之前检查文件是否存在时,文件就在那里、可读并且大小不为零。
模拟器和设备我都试过了,没区别。
我错过了什么?
【问题讨论】:
是什么类型的音频文件?不同的声音是否与您尝试播放的声音格式相同?如果您以某种方式导出您录制的文件(例如邮寄给自己),您可以在台式机上播放它吗(即实际文件有问题而不是 AVAudioPlayer 有问题)? 用URL初始化播放器时,是否返回错误? 音频文件是 WAV。正如我在问题中已经写的那样,我可以获取相同的文件,将其复制到应用程序包中,然后从那里播放得很好。 (就像我在桌面上使用不同的应用程序打开它一样。)初始化没有返回错误。 【参考方案1】:这有助于在录制结束和播放之间等待 1/10 秒:
dispatch_time_t moment = dispatch_time(DISPATCH_TIME_NOW, 1e8);
dispatch_after(moment, dispatch_get_main_queue(), ^
[statusLabel setText:@"Playing"];
[self setPlayer:[[AVAudioPlayer alloc]
initWithContentsOfURL:[self recordingURL]
error:NULL]];
[player play];
);
这当然不是一个合适的解决方案,所以经过一番搜索后,我意识到我没有正确完成录制,在创建播放器之前没有刷新文件缓冲区。现在我在调用播放器之前刷新了缓冲区,一切正常。
【讨论】:
以上是关于AVAudioPlayer 初始化正常,但拒绝播放的主要内容,如果未能解决你的问题,请参考以下文章