Вы должны сначала понять, что именно 'pitch' действительно (см. Ссылку в Википедии ниже). Когда на гитаре или фортепиано делается одна нота, мы слышим не только одну частоту звуковой вибрации, но и композицию из нескольких звуковых колебаний, происходящих на разных математически связанных частотах. Элементы этого композита колебаний на разных частотах называются гармониками или частичными. Например, если мы нажимаем клавишу среднего С на фортепиано, отдельные частоты гармоник композита начинаются с 261,6 Гц, так как основная частота, 523 Гц будет второй гармоникой, 785 Гц будет третьей гармоникой, 1046 Гц - 4-я гармоника и т. д. Более поздние гармоники являются целыми кратными основной частоте, 261,6 Гц (например: 2 х 261,6 = 523, 3 х 261,6 = 785, 4 х 261,6 = 1046).
Ниже, на GitHub.com, является исходный код C++ для необычного двухэтапного алгоритма, который я разработал, который может выполнять обнаружение в реальном времени Pitch в полифонических файлах MP3 во время воспроизведения в Windows. Это бесплатное приложение (PitchScope Player, доступное в Интернете) часто используется для обнаружения заметок гитары или саксофона соло при записи в формате MP3. Вы можете загрузить исполняемый файл для Windows, чтобы увидеть, как мой алгоритм работает над mp3-файлом по вашему выбору. Алгоритм предназначен для обнаружения наиболее доминирующего тона (музыкальной ноты) в любой момент времени в музыкальном файле MP3 или WAV. Заметные onsets точно выведены из-за изменения наиболее доминирующего тона (музыкальной ноты) в любой момент во время записи MP3.
Я использую модифицированное логарифмическое преобразование DFT (аналогично FFT), чтобы сначала обнаружить эти возможные гармоники, ища частоты с пиковыми уровнями (см. Диаграмму ниже). Из-за того, как я собираю данные для моего модифицированного журнала DFT, мне не нужно применять функцию Windowing к сигналу, а также добавлять и перекрывать. И я создал DFT, поэтому его частотные каналы логарифмически расположены для того, чтобы напрямую выровнять частоты, где гармоники создаются нотами на гитаре, саксофоне и т. Д.
My Pitch Detection Algorithm - фактически двухэтапный процесс: a) сначала обнаружен ScalePitch («ScalePitch» имеет 12 возможных значений высоты тона: {E, F, F #, G, G #, A, A #, B, C , C#, D, D #}) b) и после определения ScalePitch, то Octave вычисляется путем изучения всех гармоник для 4 возможных заметок Octave-Candidate. Алгоритм предназначен для обнаружения наиболее доминирующего тона (музыкальной ноты) в любой момент времени в полифоническом файле MP3. Это обычно соответствует нотам инструментального соло. Те, кто интересуется исходным кодом C++ для моего двухэтапного алгоритма обнаружения ошибок, могут захотеть начать с функции Estimate_ScalePitch() в файле SPitchCalc.cpp на GitHub.com.
https://github.com/CreativeDetectors/PitchScope_Player
https://en.wikipedia.org/wiki/Transcription_(music)#Pitch_detection
Сколько тонов или синусоиды мы говорим в исходном сигнале? Если это всего лишь несколько (например, 2 основных тона в сигнале DTMF), FFT, вероятно, сработает. Просто найдите пики. В противном случае, для музыки это, как известно, является сложной проблемой в информатике и обработке сигналов. Вы можете выполнить поиск в Интернете по «автоматической транскрипции музыки», и вы можете найти некоторые программы или код, которые пытаются это сделать. – selbie
Существует известная часть программного обеспечения под названием Melodyne, которая может делать это для сложных звуков. – cmannett85
Возможный дубликат этого вопроса: http://stackoverflow.com/questions/4337487/chord-detection-algorithms/4339225#4339225 – hotpaw2