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