python - pydub计算均方根与sox不同

标签 python audio speech sox pydub

我对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/

相关文章:

python - 为什么这个 django 模板不起作用?

python - 是否可以避免调用类方法时每次都写 'dot'?

ios - Core Audio的渲染回调不会更改输出音频

macos - 如何将文本更改为语音 Mac Sierra

python - Python 中的 vars() 提供不同的输出

python - Django:如何为登录用户数据的查询集编写 Mixin

javascript - Java Web Audio Api-如何将base64Sting保存到音频文件

java - 安卓和 ffmpeg。播放视频(有声)

android - 如何从Android中的音频检测语音成分?

文字转音素转换器