如何找到 python 中 wav 文件的振幅?

How do I find amplitude of wav file in python?

我正在使用 python 中的 librosa 库进行 wav 文件分析。我使用 librosa.load() 加载音频文件。显然,此函数将 wav 文件加载到一个 numpy 数组中,其归一化振幅值在 -1 到 1 范围内。但我需要获取实际振幅值以进行处理。我怎样才能找到它?

提前致谢!

您正确地观察到 librosa 总是将样本标准化为单声道 [-1:1](以及 22050 Hz)。也就是说,它是数字音频,因此可以与您想要的任何东西相乘以获得不同的规模。如果您坚持认为您的样本在 -2^152^15 的范围内,只需乘以 2^15。意思差不多。

除了将编码音频格式的特殊性拖入您的数据之外,您将一无所获。

就是说,如果那是你想要的,你可以像这样使用 PySoundFile

import soundfile as sf

y, sr = sf.read('existing_file.wav', dtype='int16')

参数 dtype='int16' 告诉库假定每个样本采用带符号的 16 位格式。

你不能。正如 Hendrik 提到的,信号是数字的,WAV 文件中的振幅不会告诉您任何有关实际声波振幅/声功率的信息。当它被数字化为 WAV 时,它就完全丢失了。

也就是说,您可以计算例如响度,声音功率的相对感知。如果您正在处理人类听觉系统,推荐的方法之一是:

  1. 使用 Bark 等级(Bark 等级更好地反映了我们的听力)。
  2. 计算每个 bin 中的能量。
  3. (可选)按总和归一化。

如果您不想自己计算,请查看例如YAAFE.