Моя цель написать программу которая во входном аудиофайле надет все звуки,если такие есть и определит их источник, если он относится к музыкальным инструментам
Прочитав ряд статей по физической природе звука я понял следующее:
Каждый звук, издаваемый реальным объектом(не синтезированный), имеет так называемые "обертона", т.е. более тихие сопутствующие звуки, частота которых кратна частоте основного
Также я понял что тембр звука зависит от отношения громкости обертонов к громкости самого звука
Соответственно способ решения моей задачи должен быть не таким уж сложным, а именно:
1) я считываю файл и провожу БПФ, получая спектрограмму
2) для каждого момента времени на графике частота/громкость я ищу вершины, выделяющиеся из общей массы
вот так выглядит график частота/громкость для одной ноты на гитаре:

А вот так он выглядит с отмеченными на нем пиками:

3)Теперь мне надо найти среди них самый громкий, причем такой, чтобы он был выше определенного порога громкости(дабы не находить звуки в фоновом шуме)
Вот я его нашел:

(красным показан звук, черным показан пгрог громкости)
4)Теперь осталось выбрать те пики, чьи частоты кратны частоте основного звука и сравнить их отношения к содержимому базы данных и понять, что издает этот звук
И пока я работал с гитарой все работало идиально
Но впереди меня ждал ряд проблем
Проблема №1:
В большинстве случаев, обертона распологаются не четко на кратных позициях, а в определенном радиусе от них, причем у высоких звуков он порой составляет до 150Гц
Таким образом, четко определить обертона звука невозможно, что сильно ухудшает качество распознавания
Проблема №2:
Когда я тестировал алгоритм на записи звучания трубы я обнаружил такую картину:

Как можно видеть, пиком которому кратны другие является пик номер 1
В то время, как самым громким является пик номер 6
Возникает вполне очевидный вопрос: "Считать звуком самый левый в данной последовательности, или самый громкий?".
А если считать самый громкий, то являются ли его обертонами только номера кратные ему самому или также номера кратные пику номер 1?
P.S
Если я задал вопрос не в подходящем месте, то прошу сообщить об этом и указать подходящее
P.P.S
Если вам знаком способ выделения отдельных звуков из аудиозаписи, прошу сообщить, дабы я не мучался, изобретая велосипед