使用 python 从 mp3 音频文件中获取振幅数据

get the amplitude data from an mp3 audio files using python

我有一个 mp3 文件,我想基本上绘制该音频样本中存在的振幅谱。 我知道如果我们有一个 wav 文件,我们可以很容易地做到这一点。有很多 python 包可用于处理 wav 文件格式。但是,我不想将文件转换为 wav 格式然后存储它然后使用它。 我想要实现的是直接获取 mp3 文件的振幅,即使我必须将其转换为 wav 格式,脚本也应该在运行时进行播放,而不会将文件实际存储在数据库中。 我知道我们可以像下面这样转换文件:

from pydub import AudioSegment
sound = AudioSegment.from_mp3("test.mp3")
sound.export("temp.wav", format="wav")

它创建了它应该创建的 temp.wav 但我们可以只使用内容而不存储实际文件吗?

MP3 是编码波(+ 标签和其他东西)。您需要做的就是使用 MP3 解码器对其进行解码。解码器将为您提供进一步处理所需的全部音频数据。

如何解码mp3?我很震惊 Python 可用的工具如此之少。虽然我在 this question. It's called pydub 中找到了一个很好的,但我希望我可以使用作者的示例片段(我使用来自 wiki 的更多信息对其进行了更新):

from pydub import AudioSegment

sound = AudioSegment.from_mp3("test.mp3")

# get raw audio data as a bytestring
raw_data = sound.raw_data
# get the frame rate
sample_rate = sound.frame_rate
# get amount of bytes contained in one sample
sample_size = sound.sample_width
# get channels
channels = sound.channels

注意此时 raw_data 是 'on air' ;)。现在由您决定如何使用收集到的数据,但这个模块似乎可以为您提供所需的一切。