Я прочитав багато запитань про ТА, і, чесно кажучи, кожне з них не описує конкретного способу для цього. Деякі кажуть "зробити FFT", а деякі кажуть "нульове перетинання" і т. Д. Але я лише пішов настільки, наскільки зрозумів, що цифровий аудіовхід складається з масиву амплітуд для певної частоти і добре. Не дуже знаю поза ним.
Тепер я знаю теорему Найквіста, частоту, амплітуду, серії Фур'є тощо, і це було 2-3 роки тому, коли я робив це в своїй університетській програмі в якомусь семестрі. Але тоді ми насправді мало навчали справжньому світовому використанню Фур'є, і я не намагався більше розкопувати цю тему, крім того, щоб навчитися просто достатньо, щоб передати цю тему. Але тепер мені доведеться використовувати всі ці речі.
Ось знімок звуків, які я намагаюся виявити:
Зрозуміло, що звуки мають унікальні графіки. Я просто хочу зрозуміти, як витягти їх особливі унікальні характеристики для їх унікальних колосових ліній на графіку. Як і яка амплітуда, частота тощо. І за скільки часу - хоча, мабуть, це банально.
Я хочу простий крок за кроком, нечіткий список інструкцій - я можу гугл термінологію, яку я не розумію.
Можливо, це? -
Отримати вхідні аудіодані
Сюжетна спектограма
Отримайте графік спектограми для звуку, який ви хочете виявити в безшумному середовищі
Вивчіть цей графік - намалюйте унікальні характеристики цього звуку
Створіть якусь функцію, яка може виявити ті особливості, які містяться в живій аудіоканалі, використовуючи характеристики звуку, знайдені в (4)
Якщо відповідність знайдена, ну - робота виконана.
Відшліфуйте алгоритм вилучення помилкових негативів.
Де я плутаюсь - як мені пройти близько 3,4,5. Зокрема, 3 і 4. Оскільки я створюю програмне забезпечення, де користувач міг би записувати будь-який звук як введення жестами, яке буде використане пізніше, я хотів би, щоб моя система могла записувати будь-який звук і співставляти його з живим звуком канал для виявлення цього звукового жесту. Як скажімо, кашель, або прищеплення пальцем, або свист, або хлопання. Або кажучи приголосні - або або або . Просто про будь-який звук.
Я думав змусити користувача записати звук, який вони хочуть зберегти, як жест, у цілком середовищі. І користувач видавав би звук лише між тихим прокладкою часу ; 3 секунди на початку та в кінці запису.
Так, скажімо, протягом перших 3 секунд моя система встановила б, що поточний вхід - це нормальний тихий фоновий звук. І тоді раптова зміна графіка стала би звуковим входом. І коли це припиняється, запис продовжуватиметься ще 3 секунди, триваючи спокійний час . Це буде зроблено користувачем вручну. Потім він автоматично зберігатиме характеристики лише тієї частини, протягом якої тривала раптова зміна графіка - десь між часом прокладки.
Таким чином, характеристики цієї частини зберігатимуться як жестикульовані дані цього звуку, які згодом будуть використовуватися для виявлення цього конкретного звуку в прямому аудіозаписі.
Проблема в тому, що я все це думаю простою англійською мовою. Мені потрібно думати з математики та фізики, щоб мати можливість це ефективно втілити у свій код. Мені просто так не зрозуміло, що писати і куди це написати в своєму коді - навіть маючи в своєму розпорядженні стільки бібліотек і запитань про SO.
І вибачте, якщо це було довго.