Вопрос

Я новичок в этой области, но мне нужно выполнить преобразование WAV в MIDI в Java.Есть ли способ узнать, какие именно шаги выполняются при преобразовании WAV в MIDI?У меня очень приблизительное представление о том, что вам нужно;сэмплируйте WAV-файл, отфильтруйте его, используйте БПФ для спектрального анализа, извлечения признаков, а затем запишите извлеченные признаки в MIDI.Но я не могу найти надежные источники или документы, например, как все это сделать?Может ли кто-нибудь дать мне подсказку, как и с чего начать?Существуют ли какие-либо API с открытым исходным кодом для этого процесса преобразования WAV в MIDI?

Заранее спасибо

Это было полезно?

Решение

Это более сложный процесс, чем вы можете себе представить.

Эту исследовательскую проблему часто называют транскрипция музыки:процесс преобразования представления музыки низкого уровня (например, формы волны) в представление более высокого уровня, такое как MIDI или даже ноты.

Сложность вашего решения будет зависеть от сложности входных данных.Тонны научных работ посвящены транскрипции музыки только на монофоническом фортепиано или барабанах...потому что их легко расшифровать.(Относительно.) На скрипке сложнее.Голос еще сложнее.Скрипка плюс голос плюс фортепиано – это гораздо сложнее.Симфония почти невозможна.Вы получаете картину.

Основные элементы музыкальной транскрипции включают в себя любую из следующих пересекающихся областей:

  1. (много)питчевая оценка
  2. распознавание инструментов, тембральное моделирование
  3. обнаружение ритма
  4. обнаружение начала/смещения ноты
  5. моделирование формы/структуры

Найдите статьи по «транскрипции музыки» в Google Scholar или в материалах ISMIR: http://www.ismir.net.Если вас больше интересует одна из вышеперечисленных подтем, я могу указать вам дальше.Удачи.

РЕДАКТИРОВАТЬ:При этом существуют существующие решения, которые мы все можем найти в Интернете.Не стесняйтесь попробовать их.Но при этом оценивайте их критическим взглядом и слухом.Какие типы аудиосигналов могут привести к сбою транскрипции?

РЕДАКТИРОВАТЬ 2:Ах, вы делаете это только для фортепиано.Хорошо, это осуществимо.Транскрипция музыки продвинулась до такой степени, что она может довольно хорошо транскрибировать монофоническое фортепиано.Концерт Рахманинова по-прежнему будет вызывать проблемы.

Наши рекомендации зависят от вашей конечной цели.Вы утверждаете "нуждаться исполнить...в Джава«Звучит так, будто вы просто хотите, чтобы что-то работало, независимо от того, как это вас к этому приведет.В этом случае я согласен на 100% с другими:использовать то, что существует.

На самом деле это интересный вопрос;все известные мне библиотеки MIR обычно представляют собой C/C++/Python/Matlab.Но не Ява.У EchoNest есть API Java, но я не думаю, что он выполняет транскрипцию на уровне нот. http://developer.echonest.com.(Редактировать:Это делает транскрипция на уровне нот.Возвращаемые данные включают высоту звука, тембр, долю, татум и многое другое.Но я считаю, что полифония все еще остается проблемой.)

О, Марсий основан на Java.Прохладный.Я думал, что это просто C++. http://marsyas.info/ Я рекомендую это.Его разработал Джордж Цанетакис, профессор МИР.Он выполняет анализ уровня сигнала и должен быть хорошим вариантом.

Теперь, если это ради интересного обучения, я думаю, вы можете использовать утилиты обработки звука в Java, чтобы поэкспериментировать с сигналом WAV и посмотреть, что получится.

РЕДАКТИРОВАТЬ:Эта страница описывает программное обеспечение МИР лучше, чем я могу: Инструменты, которые мы используем

Для Matlab вас может заинтересовать Набор инструментов МИР

Вот хорошая страница общих наборов данных: Наборы данных МИР

Другие советы

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

API для преобразования WAV в MIDI не существует. Вамп — это платформа для плагинов извлечения функций, но для автоматической транскрипции вам необходимо использовать все функциональные возможности существующих плагинов, а также реализовать функции, которых пока нет ни в одном из них.

Просмотрите описания плагинов на страница загрузки вампа, любые описания, которые вы не понимаете, — это темы, которые вам следует изучить, если вы хотите это сделать.

Если вам не нужно автоматизировать эту задачу (например, для веб-сайта, где люди могут загружать MP3 и получать MIDI-файлы обратно), вам следует рассмотреть возможность использования такого инструмента, как Мелодайн который уже неплохо справляется с этим.Как отметил Стив, это очень сложная задача, и даже самые лучшие алгоритмы и решения, существующие на данный момент, не являются 100% надежными.

Так что, если вы просто работаете в студии и вам нужно выполнить несколько преобразований, возможно, вы сэкономите немного времени (и много головной боли), если воспользуетесь инструментом, уже разработанным для этой задачи.

Дельфин, извини за резкость, но ты совершенно недооценил проблему.Чего вы хотите достичь: полная транскрипция звука фортепиано, включающая все параметры, которые использовались во время игры, потребует огромного количества исследований с участием людей, которые работали в этой области много лет.Даже группе докторов наук в области обработки сигналов придется приложить немало усилий, чтобы хотя бы приблизиться к тому, что вы имеете в виду.Транскрипция музыки потребовала десятилетий работы, чтобы работать хотя бы наполовину надежно.Я бы посоветовал вам выбрать другую проблему, с которой вы сможете справиться лучше, чем эта.

Эта область все еще находится в стадии разработки, однако уже существуют некоторые (экспериментальные) алгоритмы.

Вы можете установить звуковой аннотатор и использовать несколько плагинов Vamp.

Например:

./sonic-annotator file.wav -d vamp:qm-vamp-plugins:qm-transcription:transcription -w midi

./sonic-annotator file.wav -d vamp:silvet:silvet:notes -w midi

./sonic-annotator file.wav -d vamp:ua-vamp-plugins:mf0ua:mf0ua -w midi
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top