Короткий ответ: вам нужно гораздо больше, чем один алгоритм.Хорошие методы распознавания аккордов можно более точно описать как «системы», но обычно они действительно основаны на начальном преобразовании в частотную область (чаще всего DFT).
Если вы хотите, чтобы аккорд представлял песню, подобнуюк этому
C G Am F7 F6 C ...
тогда это на самом деле проблема, которая слегка устранена из распознавания нот в куске аудио.На самом деле, есть две проблемы (грубо говоря):
- нахождение, какие тона присутствуют в любое время
- группировка этих тонов по времени, чтобы иметь возможность назначить метку аккордак временному интервалу.
Оказывается, что способ преобразования из временной области (обычное аудио) в частотную область (спектральное представление) имеет ограниченную важность.Очень важно то, что вы делаете потом, и часто для решения этой проблемы используются сложные вероятностные модели (похожие на те, которые используются в распознавании речи: HMM, DBNs, ...).
Попробуйте Google Tologic "chord transcription",или «обнаружение аккордов», или «маркировка аккордов» для продвинутых исследований в этой области.
Большинство из этих подходов используют дискретное преобразование Фурье (DFT) для создания начальной спектрограммы.Во время дальнейшей обработки они также имеют тенденцию незначительно отличаться, хотя использовались различные методы сглаживания временных рядов: скрытые марковские модели, динамические байесовские сети, опорные векторные машины (SVMstruct) и условные случайные поля - среди других.Самые продвинутые расшифровщики используют автоматическую настройку, ключевую информацию, информацию о басовых нотах и информацию о метрической позиции для улучшения результатов.Мой тезис (глава 2) дает хороший обзор.
Алгоритмы обнаружения аккордов с открытым исходным кодом:
Надеюсь, это поможет.