Я знаю, что этот ответ не сделает всех счастливыми, но здесь идет.
Это сложно, очень сложно. Во-первых, прочитайте как можно больше учебников по БПФ, автокорреляции, вейвлетам. Хотя я все еще борюсь с DSP, я кое-что понял из следующего.
https://www.coursera.org/course/audio на данный момент курс не работает, но видео все еще доступны.
http://miracle.otago.ac.nz/tartini/papers/Philip_McLeod_PhD.pdf тезис о разработке алгоритма распознавания высоты звука.
http://dsp.stackexchange.com целый сайт, посвященный цифровой обработке сигналов.
Если, как и я, вы недостаточно разбираетесь в математике, чтобы полностью следовать учебникам, не сдавайтесь, поскольку некоторые диаграммы и примеры все же помогли мне понять, что происходит.
Далее идут тестовые данные и тестирование. Напишите себе библиотеку, которая генерирует тестовые файлы для использования при проверке вашего алгоритма / ов.
1) Супер простой генератор чистых синусоидальных волн. Допустим, вы смотрите на запись YAT (все еще другого тюнера), а затем с помощью генератора синуса создаете серию файлов с частотой около 440 Гц, например, с 420–460 Гц с различными приращениями, и видите, насколько чувствительным и точным является ваш код. Можно ли разрешить с точностью до 5 Гц, 1 Гц, еще лучше?
2) Затем обновите ваш генератор синусоидальных волн, чтобы он добавил серию более слабых гармоник к сигналу.
3) Далее идут реальные вариации гармоник. Таким образом, хотя для большинства струнных инструментов вы увидите ряд гармоник в виде простых кратных основной частоты F0, для таких инструментов, как кларнеты и флейты, из-за поведения воздуха в камере четные гармоники будут отсутствовать или будут очень слабыми. А для некоторых инструментов F0 отсутствует, но его можно определить по распределению других гармоник. F0 - это то, что человеческое ухо воспринимает как высоту.
4) Внесите некоторое преднамеренное искажение, смещая пиковые частоты гармоник вверх и вниз нерегулярным образом
Дело в том, что если вы создаете файлы с известными результатами, то легче проверить, что то, что вы создаете, действительно работает, конечно же, с ошибками.
Существует также ряд «библиотек», содержащих звуковые образцы.
https://freesound.org из серии Coursera, упомянутой выше.
http://theremin.music.uiowa.edu/MIS.html
Далее следует помнить, что ваш микрофон не идеален, и если вы не потратили на него тысячи долларов, он будет иметь довольно изменяемый диапазон частотных характеристик. В частности, если вы работаете с низкими нотами, тогда более дешевые микрофоны, считайте встроенные на вашем ПК или телефоне, имеют значительный спад, начиная с 80-100 Гц. Для достаточно хороших внешних вы можете снизить частоту до 30-40 Гц. Найдите данные на вашем микрофоне.
Вы также можете проверить, что происходит, проиграв тональный сигнал через динамики, а затем записав на свой любимый микрофон. Но, конечно, сейчас мы говорим о 2 наборах частотных характеристик.
Когда дело доходит до производительности, существует множество свободно доступных библиотек, хотя имейте в виду различные модели лицензирования.
Прежде всего, не сдавайтесь после первых нескольких попыток. Удачи.