【发布时间】:2021-02-05 15:51:08
【问题描述】:
我有多个波形文件,有些是小容量的,有些是大容量的。
我想“标准化”声音幅度。
(就像某些音频音序器应用程序具有的“标准化”功能。 将音量放大到峰值达到 0db。)
例如 librosa 库,它有 librosa.util.normalize,但我不确定这是否是我的意思。
我想调整音频的音量,有什么做法吗?
【问题讨论】:
我有多个波形文件,有些是小容量的,有些是大容量的。
我想“标准化”声音幅度。
(就像某些音频音序器应用程序具有的“标准化”功能。 将音量放大到峰值达到 0db。)
例如 librosa 库,它有 librosa.util.normalize,但我不确定这是否是我的意思。
我想调整音频的音量,有什么做法吗?
【问题讨论】:
在任何通道中找到最大峰值(正或负,所以使用 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]...
(y,sr) = librosa.load(out_file,sr=44100,mono=False)max_peak = np.max(np.abs(y))ratio = 1 / max_peaky = y * ratio