我有一堆WAV格式的不同录音(所有不同的乐器和音高),我想对它们进行“标准化”,以便播放时它们的声音大致相同。
我已经尝试过测量平均样本量(所有绝对值的总和除以样本数),但通过此测量进行标准化并不能很好地进行。我认为这种方法不起作用,因为它没有考虑到声音的频率,我知道高频录音听起来比同频率的低频声音更响亮。
有没有人知道测量声音响度的好方法?
答案 0 :(得分:11)
Root Mean Square通常用于估计声音文件的响度。这是因为如果声音非常短,那么非常响亮的声音可能不会被这样察觉。还要记住,功率随振幅的平方呈指数增长。
Hydrogen Audio的音频爱好者对这些内容了如指掌......请查看他们的免费 Replay Gain软件。您可能根本不需要进行任何编程。
编辑:包含关于功率与幅度的评论反馈。
答案 1 :(得分:3)
好吧,不是音频方面的专家并添加到之前的评论中,你应该弄清楚你所定义的“峰值功率的最短时间”然后只需将波形转换为原始浮点并使用RMS而不是延长时间并不断地获取那段时间的大块,找到MAX,你就拥有了最高的峰值功率。
答案 2 :(得分:2)
添加到PeterAllenWebb的回复中:
在计算RMS之前,您应该首先“居中”您的样本(想想每个样本具有最大+幅度的5分钟.wav)。最好的方法是使用亚音频率的高通滤波器。
这仍然不会使人类对计数敏感的频率。为此,您可以使用A加权。有一个页面,您可以在线计算它: http://www.diracdelta.co.uk/science/source/a/w/aweighting/source.html
代码似乎在这里: http://www.diracdelta.co.uk/science/source/a/w/aweighting/multicalc.js
答案 3 :(得分:1)
重申一些其他人所说的话,用RMS值估计一段声音的“响度”。
但是,如果您正在处理像拔毛或鼓点击等冲动声音,您需要执行滑动RMS值并仅选择峰值RMS值。测量100毫秒的声音,滑动窗口,再次测量等,然后根据找到的最大值进行标准化。
在执行RMS之前绝对删除任何DC值,A加权将使它更像我们听到的。以下是MATLAB/Octave和Python中的A加权代码。
答案 4 :(得分:-1)
我可能会离开这里,但是,如果你有wavepad,你可以加载多个文件并稍微弄乱一下卷,所以它们都是一样的。此外,如果文件的某些部分较大,则可以选择该部分并降低该部分的音量。
编辑:对不起,它不是衡量音量的“方法”,但如果你只需要制作它们就可以了,这应该可以正常工作。