Это более сложный процесс, чем вы можете себе представить.
Эту исследовательскую проблему часто называют транскрипцией музыки: преобразование низкоуровневого представления музыки (например, формы волны) в представление более высокого уровня, такое как MIDI или даже ноты.
Сложность вашего решения будет зависеть от сложности ваших входных данных. Тонны исследовательских работ посвящены транскрипции музыки только на монофоническом фортепиано или барабанах ... потому что их легко расшифровать. (Относительно.) Скрипка сложнее. Голос еще сложнее. Скрипка плюс голос плюс фортепиано намного сложнее. Симфония почти невозможна. Вы уловили картину.
Основные элементы транскрипции музыки включают в себя любую из следующих областей пересечения:
- (мульти) оценка высоты тона
- распознавание инструментов, тембральное моделирование
- определение ритма
- обратите внимание на обнаружение начала / смещения
- моделирование формы / конструкции
Найдите статьи по «транскрипции музыки» в 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