暂停/启动 AVAudioPlayer 无故障弹出

Posted

技术标签:

【中文标题】暂停/启动 AVAudioPlayer 无故障弹出【英文标题】:pause/start AVAudioPlayer without glitchy pops 【发布时间】:2010-11-22 16:00:33 【问题描述】:

我正在使用 AVAudioPlayer 播放一个较长的音频文件(大约 20 秒)。我需要能够在文件中间暂停和开始。当我在播放音频时暂停或开始时,音频开始或结束时会出现明显的“砰砰”声。

我已经能够通过非常快速的淡出来改善这种情况(使用 performSelector: withObject: afterDelay 多次设置音量。但是声音仍然有点小故障技术。

是否有标准方法来启动/暂停 AVAudioPlayer 而不会出现这些故障?

【问题讨论】:

【参考方案1】:

尝试在暂停时将 -prepareToPlay 发送到您的 AVAudioPlayer 对象。这将预加载声音。

如果这不起作用,请尝试通过减少 performSelector: withObject: afterDelay 中的延迟来加速淡出。发疯,毫秒。

如果这也不起作用,请尝试使用更干净、质量更高的音频文件(没有无关的背景噪音)

如果这些都不起作用,请详细说明您的应用中的音频文件是如何被使用的。

【讨论】:

performSelector: withObject: afterDelay 似乎受限于运行循环的分辨率。延迟有多小是有限制的。不记得它到底是什么,但我不确定你是否可以使用延迟在毫秒范围内的方法。 当然可以,如果有限制,无论如何都会使用允许的最小值,所以没什么区别。【参考方案2】:

使用较低级别的 API 之一(音频队列或 RemoteIO)。在一定数量的 PCM 样本上平滑地将乘法因子从 1.0 提升到 0.0。将该因子用于您自己的 DSP 音频混音器中的逐个样本增益因子。重新启动时从 0.0 上升到 1.0。线性或缓入/缓出半余弦曲线。

【讨论】:

问题是我正在播放压缩文件,所以无法轻松访问 PCM 数据。 这里有一些示例代码可能有助于从压缩文件中获取 pcm 数据:cogs.susx.ac.uk/users/nc81/code.html

以上是关于暂停/启动 AVAudioPlayer 无故障弹出的主要内容,如果未能解决你的问题,请参考以下文章

播放外部音频时暂停 AVAudioPlayer

打印机故障之——“一个文件被挂起”

使用 AVAudioPlayer 播放声音后恢复背景音频

AVAudioPlayer pause() 未按预期运行

当 AVAudioPlayer 完成播放时切换 tableview 单元格图像

ios删除avaudioplayer循环延迟