Można również podzielić dźwięk na kawałki i zmierzyć RMS (miarę głośności). powiedzmy, że chcesz mieć obraz o szerokości 180 pikseli.
użyję pydub, otoki lekki napisałem wokół lib std wave
modeule:
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)
pętli for może być reprezentowana jako poniższej listy zrozumienia, po prostu chciałem to być jasne :
loudness_of_chunks = [
sound[ i*chunk_length : (i+1)*chunk_length ].rms
for i in range(180)]
teraz myśleć tylko do zrobienia jest skalowania RMS w dół do 0 - skali 180 (ponieważ obraz ma być 180px wysoki)
max_rms = max(loudness_of_chunks)
scaled_loudness = [ (loudness/max_rms) * 180 for loudness in loudness_of_chunks]
Zostawię rysunek rzeczywistych pikseli do ciebie, nie jestem bardzo doświadczony z PIL lub ImageMagick:/
Czy chcesz zrobić narzędzie do tego lub chcesz mieć wcześniej istniejące rozwiązanie? – Koof
To nie jest spektrogram, to wykres amplitudowy. Spektrogramy audio są trójwymiarowe: zwykle czas na osi X, częstotliwość na y oraz amplituda reprezentowana przez kolor. –
Dziękuję Josh Caswell, jak widzisz, nie byłem pewien co do nazwy tego przedstawienia przebiegu. – joar