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