我对pydub
如何计算均方根感到困惑。
In [187]: audio = AudioSegment.from_mp3("sample-mp3")
In [188]: audio.rms
Out[188]: 1041
In [189]: audio.dBFS
Out[189]: -29.959984108983633
但是使用
sox
:$ sox sample.mp3 -n stat
Samples read: 130231296
Length (seconds): 1476.545306
Scaled by: 2147483647.0
Maximum amplitude: 1.000000
Minimum amplitude: -1.000000
Midline amplitude: -0.000000
Mean norm: 0.017384
Mean amplitude: -0.000023
**RMS amplitude: 0.031763**
Maximum delta: 1.308396
Minimum delta: 0.000000
Mean delta: 0.015841
RMS delta: 0.028429
Rough frequency: 6282
Volume adjustment: 1.000
任何人都可以启发我如何计算这些均方根值吗?谢谢。
最佳答案
它们代表相同的值(value),只是规模不同。 pydub
似乎可以使用带符号的16位值(也许是因为mp3文件的16位深度?),而SoX默认情况下会将内部32位带符号的值缩放为[-1,1]。您可以通过按2 ^ 15缩放比例,或者通过使用-s
参数告诉SoX使用带符号的16位缩放比例,来使两个输出达到一致。由于2 ^ 31/2 ^ 15是2 ^ 16,因此应为-s 65536
。
关于python - pydub计算均方根与sox不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58274302/