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

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

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

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

【问题讨论】:

    标签: iphone audio ios 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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    • 2014-12-22
    • 2011-06-18
    • 1970-01-01
    相关资源
    最近更新 更多