Не изобретайте велосипед:)
Проверьте http://librosa.github.io, особенно часть о кратковременном преобразовании Фурье (STFT) или в вашем случае скорее что-то вроде Constant-Q-Transform (CQT).
Но обо всем по порядку: давайте предположим, что у нас есть стереофонический сигнал (2 канала) из аудиофайла.Сейчас мы отбрасываем пространственную информацию, которая закодирована в двух каналах аудиофайла путем создания среднего канала (суммируйте оба канала и разделите на 2).Теперь у нас есть сигнал, который является моно (1 канал).Поскольку у нас есть цифровой сигнал, каждый момент времени называется сэмплом.
Теперь начинается забавная часть, мы нарезаем сигнал на маленькие кусочки (называемые кадрами), отбирая последовательные сэмплы (512 или кратные 2стандартные значения).Взяв дискретное преобразование Фурье (DFT) для каждого из этих кадров, мы получаем частотно-временное представление, называемое спектрограммой.Любые дальнейшие концепции (дублирование и т. Д.) Можно прочитать в каждой книге DSP или в таких ресурсах, как этот лабораторный курс: https://www.audiolabs -erlangen.de / content / 05-fau / Professor / 00-mueller / 02-learning /2016s_apl / LabCourse_STFT.pdf
Обратите внимание, что ось частоты ДПФ линейно разнесена.В западной музыкальной системе октава разделена на 12 полутонов, центральные частоты которых разнесены логарифмически.Посмотрите сценарий выше о стратегии биннинга, как получить логарифмически разнесенную ось частот от линейного STFT.Однако этот подход является очень базовым, и существует множество других и, возможно, более подходящих подходов.
Теперь вернемся к вашей проблеме распознавания нот.Во-первых: это очень сложно.:) Как упомянуто выше, реальный звук, который играет инструмент, содержит обертоны.Кроме того, если вам интересно транскрибировать ноты, исполняемые целыми группами, вы получаете помехи от других музыкантов и т. Д.
Говоря о методах, которые вы могли бы попробовать: в наши дни многие люди используют неотрицательную матричную фаторизацию (NMF илианалогичные LDPCA) или нейронные сети для решения этой задачи.Например, NMF включен в scikit-learn.Для начала я бы порекомендовал NMF.Используйте только монотимбральные звуки, то есть один инструмент, играющий одновременно.Инициализируйте шаблоны с помощью простых затухающих обертонных структур и посмотрите, что произойдет.