Python pydub计算rms的方式与sox不同
我对Python pydub计算rms的方式与sox不同,python,audio,speech,sox,pydub,Python,Audio,Speech,Sox,Pydub,我对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): 14
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
有人能告诉我这些rms值是如何计算的吗??Thx 它们代表相同的值,只是在不同的尺度上
pydub
似乎适用于带符号的16位值(可能是因为mp3文件的16位深度?),而SoX默认情况下将内部32位带符号值缩放为[-1,1]。通过按2^15的比例缩放,或者通过使用-s
参数告诉SoX使用带符号的16位比例,可以使两个输出一致。因为2^31/2^15是2^16,所以应该是-s 65536
谢谢@AkselA!-s
参数似乎不起作用sox sample_audio.mp3-n stats-s 65536
sox FAIL stats:参数'p->scale'必须介于-99和99之间sox FAIL stats:用法:[-b位|-x位|-s scale][w窗口时间]同样来自问题中的示例。1041/65536=0.015884,这不是sox给出的0.031763。这里的缩放有点混乱。如果我做1041/(232/216)=0.031768,接近于0.031763。。但是为什么。@Blue482:您需要将-s
与stat
一起使用,而不是stats
。从有符号32位到有符号16位时除以2^16,但从有符号16位到[-1,1](2^1)时除以2^15。记住指数乘法是如何工作的。16-1 = 15.