【问题标题】:Audio volume normalize python音频音量标准化python
【发布时间】:2021-02-05 15:51:08
【问题描述】:

我有多个波形文件,有些是小容量的,有些是大容量的。

我想“标准化”声音幅度。

(就像某些音频音序器应用程序具有的“标准化”功能。 将音量放大到峰值达到 0db。)

例如 librosa 库,它有 librosa.util.normalize,但我不确定这是否是我的意思。

我想调整音频的音量,有什么做法吗?

【问题讨论】:

    标签: python audio librosa


    【解决方案1】:

    在任何通道中找到最大峰值(正或负,所以使用 abs)。例如,在一个 16 位文件中,假设您找到 25000。计算该值与有符号 16 位范围内最大值的比率并将其取反:

    ratio = 32767.0 / 25000 #(equivalent to 1 / (25000 / 32767.0))
    

    现在迭代所有样本并将它们乘以倒数,这样 25000 变为 32767:

    for(sample in samples):
        sample = round(sample * ratio)
    

    此操作称为“标准化”或“优化”,具体取决于软件。

    【讨论】:

    • 非常感谢!!位,我如何首先从样本中找到最大峰值? (y,sr) = librosa.load(out_file,sr=44100,mono=False)print(y[1])[-3.0517578e-05 -3.0517578e-05 0.0000000e+00 ... -1.0467529e-02 -1.0253906e-02 -1.0070801e-02]...
    • Librosa 似乎适用于 float32,因此样本值应在 -1.0 和 1.0 之间变化。除此之外,原理是相同的:您必须最大化绝对值,这将导致值介于 0 和 1 之间。倒数比率然后是 1 除以该值。另请注意,如果最大峰值为 1.0,则您无能为力,因为波已经归一化。
    • 非常感谢。有用。 (y,sr) = librosa.load(out_file,sr=44100,mono=False)max_peak = np.max(np.abs(y))ratio = 1 / max_peaky = y * ratio
    猜你喜欢
    • 2012-01-16
    • 2017-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-19
    • 1970-01-01
    • 2011-02-23
    • 1970-01-01
    相关资源
    最近更新 更多