Я прочитал много вопросов по SO, и, честно говоря, каждый из них не описывает какой-либо конкретный способ сделать это. Некоторые говорят «делать БПФ», а некоторые - «пересечение нуля» и т. Д. Но я дошел до того, что понял, что цифровой аудиовход состоит из массива амплитуд для определенной частоты и хорошо. Не очень много знаю за ней.
Теперь я знаю теорему Найквиста, частоту, амплитуду, ряды Фурье и т. Д., И это было 2-3 года назад, когда я делал это в своей университетской программе в каком-то семестре. Но в то время нас действительно мало учили практиковать использование Фурье в мире, и я даже не удосужился покопаться на предмете, помимо изучения, достаточно, чтобы пройти предмет. Но теперь мне придется использовать все эти вещи.
Вот снимок звуков, которые я пытаюсь обнаружить:
Очевидно, что звуки имеют уникальные графики. Я просто хочу понять, как извлечь их конкретные уникальные характеристики для их уникальных колючих линий на графике. Например, какая амплитуда, частота и т. Д. И на сколько времени - хотя это тривиально, я думаю.
Я хочу простой пошаговый, расплывчатый список инструкций - я могу использовать терминологию, которую я не пойму.
Как, может быть, это? -
Получить входные аудиоданные
Спектрограмма участка
Получить график спектрограммы для звука, который вы хотите обнаружить в бесшумной среде
Изучите этот график - нарисуйте уникальные характеристики этого звука
Сделайте какую-то функцию, которая может обнаруживать эти конкретные характеристики в прямом эфире аудио, используя характеристики звука, найденные в (4)
Если совпадение найдено, хорошо - работа выполнена.
Отработайте алгоритм, чтобы отсеять ложные негативы.
Где я в замешательстве - как мне пройти около 3,4,5. В частности, 3 и 4. Поскольку я создаю программное обеспечение, в котором пользователь сможет записывать любой звук в качестве жестового ввода для последующего использования, я бы хотел, чтобы моя система могла записывать любой звук и сопоставлять его с живым звуком. кормить, чтобы обнаружить этот звуковой жест. Как, скажем, кашлять, или щелкать пальцами, или свистеть, или хлопать. Или говоря согласные - или или или . Просто о любом звуке.
Я думал о том, чтобы заставить пользователя записать звук, который он хочет сохранить как жест в тихой обстановке. И пользователь будет издавать звук только между тихим временным отступом ; 3 секунды в начале и в конце записи.
Так, скажем, в течение первых 3 секунд моя система установит, что текущий вход является нормальным тихим фоновым звуком. И тогда внезапным изменением графика будет запуск звука. И когда это останавливается, запись будет продолжаться в течение еще 3 секунд, завершая тихое заполнение времени . Это будет сделано вручную пользователем. Затем он автоматически сохранит характеристики только той части, в течение которой длилось внезапное изменение графика - где-то между временами заполнения.
И, таким образом, характеристики этой части будут сохранены как данные жестов этого звука, которые впоследствии будут использоваться для обнаружения этого конкретного звука в прямом эфире.
Проблема в том, что я все это думаю на простом английском языке. Мне нужно думать по математике и физике, чтобы иметь возможность эффективно реализовывать это в своем коде. Я просто чертовски не понимаю, что писать и где писать в моем коде - даже с таким большим количеством библиотек и вопросов по SO в моем распоряжении.
И извините, если это было долго.