Большинство алгоритмов определения частоты, приведенных в других ответах, плохо работают для голоса. Чтобы понять, почему это так интуитивно понятно, подумайте, что все гласные на языке можно петь в одной конкретной ноте. Даже если все эти гласные имеют очень разное частотное содержание, все они должны быть обнаружены как одна и та же нота. Любой алгоритм обнаружения нот для голосов должен как-то это учитывать. Кроме того, человеческая речь и песня содержат много фрикативных , многие из которых не имеют скрытой высоты тона.
В общей (не голосовой) функции, которую вы ищете, называется функция цветности , и по этому вопросу имеется довольно большой объем работ. Он также известен как профиль класса гармонических высот . Оригинальным справочным документом по этой концепции является « Распознавание аккордов в реальном времени музыкального звука: система, использующая обычную музыку на Лиспе », написанную Таюкой Фудзисимой. Запись Wikipedia содержит обзор более современного варианта алгоритма. Существует множество бесплатных статей и реализация MATLAB для определения цветности.
Однако, поскольку вы сосредотачиваетесь только на человеческом голосе, и поскольку человеческий голос, естественно, содержит тонны обертонов, в этом конкретном сценарии вы фактически ищете именно алгоритм обнаружения основной частоты , или f0 алгоритм обнаружения . Существует несколько таких алгоритмов , явно настроенных для голоса . Кроме того, - это широко цитируемый алгоритм , который работает с несколькими голосами одновременно. Затем вы сравниваете обнаруженную частоту с равной шкалой и затем находите наиболее близкое соответствие.
Так как я подозреваю, что вы пытаетесь создать детектор и / или корректор основного тона в режиме автонастройки, вы можете использовать превосходную реализацию WORLD М. Мориса, которая позволяет быстро и качественно обнаруживать и модификация f0 для голосовых потоков.
Наконец, имейте в виду, что есть только несколько детекторов вокального тона, которые хорошо работают в регистре вокала. Почти все из них, в том числе WORLD, терпят неудачу на вокале и очень тихих голосах. В ряде статей голосовые фраи называются «скрипучим голосом» и разработаны специальные алгоритмы, специально предназначенные для этого типа голосового ввода.