pydub 计算 rms 的方式与 sox 不同
pydub computes rms differently to sox
我对 pydub
计算 rms 的方式感到困惑。
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
谁能告诉我这些有效值是如何计算的??谢谢。
它们代表相同的价值,只是比例不同。 pydub
似乎适用于带符号的 16 位值(可能是因为 mp3 文件的 16 位深度?),而 SoX 默认将内部 32 位带符号值缩放为 [-1,1]。您可以通过按 2^15 缩放使两个输出一致,或者通过使用 -s
参数告诉 SoX 使用带符号的 16 位缩放。因为 2^31/2^15 是 2^16,所以应该是 -s 65536
.
我对 pydub
计算 rms 的方式感到困惑。
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
谁能告诉我这些有效值是如何计算的??谢谢。
它们代表相同的价值,只是比例不同。 pydub
似乎适用于带符号的 16 位值(可能是因为 mp3 文件的 16 位深度?),而 SoX 默认将内部 32 位带符号值缩放为 [-1,1]。您可以通过按 2^15 缩放使两个输出一致,或者通过使用 -s
参数告诉 SoX 使用带符号的 16 位缩放。因为 2^31/2^15 是 2^16,所以应该是 -s 65536
.