为任意音频文件生成缩略图

joa*_*oar 6 python audio visualization

我想在最大尺寸为180×180像素的图像中表示音频文件.

我想生成这个图像,以便它以某种方式给出音频文件的表示,想象它像SoundCloud的波形(振幅图)

Soundcloud的播放器截图

我想知道你们中是否有人为此事做点什么.我一直在寻找一些,主要是"音频可视化"和"音频缩略图",但我没有找到任何有用的东西.

我首先将此发布到ux.stackexchange.com,这是我尝试联系任何正在进行此操作的程序员.

Jia*_*aro 3

您还可以将音频分解为多个块并测量 RMS(响度度量)。假设您想要一张 180 像素宽的图像。

我将使用pydub,这是我围绕 std lib 模块编写的轻量级包装器wave

from pydub import AudioSegment

# first I'll open the audio file
sound = AudioSegment.from_mp3("some_song.mp3")

# break the sound 180 even chunks (or however
# many pixels wide the image should be)
chunk_length = len(sound) / 180

loudness_of_chunks = []
for i in range(180):
    start = i * chunk_length
    end = chunk_start + chunk_length

    chunk = sound[start:end]
    loudness_of_chunks.append(chunk.rms)
Run Code Online (Sandbox Code Playgroud)

for 循环可以表示为以下列表理解,我只是想让它清楚:

loudness_of_chunks = [
    sound[ i*chunk_length : (i+1)*chunk_length ].rms
    for i in range(180)]
Run Code Online (Sandbox Code Playgroud)

现在唯一要做的就是将 RMS 缩小到 0 - 180 范围(因为您希望图像高 180 像素)

max_rms = max(loudness_of_chunks)

scaled_loudness = [ (loudness / max_rms) * 180 for loudness in loudness_of_chunks]
Run Code Online (Sandbox Code Playgroud)

我将把实际像素的绘制留给你,我对 PIL 或 ImageMagik 不太有经验:/