pydub вычисляет среднеквадратичные значения по-разному для sox - PullRequest
0 голосов
/ 07 октября 2019

Я смущен тем, как 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

Может кто-нибудь просветить меня, пожалуйста, как вычисляются эти среднеквадратичные значения ?? Спасибо.

1 Ответ

1 голос
/ 10 октября 2019

Они представляют одно и то же значение, только в разных масштабах. pydub работает с 16-битными значениями со знаком (возможно, из-за 16-битной глубины mp3-файла?), Тогда как SoX по умолчанию масштабирует внутренние 32-битные значения со знаком до [-1,1]. Вы можете привести два выхода в соответствие, масштабируя на 2 ^ 15 или приказав SoX использовать 16-битную шкалу со знаком, используя аргумент -s. Поскольку 2 ^ 31/2 ^ 15 равно 2 ^ 16, это должно быть -s 65536.

...