преобразование WAV в MIDI - PullRequest
       92

преобразование WAV в MIDI

9 голосов
/ 24 января 2010

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

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

Ответы [ 5 ]

27 голосов
/ 24 января 2010

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

Эта исследовательская проблема часто упоминается как транскрипция музыки : акт преобразования низкоуровневого представления музыки (например, сигнала) в представление более высокого уровня, такое как 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. (Изменить: выполняет транскрипцию на уровне нот. Возвращенные данные включают в себя высоту звука, тембр, ритм, татум и т. Д. Но я считаю, что полифония по-прежнему остается проблемой.)

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

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

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

Для Matlab вас может заинтересовать MIR Toolbox

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

4 голосов
/ 24 января 2010

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

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

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

3 голосов
/ 24 января 2010

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

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

1 голос
/ 19 августа 2015

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

Вы можете установить звуковой аннотатор и использовать несколько плагинов 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
1 голос
/ 24 января 2010

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

...