我正在使用python中的librosa库进行wav文件分析。我使用librosa.load()加载音频文件。显然,这个函数将wav文件加载到一个numpy数组中,归一化的振幅值在-1到1之间。但是我需要得到实际的振幅值进行处理。我怎么能找到呢?提前谢谢!
ljsrvy3e1#
您正确地观察到librosa总是将样本标准化为mono [-1:1] (以及22050 hz)。这就是说,这是数字音频,所以可以乘以任何你想要得到一个不同的规模。如果你坚持,你的样品是在 -2^15 到 2^15 ,只需乘以 2^15 . 它的意思几乎是一样的。除了将音频编码格式的特性拖到数据中之外,您不会得到任何东西。也就是说,如果这是您想要的,您可以像这样使用pysoundfile:
[-1:1]
-2^15
2^15
import soundfile as sf y, sr = sf.read('existing_file.wav', dtype='int16')
参数 dtype='int16' 告诉库对每个示例采用有符号的16位格式。
dtype='int16'
o2gm4chl2#
你不能。正如亨德里克提到的,信号是数字的,wav文件中的振幅不会告诉你任何关于实际声波振幅/声功率的信息。从它被数字化为wav的那一刻起,它就完全消失了。也就是说,你可以计算出,比如响度,一种对声功率的相对感知。如果您正在处理人类听觉系统,建议的方法之一是:使用树皮鳞片(树皮鳞片更好地反映我们的听觉)。计算每个箱子的能量。(可选)通过总和进行归一化。如果您不想自己计算,请查看例如yaafe。
2条答案
按热度按时间ljsrvy3e1#
您正确地观察到librosa总是将样本标准化为mono
[-1:1]
(以及22050 hz)。这就是说,这是数字音频,所以可以乘以任何你想要得到一个不同的规模。如果你坚持,你的样品是在-2^15
到2^15
,只需乘以2^15
. 它的意思几乎是一样的。除了将音频编码格式的特性拖到数据中之外,您不会得到任何东西。
也就是说,如果这是您想要的,您可以像这样使用pysoundfile:
参数
dtype='int16'
告诉库对每个示例采用有符号的16位格式。o2gm4chl2#
你不能。正如亨德里克提到的,信号是数字的,wav文件中的振幅不会告诉你任何关于实际声波振幅/声功率的信息。从它被数字化为wav的那一刻起,它就完全消失了。
也就是说,你可以计算出,比如响度,一种对声功率的相对感知。如果您正在处理人类听觉系统,建议的方法之一是:
使用树皮鳞片(树皮鳞片更好地反映我们的听觉)。
计算每个箱子的能量。
(可选)通过总和进行归一化。
如果您不想自己计算,请查看例如yaafe。