我已经问过音量标准化 https://stackoverflow.com/questions/12481524/audio-volume-normalization。在大多数方法上(例如重放增益 http://www.replaygain.org/,我最感兴趣的),我可能会得到超过 PCM 限制的峰值(也可以读作here http://en.wikipedia.org/wiki/Audio_normalization#Loudness_normalization).
简单的剪辑可能是我能做的最糟糕的事情。正如维基百科建议的那样 http://en.wikipedia.org/wiki/Audio_normalization#Loudness_normalization,我应该做某种形式的动态范围压缩 http://en.wikipedia.org/wiki/Dynamic_range_compression.
我说的是我对每个单独的 PCM 样本值应用的函数。另外一个类似的问题 https://stackoverflow.com/questions/2908104/help-with-dynamic-range-compression-function-audio, 一个答案 https://stackoverflow.com/a/2914119/133374表明这样做还不够,或者不是我应该做的事情。但是,我不太明白,因为我仍然需要处理裁剪情况。答案是否建议同时对多个样本进行范围压缩,并在每个样本上进行简单的硬裁剪?
抛开这一点,维基百科文章中讨论的功能似乎有点不是我想要的(在很多情况下,我最终仍然会遇到裁剪情况)。我正在考虑使用类似的东西tanh http://www.wolframalpha.com/input/?i=tanh%28x%29。这是一个坏主意吗?它会稍微降低音量,但保证不会出现任何削波。
我的应用程序是一个通用的音乐播放器。我正在寻找一种最适合每个人的解决方案,这样我就可以随时打开它,而用户很可能不想关闭它。
使用任何瞬时动态范围处理(例如削波或 tanh 非线性)都会引入听觉失真。将正弦波放入瞬时非线性函数中,您就不再拥有正弦波。虽然对于某些音频应用程序很有用,但听起来您不想要这些人工制品。
归一化不会影响波形的动态(就最小/最大比率而言)。归一化涉及将波形按元素乘以恒定标量值,以确保样本不会超过最大值。此过程只能离线完成,因为您需要在处理之前分析整个信号。如果您的波形包含任何强烈的瞬态,归一化也是一个坏主意。您的整个信号将按照瞬态峰值除以限幅阈值的比率进行衰减。
如果您只是想保护输出免于削波,您最好使用侧链式压缩器。其具体形式是限制器(高于阈值的无限压缩比,起音时间为零)。侧链压缩器计算信号的平滑能量包络,然后根据该函数应用变化的增益。它们不是瞬时的,因此您可以减少从您提到的功能中获得的声音失真。限制器可以进行瞬时攻击以防止削波,但您可以留出一定的释放时间,以便限制器对后续波形峰值保持衰减,后续波形只是被调低,因此不会出现失真。强烈的声音过后,限制器恢复。
如果波形中有很多高强度峰值,您可以从这种类型的处理中获得抽吸式声音。如果这成为问题,您可以进入下一个级别并在子带内进行动态处理。这样,只有频谱中的干扰部分会被衰减,而声音的其余部分不受影响。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)