Анализ музыки и визуализация - PullRequest
17 голосов
/ 15 июня 2011

Я заинтересован в программировании музыкального визуализатора на Python.

Первая проблема - как получить информацию из музыки?Как объем, частота, обороты и т. Д. И откуда?Из звуковой карты или самого музыкального файла?

Я думаю, что из звуковой карты, но как мне получить доступ к звуковой карте и требуемой информации?Желательно в зависимости от платформы (Linux является обязательным).Я уже читал немного о преобразовании Фурье, но я не уверен, что это лучший путь.

Я думал об использовании OpenGL для визуализации, но я все еще открыт для предложений.

Я уже просмотрел эти вики-страницы, но пока не нашел ответа: http://wiki.python.org/moin/Audio/
http://wiki.python.org/moin/PythonInMusic

Ответы [ 3 ]

14 голосов
/ 15 июня 2011

Если вы ищете кроссплатформенную аудиобиблиотеку, я настоятельно рекомендую использовать FMOD , который просто потрясающий.Существует также обертка для использования в Python (хотя я никогда не использовал ее).
Она обеспечит такие функции, как получение спектра из коробки.
ЕслиВы хотите проанализировать аудиофайл, мой алгоритм de choix - это спектр ударов .Он вычисляет матрицу сходства, сравнивая каждый короткий образец музыки со всеми остальными.После вычисления матрицы сходства можно получить среднее сходство между каждой парой выборок {S (T); S (T + 1)} для каждого временного интервала T: это спектр биений.
Это позволяет получитьBPM вашей аудиопоследовательности, но может делать гораздо больше, например, идентифицировать различные части музыки, находить переходы между похожими сэмплами.Я не знаю, что именно вы подразумеваете под «визуализацией звука», но я думаю, что этот алгоритм должен предоставить вам достаточно информации, чтобы начать синхронизацию изображения со звуком (если это то, что вы хотите сделать).

6 голосов
/ 26 июля 2015

Другим инструментом для этого является librosa .Он предлагает Отслеживание ударов для получения ударов в минуту, в дополнение к операциям по умолчанию.Согласно учебнику, для отслеживания ударов:

import librosa
audio_path = librosa.util.example_audio_file()
# or uncomment the line below and point it at your favorite song:
# audio_path = '/path/to/your/favorite/song.mp3'
y, sr = librosa.load(audio_path)
y_percussive = librosa.effects.hpss(y)
tempo, beats = librosa.beat.beat_track(y=y_percussive, sr=sr)

Как и @ dionyziz также сказал , удары

будут в кадрах.Вы можете преобразовать их в фактическое время, используя

librosa.frames_to_time(beats)

Я не пробовал это.

2 голосов
/ 27 сентября 2012

Больше не является хорошим ответом, поскольку Echo Nest API больше не доступен . Отъезд только по историческим причинам

Рассмотрим API Echo Nest , который отлично работает с Python и будет возвращать информацию об ударах в минуту (вероятно, что вы хотите вместо оборотов в минуту), среднюю амплитуду, даже «танцуемость» для любого аудиофайла. Вам нужен ключ API, но, кроме того, он бесплатный и хорошо работает.

Он также содержит код для управления музыкой через пакет Echo Nest Remix. Вот их пример кода:

"""Reverse a song by playing its beats 
   forward starting from the end of the song"""
import echonest.audio as audio   

# Easy around wrapper mp3 decoding and Echo Nest analysis
audio_file = audio.LocalAudioFile("NeverGonnaTellIt.mp3")

# You can manipulate the beats in a song as a native python list
beats = audio_file.analysis.beats
beats.reverse()


# And render the list as a new audio file!
audio.getpieces(audio_file, beats).encode("NeverGonnaTellItBackwardsByBeat.mp3")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...