AVAudioPlayer 初始化正常,但拒绝播放

Posted

技术标签:

【中文标题】AVAudioPlayer 初始化正常,但拒绝播放【英文标题】:AVAudioPlayer initializes fine, but refuses to play 【发布时间】:2011-12-06 17:12:41 【问题描述】:

我对@9​​87654321@ 类有一个奇怪的问题。我创建了一个播放器,从初始化程序中获取了一个非零引用,但 -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 初始化正常,但拒绝播放的主要内容,如果未能解决你的问题,请参考以下文章

avaudioplayer 干扰 ipad 上的 mpmovieplayer

使用 AVAudioPlayer 在后台播放声音序列

AVAudioPlayer 只用一些文件初始化

AVAudioPlayer 不播放 iPad2

AVAudioPlayer 失真

AVAudioPlayer 声音在经过这么多 IBAction 后停止播放