Audio 音频音量标准化时的动态范围压缩

Audio 音频音量标准化时的动态范围压缩,audio,pcm,Audio,Pcm,我已经问过了。在大多数方法中(例如,我最感兴趣的方法),我可能会得到超过PCM限制的峰值(也可以读取) 简单的剪辑可能是我能做的最糟糕的事情,我应该做些运动 我说的是我在每个PCM样本值上应用的函数。另一方面,他认为这样做是不够的,或者不是我应该做的事情。然而,我并不真正理解这一点,因为我仍然需要处理剪辑的情况。答案是否建议一次对多个样本进行范围压缩,并对每个样本进行简单的硬剪裁 撇开这一点不谈,Wikipedia文章中讨论的函数似乎不是我想要的(在许多情况下,我最终还是会有裁剪案例)。我正在考

我已经问过了。在大多数方法中(例如,我最感兴趣的方法),我可能会得到超过PCM限制的峰值(也可以读取)

简单的剪辑可能是我能做的最糟糕的事情,我应该做些运动

我说的是我在每个PCM样本值上应用的函数。另一方面,他认为这样做是不够的,或者不是我应该做的事情。然而,我并不真正理解这一点,因为我仍然需要处理剪辑的情况。答案是否建议一次对多个样本进行范围压缩,并对每个样本进行简单的硬剪裁

撇开这一点不谈,Wikipedia文章中讨论的函数似乎不是我想要的(在许多情况下,我最终还是会有裁剪案例)。我正在考虑使用类似的工具。这是个坏主意吗?它会稍微减少音量,但保证不会有任何剪辑


我的应用程序是一个通用的音乐播放器。我正在寻找一种最适合每个人的解决方案,这样我就可以始终打开它,用户很可能不想关闭它。

使用任何瞬时动态范围处理(如剪裁或tanh非线性)都会引入音频失真。把一个正弦波转换成一个瞬时非线性函数,你就不再有正弦波了。虽然对某些音频应用程序有用,但听起来您不需要这些人工制品

标准化不会影响波形的动力学(以最小/最大比率表示)。标准化涉及波形与常量标量值的元素相乘,以确保样本不会超过最大值。这一过程只能离线完成,因为在处理之前需要分析整个信号。如果您的波形包含任何强烈的瞬变,则规范化也是一个坏主意。您的整个信号将通过瞬态峰值除以限幅阈值的比率衰减

如果您只是想保护输出不受剪切,最好使用侧链式压缩机。一种特殊形式是限制器(攻击时间为零的阈值以上的无限压缩比)。侧链压缩器计算信号的平滑能量包络,然后根据该函数应用不同的增益。它们不是瞬时的,所以你可以减少从你提到的函数中得到的声音失真。限制器可以具有瞬时攻击以防止削波,但您允许一段释放时间,以便限制器在后续波形峰值时保持衰减,后续波形刚好被调低,因此没有失真。在强烈的声音之后,限制器恢复


如果波形中有许多高强度峰值,则可以通过这种处理获得泵送型声音。如果出现问题,则可以移动到下一个级别,并在子标注栏中执行动力学处理。这样,只有频谱中有问题的部分会被衰减,剩下的声音不会受到影响。

一般的解决方案是将增益水平标准化到明显低于1的某个增益水平,这样很少有歌曲需要增加增益。换句话说,大多数情况下,你会降低信号量,而不是增加信号量。尝试各种不同风格的歌曲,找出这个级别是什么

现在,偶尔,你仍然会遇到一首歌曲,它需要足够的增益,在某个时候,它会剪辑。你有两个选择:1。不要增加那么多收益。这首歌听起来会安静一点。这就是生活。(这是一种常见的方法),或2。应用少量动态范围压缩和/或限制。当然,你也可以做一些组合1和2。我相信iTunes使用了1和2的组合,但他们在#2上做得非常努力,而且应用很少

您的建议是,在逐个样本的基础上使用tanh之类的函数,这将导致音频失真。您不希望对普通音乐播放器执行此操作。这是在吉他放大器模拟器中所做的事情,使它们听起来“肮脏”和“肮脏”。在摇滚乐、流行乐或其他已经严重失真的现代音乐中可能听不到这种声音,但在仔细录制的合唱、爵士乐或小提琴独奏音乐中,人们会感到不安。这与tanh的选择无关,顺便说一下,任何非线性函数都会产生失真

动态范围压缩使用随时间应用于信号的包络: 这很难做到正确,而且您永远无法创建真正“透明”的压缩器。限制器可以被认为是压缩机的一个极端版本,它(至少在理论上)可以防止信号超过某个水平。一个数字“前瞻”限制器可以做到这一点,没有明显的剪辑。如果使用得当,它是相当透明的


如果您采用这种方法,请确保可以关闭此功能,因为无论您认为它多么透明,都会有人听到它而不喜欢它。

谢谢您的回答。我想我现在只需要使用一个零攻击和零恢复时间的平滑限制器。这对于实现来说是非常简单的,而且可能已经足够好了(如果阈值很高,那么大多数情况下是不明显的)。我强烈警告不要使用零攻击、零释放限制器。这是一个剪辑函数。这个答案令人困惑。侧链是压缩机固有的一部分,所以没有“侧链式压缩机”。所有压缩机均为“侧链式”。错误。你可以有一个反馈压缩器,或者一个波形压缩器。另外,我从来没有说过限制器应该有零释放。也谢谢你的回答。我有一个音量控制和在某个阈值上做一些平滑的限制。阈值非常高(而且无论如何都是可配置的),我很满意