Стоит знать, что это очень сложная проблема, и если у вас нет опыта обработки сигналов (или интереса к его изучению), у вас впереди очень неприятное время. Если вы ожидаете бросить пару БПФ на проблему, вы не будете очень далеко. Я надеюсь, что у вас есть интерес, так как это действительно захватывающий район.
Первоначально существует проблема распознавания основного тона, которую достаточно просто сделать для простых монофонических инструментов (например, голоса), используя такой метод, как автокорреляция или спектр гармонических сумм (например, см. Ссылку Пола Р.). Тем не менее, вы часто обнаружите, что это дает неправильные результаты: вы часто получаете половину или удвоение шага, который вы ожидали. Это называется шагом удвоения периода или октавных ошибок , и это происходит в основном потому, что БПФ или автокорреляция предполагают, что данные имеют постоянные характеристики во времени. Если у вас есть инструмент, на котором играет человек, всегда будут некоторые вариации.
Некоторые люди подходят к проблеме распознавания key как к вопросу сначала о распознавании высоты тона, а затем о поиске ключа из последовательности шагов. Это невероятно трудно, если у вас есть что-то кроме однотонной последовательности тонов. Если у вас есть монофоническая последовательность высот, тогда это все еще непонятный метод определения ключа: например, как вы обрабатываете хроматические ноты или определяете, мажорный он или минорный. Поэтому вам нужно использовать метод, подобный алгоритму поиска ключа Крумхансла .
Итак, учитывая сложность этого подхода, альтернативой является просмотр всех нот, играемых одновременно. Если у вас есть аккорды или более одного инструмента, у вас будет богатый спектральный суп из множества синусоид, играющих одновременно. Каждая отдельная нота состоит из нескольких гармоник основной частоты, поэтому A (при 440 Гц) будет состоять из синусоид при 440, 880, 1320 ... Кроме того, если вы играете на E
(см. эту диаграмму для тонов), тогда это 659,25 Гц, что почти в полтора раза больше, чем A (фактически 1.498). Это означает, что каждая 3-я гармоника A совпадает с каждой 2-й гармоникой E. Это причина того, что аккорды звучат приятно, потому что они имеют общие гармоники. (кроме того, вся причина того, что западная гармония работает, заключается в причуде судьбы, что двенадцатый корень 2 в степени 7 равен почти 1,5)
Если вы смотрели за пределы этого интервала от 5-го до мажорного, минорного и других аккордов, вы найдете другие соотношения. Я думаю, что многие ключевые методы поиска будут перечислять эти соотношения, а затем заполнять гистограмму для каждого спектрального пика в сигнале. Так что в случае обнаружения аккорда A5 вы ожидаете найти пики в 440, 880, 659, 1320, 1760, 1977. Для B5 это будет 494, 988, 741 и т. Д. Так что создайте частотную гистограмму и для каждого синусоидальный пик в сигнале (например, из спектра мощности БПФ) увеличивает запись гистограммы. Затем для каждого ключа A-G подсчитайте количество столбцов в вашей гистограмме, и ключами с наибольшим количеством записей, скорее всего, будет ваш ключ.
Это просто очень простой подход, но его может быть достаточно, чтобы найти ключ ударного или устойчивого аккорда. Вам также придется разделить сигнал на небольшие интервалы (например, 20 мс) и проанализировать каждый из них, чтобы получить более надежную оценку.
EDIT:
Если вы хотите поэкспериментировать, я бы посоветовал загрузить пакет типа Octave или CLAM , который упрощает визуализацию аудиоданных, запуск FFT и другие операции.
Другие полезные ссылки:
- Моя кандидатская диссертация по некоторым аспектам распознавания высоты звука - математика немного сложная, но глава 2 (я надеюсь) является довольно доступным введением в различные подходы к моделированию музыкального звука
- http://en.wikipedia.org/wiki/Auditory_scene_analysis - Анализ Bregman's Audit Scene, который, хотя и не говорит о музыке, дает некоторые интересные результаты о том, как мы воспринимаем сложные сцены
- Дэн Эллис сделал несколько замечательных работв этой и аналогичных областях
- Кейт Мартин имеет несколько интересных подходов