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

时间:2016-08-05 21:21:56

标签: python audio matplotlib mp3 pyaudio

我有一个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但我们可以只使用内容而不存储实际文件吗?

1 个答案:

答案 0 :(得分:3)

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

如何解码mp3?令人震惊的是,Python的可用工具很少。虽然我在this问题中发现了一个很好的问题。它被称为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是空中'在此刻 ;)。现在它取决于您如何使用收集的数据,但这个模块似乎可以为您提供所需的一切。