Применяется частотный анализ (основанный на преобразовании Фурье или Wavelet и др). Музыкальный звук в частотной области представляет собой набор пиков. Первый пик на самой нижней (базовой) частоте, а остальные — на кратных ей частотах. В простейшем случае алгоритм таков:
1) Записываем кусок звукового сигнала
2) Вычисляем спектральную плотность мощности (СПМ) методом Уолша (Welch) или другим.
3) Ищем на СПМ первый пик, берем его частоту.
4) Вычисляем номер ноты по формуле:
N = 12*log2(f/440), где f — частота, в Гц, где находится первый пик
номер ноты получается в полутонах относительно ля первой октавы (эта нота имеет частоту 440Гц, отсюда и константа в формуле).
Если N получается близким к целому — значит подстройка выполнена точно на ту ноту, которой соответствует N. Если дробная часть N больше 0.1 или меньше 0.9 — значит подстройка неточная.
Поиск пика по СПМ — нетривиальная задача, потому что локальных максимумов там много из-за шума, а глобальный максимум не обязательно является первой гармоникой (он может быть на кратной базовой частоте). Поэтому можно, например, найти сначала глобальный максимум, а потом поискать, нет ли локальных максимумов на частотах, близких к дольным от частоты глобального максимума, и при этом имеющих амплитуду, скажем, не менее 1/2 от амплитуды глобального максимума.