Простая визуализация музыки на Python — метод извлечения спектра

3e9cb90cd703152805a8397e7b2245b1.png

Вы когда-нибудь задумывались, как создаются спектральные эффекты некоторых музыкальных программ и почему они такие красивые? Вы когда-нибудь хотели попробовать самостоятельно извлечь музыкальный спектр и визуализировать его? Сегодня объединим последнюю операцию редактирования музыки:

Редактировать музыку на Python так просто

Давайте грубо визуализируем спектр песни ниже!

1. Подготовьте

Прежде чем начать, вам необходимо убедиться, что Python и pip были успешно установлены на вашем компьютере.Если нет, посетите эту статью: Супер подробное руководство по установке Python  для установки.

В среде Windows откройте Cmd (Start-Run-CMD), а в системной среде Apple откройте Терминал (команда+пробел для входа в Терминал), готовый начать вводить команды для установки зависимостей.

Конечно, рекомендую использовать редактор VSCode, скопировать код этой статьи и установить зависимые модули в терминал под редактором.Что удобно: Лучший партнер для программирования на Python — подробное руководство по VSCode .

Вводим в терминал следующую команду для установки нужных нам зависимых модулей:

pip install pydub
pip install librosa

Если вы видите сообщение «Успешно установлено xxx», установка прошла успешно.

2. Отображение спектра

С помощью librosa и matplot мы можем вывести весь спектр в 10 строк кода:

52bdf536bb3d66ca3d91ad31e3da98c0.png

import matplotlib.pyplot as plt
import librosa.display
# 音乐文件载入
audio_path = 'Fenn.mp3'
music, sr = librosa.load(audio_path)
# 宽高比为14:5的图
plt.figure(figsize=(14,5))
librosa.display.waveplot(music, sr=sr)
# 显示图
plt.show()

Однако такой спектр представляет собой целое музыкальное произведение, которое выглядит очень некрасиво.Далее мы используем pydub, чтобы обрезать спектр, чтобы получить лучшие результаты. Давайте разобьем на сегменты от 0 до 1 секунды, чтобы увидеть спектр:

7ec7ee24343b5e697ab53d626ae11556.png

import matplotlib.pyplot as plt
import librosa.display
import numpy as np
from pydub import AudioSegment
# 1秒=1000亳秒
SECOND = 1000
#音乐文件
AUDIO_PATH = 'Fenn.mp3'

def split_music(begin, end, filepath):
    # 导儿音乐
    song = AudioSegment.from_mp3(filepath)
    # 取begin秒至ijend秒间的片段
    song = song[begin*SECOND: end*SECOND]
    # 存储为临时文件做备份
    temp_path = 'backup/'+filepath
    song.export(temp_path)
    return temp_path
music, sr = librosa.load(split_music(0, 1, AUDIO_PATH))
#宽高比为14:5的图
plt.figure(figsize=(14, 5))
librosa.display.waveplot(music, sr=sr)
plt‍.show()

Это подробно, но все равно слишком сложно, на самом деле, когда мы отображаем спектр, нам могут понадобиться только положительные значения:

4fb8eff1b6cd95aec987704409db8404.png

Затем мы можем увеличить масштаб, скажем, спектр между 0,9 секунды и 1 секундой:

bdac2170261090dfd8907a9b9c86f8a1.png

# 公众号:Python 实用宝典
n0 = 9000
n1 = 10000
music = np.array([mic for mic in music if mic > 0])
plt.figure(figsize=(14, 5))
pit.plot(music[n0:n1])
plt.grid()
#显示图
plt.show()

Это выглядит намного лучше, но если вы хотите добиться эффекта музыки QQ, вам все равно нужно сделать много модификаций.

Например, использовать изысканные элементы изображения для заполнения замены, а как потом быть с нулевым значением? Как сделать спектр более стабильным? К тому же мы статичное изображение, и нам нужно динамично продолжать полосу по событию.

Код для производства определенно сложнее, чем наш простой код, и удаление отрицательных значений для отрисовки изображений не должно быть перебором. Заинтересованные читатели могут провести собственное исследование.

Если вам нравится сегодняшнее руководство по Python, пожалуйста, продолжайте обращать внимание на практическую коллекцию Python. Если она вам полезна, ставьте лайк или смотрите ниже. Если у вас есть какие-либо 66e820eefbe9770da7f9fb48ca274b57.pngвопросы, вы можете оставить сообщение ниже, и мы терпеливо ответим на них!

Нажмите ниже, чтобы прочитать исходный текст, чтобы получить все коды и ссылки!

Практический словарь Python (pythondict.com)

не просто том

Добро пожаловать, чтобы обратить внимание на общедоступную учетную запись: практическая коллекция Python

b9423559ca36c049243a351757bd94a6.png

Je suppose que tu aimes

Origine blog.csdn.net/u010751000/article/details/125270358
conseillé
Classement