Вы также можете разбить звук на куски и измерить среднеквадратичное значение (показатель громкости).допустим, вам нужно изображение шириной 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)
цикл for можно представить как следующее понимание списка, я просто хотел, чтобы это было понятно:
loudness_of_chunks = [
sound[ i*chunk_length : (i+1)*chunk_length ].rms
for i in range(180)]
Теперь единственное, что остается сделать, - это уменьшить среднеквадратичное значение до 0 -Масштаб 180 (поскольку вы хотите, чтобы изображение было высотой 180 пикселей)
max_rms = max(loudness_of_chunks)
scaled_loudness = [ (loudness / max_rms) * 180 for loudness in loudness_of_chunks]
Я оставлю вам рисунок фактических пикселей, я не очень разбираюсь в PIL или ImageMagik: /