PCM 数据流上的自适应音量标准化

信息处理 声音的
2022-02-23 06:52:27

我正在编写一个程序,该程序从各种来源接收连续的 PCM 数据流。一些来源的体积与其他来源不同。PCM 数据始终是 16 个未签名数据单通道的实时连续流。

如何动态确保所有样本的音量不会太低或太高,以有效地实时标准化其输出?

1个回答

您想要的是所谓的自动增益控制动态范围压缩它可以在一个动态处理器中实现,该处理器接收输入音频,使用包络跟随器来分析输入的音量,因为它随时间变化并修改音频,使其输出的包络对应于输入包络通过非-线性函数,例如:

Adobe Audition 动态处理
Adobe Audition 动态处理

我不知道如何修改包络以匹配目标包络的最佳实践是什么,但通常有单独的攻击和衰减参数分别控制应用增益应该增加或减少的速度,以使结果包络接近目标包络。您可以尝试潜在的不稳定:

gain(t)=target_envelope(t)/input_envelope(t)

在哪里t是时间。结果gain(t)在应用之前应该对其进行平滑(低通滤波),以获得想要的攻击和衰减行为。包络检测器可以具有用于更改(通常是均方根或峰值)分析窗口的附加控件,以及使动态处理器能够通过在包络检测之后延迟输入音频来在音量变化发生之前对其做出响应的前瞻时间设置。均方根计算可以通过计算输入音频的平方、低通滤波并取结果的平方根来完成。

在此处输入图像描述
Adobe Audition Dynamics Processing 攻击、衰减和前瞻控制

这些参数和非线性函数应该(通过聆听)进行调整,以获得最小的可听伪影,例如音量的抽动和低频失真。