преобразование wav в midi

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

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


person Dolphin    schedule 24.01.2010    source источник
comment
Также проверьте это http://stackoverflow.com/questions/1628071/programmatically-listening-to-sound-signal-processing/1628241#1628241   -  person Stefano Borini    schedule 24.01.2010
comment
возможный дубликат преобразования wav в midi   -  person finnw    schedule 07.05.2011


Ответы (5)


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

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

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

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

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

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

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

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

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

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

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

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

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

Что касается Matlab, вас может заинтересовать MIR Toolbox

Вот хорошая страница с общими наборами данных: MIR Datasets

person Steve Tjoa    schedule 24.01.2010
comment
Спасибо за советы Стив. Я планирую использовать wav-to-midi только для игры на фортепиано. Я думал, что транскрипция музыки дает только цифровую партитуру - спасибо, что поправили меня. Мне нужно записать фортепианную игру музыкальной пьесы и сгенерировать из нее midi-файл (iewrite midi-файл из wav-файла), захватив большинство музыкальных функций, включая высоту звука, динамику, синхронизацию, ритм, фразы, тоны, артикуляцию и т. Д. будет использоваться для обработки. Захват прямо из midi возможен, но из wav - я не могу придумать, с чего начать. Мне нужно исследовать те области, которые вы сказали в первую очередь - спасибо, Стив - person Dolphin; 24.01.2010
comment
Должен ли я использовать Matlab для этого процесса и интегрироваться, скажем, с Java? Заранее спасибо, Стив. Вы действительно нарисовали большую картину. - person Dolphin; 24.01.2010
comment
Пожалуйста. См. Мой ответ на комментарии в исходном посте. - person Steve Tjoa; 24.01.2010
comment
Стив, большое спасибо за ваши ответы. Я хотел бы узнать больше и изучить эту область. Вы упомянули все библиотеки MIR, которые я знаю ... Я не привязан к какому-либо конкретному языку. Можете ли вы порекомендовать библиотеку (желательно с открытым исходным кодом, но не обязательно) - на любом языке? Меня особенно интересует транскрипция одного инструмента. Кроме того, позволяет ли текущее состояние технологий транскрипция в реальном времени? т.е. средний компьютер может записывать музыку во время ее воспроизведения? - person Uri; 23.03.2011
comment
Пожалуйста. Я полагаю, транскрипция в реальном времени на среднем ПК довольно плохая. Ни я, ни многие другие не беспокоятся об этом, потому что нам довольно трудно довести до совершенства offline транскрипцию! Редко можно получить уровень транскрипции лучше, чем, скажем, 80% (заметок). Дополнительные инструменты см. В разделе "Правка". - person Steve Tjoa; 23.03.2011

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

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

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

person Justin Smith    schedule 24.01.2010
comment
Спасибо за предложения, Смит. По крайней мере, теперь я знаю, что нет смысла искать API, которые это делают. Можете ли вы использовать плагины с Java-кодом? Извлечение признаков - нужно ли использовать алгоритмы? Как я могу записать его в код только потому, что я знаю алгоритм? Придется ли мне использовать Matlab и интегрироваться с языком (например, Java)? Не могли бы вы дать мне картинку? Еще раз спасибо, Смит - person Dolphin; 24.01.2010
comment
Вамп использует C, C ++. Нет ли плагинов Java и подобных ресурсов? Это было бы очень полезно. Как можно использовать плагины в Java-коде? Заранее спасибо - person Dolphin; 24.01.2010
comment
Java не так часто встречается при обработке / анализе сигналов, потому что он относительно интенсивен ЦП, и до недавнего времени оборудование не было достаточно быстрым, чтобы делать такие вещи в Java на приемлемых скоростях. Похоже, Стив нашел хорошую зацепку. Для подхода более высокого уровня также существует возможность использования такой среды, как csound csounds.com, которая предоставляет огромное количество инструменты для синтеза и анализа звука, не беспокоясь о явном выделении и освобождении памяти, чем при использовании C. - person Justin Smith; 24.01.2010
comment
Что касается использования плагинов в Java, плагин представляет собой динамически загружаемую библиотеку, вы можете использовать JNI для загрузки и доступа к ней в программе Java: en.wikipedia.org/wiki/Java_Native_Interface - person Justin Smith; 24.01.2010

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

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

person Nik Reiman    schedule 24.01.2010

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

person Thorsten79    schedule 24.01.2010

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

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

Например:

./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
person dorien    schedule 19.08.2015