Транскрипция музыки
Я работаю над проектом транскрипции полифонической музыки. Я прочитал несколько статей и просмотрел статьи, в которых объясняются похожие задачи. Я очень запутался во многих аспектах проблемной области. Надеюсь, кто-нибудь сможет мне помочь.
До сих пор я получил поток декодированных аудиоданных из данного mp3.
Я понял, что обнаружение начала - это первый шаг к транскрипции., Есть ли доступная библиотека Java, которая может быть использована для обнаружения приступов?
Далее, определение основной частоты также выполняется с использованием БПФ, как я прочитал.
Я хочу знать, как использовать БПФ в этих задачах. (Я не очень знаком с FFT). Абсолютно необходимо выполнить БПФ для обнаружения начала и обнаружения F0. Если нет, каковы другие способы. Могу ли я выполнить БПФ на имеющемся у меня аудиопотоке или необходимо выполнить какую-либо другую операцию для манипулирования этими аудиоданными.
Большое спасибо.
4 ответа
Это поле известно как машинное прослушивание.
Полифоническая транскрипция музыки в цифровом коде является одним из священных граалей машинного прослушивания. Это нерешенная проблема и область активных исследований. Подполя включают в себя:
- Обнаружение начала
- Извлечение биений (определение метрической структуры, времени и т. Д.)
- Обнаружение основного тона (возможно с использованием автокорреляции и других методов на монофонических сигналах, но нерешенная проблема при применении к сложной полифонической музыке)
- Обнаружение ключа (обнаружение подписи ключа).
В зависимости от характера вашего проекта может оказаться полезным изучить среду программирования SuperCollider. SC - это язык, разработанный для таких проектов, который уже имеет большое количество плагинов для прослушивания машин (ugens) и всеобъемлющую структуру для работы с БПФ, аудиосигналами и многим другим.
Транскрипция музыки означает создание нотной записи из звука (или аудиоданных). В то время как опытные музыканты и особенно композиторы могут сделать это, это чрезвычайно трудная задача для машины, и, насколько я знаю, успехов пока мало, в основном академические эксперименты.
По сути, чтобы распознать ноты, вы хотите знать, где они начинаются, где они заканчиваются и какова их высота. Преобразование Фурье является самым основным способом преобразования временной области (аудиоданных) в частотную область (высот) - в принципе. На практике музыкальные инструменты генерируют много гармоник (обертонов), и если мы добавляем полифонию (много F0), это беспорядок.
Вы можете попробовать подать что-то вроде 50 миллисекундных последовательных фрагментов аудиоданных в БПФ. Таким образом, вы получите спектр каждого среза, затем обнаружите самые сильные пики в каждом срезе и определите ритм того, что происходит между последовательными срезами.
Извините, я ничего не мог поделать... Но просто хотел отметить, что то, что вы пытаетесь сделать, чрезвычайно сложно, серьезно. Возможно, вам следует начать с чего-то более простого, например, с детектирования синусоидальных мелодий в одну ноту. Удачи!
Этот вопрос об обнаружении появления заметок содержит много информации, которая может быть вам полезна.
Это звучит огромный, но очень интересный проект, удачи вам.
Для определения основной частоты мелодии в полифонической музыке вы можете попробовать плагин MELODIA vamp (только для некоммерческого использования): http://mtg.upf.edu/technologies/melodia
Если вы хотите реализовать алгоритм извлечения мелодии самостоятельно, вам придется проверить текущее состояние исследований, хорошим началом может стать кампания по ежегодной оценке извлечения мелодии MIREX: http://www.music-ir.org/mirex/wiki/Audio_Melody_Extraction
Это или просто гугл "Извлечение мелодии";)