暂停/启动 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 无故障弹出的主要内容,如果未能解决你的问题,请参考以下文章