Сначала вам нужно понять, что такое «pitch» (прочтите ссылку на Википедию ниже). Когда на гитаре или фортепиано делается одна нота, мы слышим не одну частоту звуковой вибрации, а смесь нескольких звуковых колебаний, возникающих на разных математически связанных частотах. Элементы этой совокупности колебаний с разными частотами называются гармониками или частичными. Например, если мы нажмем среднюю клавишу C на фортепиано, отдельные частоты гармоник композитного сигнала начнутся с 261,6 Гц в качестве основной частоты, 523 Гц будет 2-й гармоникой, 785 Гц будет 3-й гармоникой, 1046 Гц будет быть 4-й гармоникой и т. д. Более поздние гармоники являются целыми кратными основной частоты, 261,6 Гц (например: 2 x 261,6 = 523, 3 x 261,6 = 785, 4 x 261,6 = 1046).
Ниже, на GitHub.com, приведен исходный код C ++ для необычного двухэтапного алгоритма, который я разработал, который может выполнять определение высоты звука в реальном времени для полифонических файлов MP3 при воспроизведении в Windows. Это бесплатное приложение (PitchScope Player, доступное в Интернете) часто используется для обнаружения нот гитары или саксофона соло при записи MP3. Вы можете скачать исполняемый файл для Windows, чтобы увидеть, как мой алгоритм работает с выбранным вами файлом mp3. Алгоритм разработан для определения наиболее доминирующей высоты звука (музыкальной ноты) в любой момент времени в музыкальном файле MP3 или WAV. Начало нот точно определяется изменением наиболее доминирующей высоты звука (музыкальной ноты) в любой момент во время записи MP3.
Я использую модифицированное логарифмическое преобразование DFT (похожее на FFT), чтобы сначала обнаружить эти возможные гармоники, ища частоты с пиковыми уровнями (см. Диаграмму ниже). Из-за способа, которым я собираю данные для моего модифицированного Log DFT, мне НЕ нужно применять оконную функцию к сигналу, а также не добавлять и перекрывать. И я создал ДПФ, так что его частотные каналы расположены логарифмически, чтобы напрямую согласовываться с частотами, на которых гармоники создаются нотами на гитаре, саксофоне и т. Д.
Мой алгоритм определения высоты тона на самом деле представляет собой двухэтапный процесс: a) Сначала определяется масштаб ScalePitch («ScalePitch» имеет 12 возможных значений высоты тона: {E, F, F #, G, G #, A, A #, B, C, C #, D , D #}) b) и после определения ScalePitch вычисляется октава путем изучения всех гармоник для 4 возможных нот Octave-Candidate. Алгоритм разработан для определения наиболее доминирующей высоты звука (музыкальной ноты) в любой момент времени в полифоническом файле MP3. Обычно это соответствует нотам инструментального соло. Те, кто интересуется исходным кодом C ++ для моего алгоритма двухэтапного определения шага, могут захотеть начать с функции Estimate_ScalePitch () в файле SPitchCalc.cpp на GitHub.com.
https://github.com/CreativeDetectors/PitchScope_Player
https://en.wikipedia.org/wiki/Transcription_ (музыка) #Pitch_detection < / а>
Ниже приведено изображение логарифмического ДПФ (созданного моей программой на C ++) для 3 секунд гитарного соло на полифонической записи в формате mp3. Он показывает, как гармоники появляются для отдельных нот на гитаре при игре соло. Для каждой ноты в этом логарифмическом ДПФ мы можем видеть его несколько гармоник, простирающихся по вертикали, потому что каждая гармоника будет иметь одинаковую временную ширину. После определения октавы ноты мы узнаем частоту основного тона.
![введите описание изображения здесь](https://i.stack.imgur.com/nkl5j.jpg)
На приведенной ниже диаграмме показан алгоритм определения октавы, который я разработал для выбора правильной ноты Octave-Candidate (то есть правильной основной ноты) после определения ScalePitch для этой ноты. Тем, кто хочет увидеть этот метод в C ++, следует перейти к функции Calc_Best_Octave_Candidate () внутри файла FundCandidCalcer.cpp, который содержится в моем исходном коде на GitHub.
![введите описание изображения здесь](https://i.stack.imgur.com/o4HRA.jpg)
person
James Paul Millard
schedule
16.01.2017