Я пытаюсь извлечь данные основного тона из аудиопотока.Из того, что я вижу, похоже, что FFT - лучший алгоритм для использования.
Вместо того, чтобы копаться прямо в математике, кто-то может помочь мне понять, что делает этот алгоритм FFT?
Пожалуйстане говорите ничего очевидного, например: «БПФ извлекает частотные данные из необработанного сигнала».Мне нужен следующий уровень детализации.
Что я передаю и что я получаю?
Как только я ясно понимаю интерфейс, это поможет мне понять реализацию.
Я полагаю, мне нужно передать в аудио-буфер, мне нужно указать, сколько байтов использовать для каждого вычисления (скажем, самые последние 1024 байта из этого буфера).и, возможно, мне нужно указать диапазон высот, которые я хочу обнаружить.Теперь это пройдет назад, что?Массив частотных бинов?Что это?
(Правка :) Я нашел алгоритм C ++ для использования (если я могу только понять его)
Performous извлекает высоту звука из микрофона.Также код с открытым исходным кодом.Вот описание того, что делает алгоритм, от парня, который его кодировал.
- PCM-вход (с буферизацией)
- FFT (1024 семпла за раз, удалите 200 семплов изпотом перед буфером)
- Метод переназначения (по сравнению с предыдущим БПФ, который был 200 сэмплами ранее)
- Фильтрация пиков (эту часть можно было бы сделать намного лучше или даже пропустить)
- Объединение пиков в наборы гармоник (мы называем комбинацию тоном)
- Временная фильтрация тонов (обновление набора тонов, обнаруженных ранее, вместо простого использования вновь обнаруженных)
- Выберите лучший вокальный тон (частотные ограничения, взвешивание, также можно использовать гармонический массив, но я не думаю, что мы используем)
Но кто-то может помочь мне понять, как это работает?Что отправляется из БПФ в метод переназначения?