Короткий ответ: вам нужно гораздо больше одного алгоритма. Хорошие методы распознавания аккордов можно более точно описать как «системы», но обычно они основаны на первоначальном преобразовании в частотную область (чаще всего DFT).
Если вы хотите аккорд representaton песни похож на этот
C G Am F7 F6 C ...
, то это на самом деле проблема, которая немного удалена от признания ноты в части аудио. На самом деле, есть две проблем (грубо говоря):
- находки, которые Смолы присутствуют в любой момент
- группировкой этих смол с течением времени таким образом, чтобы иметь возможность присвоить метку аккорда к интервалу времени.
Оказалось, что способ преобразования из области времени (обычного звука) в частотную область (спектральное представление) имеет исключительно ограниченное значение. Очень важно, что вы делаете впоследствии, и часто для решения этой проблемы используются сложные вероятностные модели (аналогичные тем, которые распознаются речью: HMM, DBN, ...).
Попробуйте google ученого «транскрипция аккорда», или «обнаружение аккордов», или «аккордовая маркировка» для продвинутых исследований в этой области.
Большинство этих подходов используют дискретное преобразование Фурье (ДПФ) для создания начальной спектрограммы. При дальнейшей обработке они, как правило, незначительно отличаются друг от друга, хотя использовались различные методы сглаживания временных рядов: скрытые марковские модели, динамические байесовские сети, векторные векторные машины (SVMstruct) и условные случайные поля. Самые передовые транскрипторы используют автоматическую настройку, информацию о ключе, информацию о нотах баса и информацию о метрической позиции для улучшения результатов. Мой thesis (глава 2) дает хороший обзор.
алгоритмы с открытыми исходным кодом аккорда обнаружения:
Надеется, что это помогает.
Спросите ребят из Melodyne: http://www.youtube.com/watch?v=jFCjv4_jqAY – herzmeister
На каком основании, по вашему мнению, БПФ является непостоянным в вашем случае? – Biggles