快速的音量变化会导致 AVAudioPlayer 中的伪影

Posted

技术标签:

【中文标题】快速的音量变化会导致 AVAudioPlayer 中的伪影【英文标题】:rapid volume changes cause artefacts in AVAudioPlayer 【发布时间】:2014-07-14 17:59:31 【问题描述】:

我有一些纯音(正弦波)需要淡入淡出,还需要通过指轮任意调节音量。我生成 PCM 数据以及 WAV 标头,然后将其封装在 AVAudioPlayer 中,以恒定音量播放。

现在,尽管这听起来微不足道,但我发现在 ios 7 上快速改变音量会导致一些非常讨厌的伪像。想象一下用滑块控制音量的音调。快速移动滑块会产生我所描述的噪音。这一点特别明显,因为源信号只是一个音调。如果是音乐,事情很可能会迷失在相对的噪音中。奇怪的是,如果我通过 MPMusicPlayerController 直接检测设备音量,而不是尝试通过 AVAudioPlayer 的音量甚至字节级别来控制事物,我会得到更平滑的结果并且没有伪影。我怀疑设备在调整音量时正在做一些我没有做的事情。我知道这种量化噪声是音频处理中的一个问题,我想知道是否有人可以提供一些建议。

我还通过 Novocaine 使用样本级播放重现了该问题。无论我做什么,我似乎都无法获得平滑、无噪音的淡入/淡出特性。任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

您查看AVAudioMix 了吗?我用它来增加 AVPlayer 的音量,效果非常好。 function to ramp volume 在特定时间内对淡入/淡出效果特别有帮助。

【讨论】:

【参考方案2】:

如果在样本级别修改音频音量,请确保平稳地更改音量,切勿突然从一个样本切换到下一个样本,否则结果会出现不连续性,这可能会非常嘈杂。例如在电平设置之间的每个样本中,使用线性斜坡或缓入缓出半余弦曲线,在许多(可能几十)毫秒的样本中逐渐淡出任何音量变化。也许一个控制器会自动执行此操作,但另一个不会。

【讨论】:

以上是关于快速的音量变化会导致 AVAudioPlayer 中的伪影的主要内容,如果未能解决你的问题,请参考以下文章

AVAudioPlayer 音量与系统音量不一样

音量问题 - AVAudioPlayer 与 AudioServices 系统声音混合

iOS使用虚拟AVAudioPlayer从铃声切换到系统音量

如何快速降低音乐音量?

AVAudioPlayer 导致内存泄漏

降低 AVAudioPlayer 声音的音量