То, что я пытаюсь достичь, - это отличить отдельные заметки в аудиофайле. Для простоты можно сказать, что несколько нот играют один за другим. Главный вопрос - как определить, когда играется следующая нота?
То, что я уже сделал, - это чтение образцов из аудиофайла и выполнение преобразования Фурье на этих образцах с использованием библиотеки JTransforms. Вот что я получаю:
.
Затем я вычислил спектр на основе данных, полученных FFT, и вот что я получаю:
.
Как я понимаю, более крупные «столбцы» на графике - это гармоники, а маленькие - это шум и другие не гармонические обертоны, верно?Различают ноты алгоритм FFT
После этого я попытался выполнить один и тот же процесс с аудиофайлом с двумя нотами, играемыми один за другим, но результат был таким же.
В качестве побочного вопроса, знаете ли вы, какие-нибудь легкие и быстрые библиотеки для визуализации таких данных? Потому что использование JFreeChart для больших наборов данных - настоящая боль для моего процессора.
Если вы хотите идентифицировать музыкальные ноты, вам необходимо выполнить [** определение высоты тона **] (https://en.wikipedia.org/wiki/Pitch_detection_algorithm). Обратите внимание, что шаг - это не то же самое, что частота. Это не то же самое, что частота основного компонента (f0). Читайте на Harmonic Product Spectrum, который является популярным методом определения высоты тона. –
Я считаю, что это связано с обработкой сигналов. Я думаю, вам нужно применить фильтры (как в полосовых фильтрах, чтобы проверить, присутствует ли частота в сигнале). В основном используйте полосовой фильтр для проверки A, B, C, D и т. Д. Использование FFT не позволяет узнать, было ли какое-то конкретное примечание воспроизведено перед другим (по крайней мере, насколько мне известно), поскольку оно основано на частоте. Возможно, вы можете попробовать проверить сигнал (с применением FFT), пока не найдете заметку с использованием (полосовой фильтр), и после этого возьмите еще один образец времени, применяя тот же метод. Не знаю, будет ли это дорогостоящим вычислительным процессом или нет. –
@PaulR Я видел много ваших сообщений о обработке сигналов здесь, в stackoverflow, у вас случается какой-то блог, если вы решили поделиться своими исследованиями в этой области? Могу ли я связаться с вами через что-то другое, чем stackoverflow? В настоящее время я работаю над огромным проектом, который имеет множество подпроектов, связанных с распознаванием тональности, распознаванием речи нейронными сетями и чтением некоторых фрагментов информации в Интернете не очень полезно. –