Я поражен всеми ответами здесь, предлагая использовать FFT, учитывая, что FFT, как правило, недостаточно точен для определения высоты тона. Это может быть, но только с непрактично большим FFT-окном. Например, чтобы определить фундаментальное значение с 1/100-й точностью полутонов (что касается того, что вам нужно для точного определения высоты тона), когда фундаментальное значение находится вокруг концерта A (440 Гц), вам нужно окно FFT с 524 288 элементы. 1024 - гораздо более типичный размер FFT - время вычисления становится все хуже, чем больше окно.
Я должен определить основную составляющую WAV-файлов в моем программном синтезаторе (где «промах» сразу слышен как инструмент без настройки), и я обнаружил, что автокорреляция на самом деле лучшая работа. В основном, я повторяю каждую ноту в 12-тональной шкале в 8-октавом диапазоне, вычисляю частоту и длину волны каждой ноты, а затем выполняю автокорреляцию с использованием этой длины волны в качестве задержки (автокорреляция - это где вы измеряете корреляцию между набором данных и одним и тем же набором данных, смещенным на некоторую величину задержки).
Нота с наивысшей оценкой автокорреляции, таким образом, является грубой базой. Затем я «оттачиваюсь» от истинного фундаментального значения, повторяя один полутона до полутона на 1/1000th полутона, чтобы найти локальное значение автокорреляции пикового значения.Этот метод работает очень аккуратно, и, что более важно, он работает для самых разных инструментов (струнные, гитарные, человеческие голоса и т. Д.).
Этот процесс чрезвычайно медленный, однако, особенно для длинных файлов WAV, поэтому он не может использоваться как для приложения реального времени. Однако, если вы использовали FFT для получения приблизительной оценки фундаментальной, а затем использовали автокорреляцию с нулевым значением истинного значения (и вы были довольны тем, что были менее точными, чем 1/1000-й полутона, что абсурдно перегружено, точный), у вас был бы метод, который был бы относительно быстрым и предельно точным.
... И вы хотели бы узнать, какие библиотеки и компоненты использовать? – FrustratedWithFormsDesigner
Думаю, вам нужно уточнить ваш вопрос. Вы заявили общее желание, а не конкретные вопросы. – CrimsonX
Должен ли он быть настроен, или он должен допускать ложные заметки? – Abel