Як мені зайнятися виявленням свистів, попсів та інших звуків на аудіо вході?


9

Я прочитав багато запитань про ТА, і, чесно кажучи, кожне з них не описує конкретного способу для цього. Деякі кажуть "зробити FFT", а деякі кажуть "нульове перетинання" і т. Д. Але я лише пішов настільки, наскільки зрозумів, що цифровий аудіовхід складається з масиву амплітуд для певної частоти і добре. Не дуже знаю поза ним.

Тепер я знаю теорему Найквіста, частоту, амплітуду, серії Фур'є тощо, і це було 2-3 роки тому, коли я робив це в своїй університетській програмі в якомусь семестрі. Але тоді ми насправді мало навчали справжньому світовому використанню Фур'є, і я не намагався більше розкопувати цю тему, крім того, щоб навчитися просто достатньо, щоб передати цю тему. Але тепер мені доведеться використовувати всі ці речі.

Ось знімок звуків, які я намагаюся виявити:

унікальний графік замикання пальців і вмикання / вимикання світла

Зрозуміло, що звуки мають унікальні графіки. Я просто хочу зрозуміти, як витягти їх особливі унікальні характеристики для їх унікальних колосових ліній на графіку. Як і яка амплітуда, частота тощо. І за скільки часу - хоча, мабуть, це банально.

Я хочу простий крок за кроком, нечіткий список інструкцій - я можу гугл термінологію, яку я не розумію.

Можливо, це? -

  1. Отримати вхідні аудіодані

  2. Сюжетна спектограма

  3. Отримайте графік спектограми для звуку, який ви хочете виявити в безшумному середовищі

  4. Вивчіть цей графік - намалюйте унікальні характеристики цього звуку

  5. Створіть якусь функцію, яка може виявити ті особливості, які містяться в живій аудіоканалі, використовуючи характеристики звуку, знайдені в (4)

  6. Якщо відповідність знайдена, ну - робота виконана.

  7. Відшліфуйте алгоритм вилучення помилкових негативів.

Де я плутаюсь - як мені пройти близько 3,4,5. Зокрема, 3 і 4. Оскільки я створюю програмне забезпечення, де користувач міг би записувати будь-який звук як введення жестами, яке буде використане пізніше, я хотів би, щоб моя система могла записувати будь-який звук і співставляти його з живим звуком канал для виявлення цього звукового жесту. Як скажімо, кашель, або прищеплення пальцем, або свист, або хлопання. Або кажучи приголосні - або або або . Просто про будь-який звук.ABXZ

Я думав змусити користувача записати звук, який вони хочуть зберегти, як жест, у цілком середовищі. І користувач видавав би звук лише між тихим прокладкою часу ; 3 секунди на початку та в кінці запису.

Так, скажімо, протягом перших 3 секунд моя система встановила б, що поточний вхід - це нормальний тихий фоновий звук. І тоді раптова зміна графіка стала би звуковим входом. І коли це припиняється, запис продовжуватиметься ще 3 секунди, триваючи спокійний час . Це буде зроблено користувачем вручну. Потім він автоматично зберігатиме характеристики лише тієї частини, протягом якої тривала раптова зміна графіка - десь між часом прокладки.

Таким чином, характеристики цієї частини зберігатимуться як жестикульовані дані цього звуку, які згодом будуть використовуватися для виявлення цього конкретного звуку в прямому аудіозаписі.

Проблема в тому, що я все це думаю простою англійською мовою. Мені потрібно думати з математики та фізики, щоб мати можливість це ефективно втілити у свій код. Мені просто так не зрозуміло, що писати і куди це написати в своєму коді - навіть маючи в своєму розпорядженні стільки бібліотек і запитань про SO.

І вибачте, якщо це було довго.


1
Чи не цікаво, що спектрограма зроблена на телефоні чи планшеті? якщо так, чи можете ви сказати назву програми. Це виглядає дійсно круто. Що стосується вашого запитання, то, я думаю, ваша заявка схожа на тему / завдання виконувати ізольоване розпізнавання слів. Ви можете, мабуть, отримати багато ідей та натхнення від гуглінгу. Важка частина полягає в тому, щоб не розпізнавати жести в обмеженому відносно невеликому наборі жестів, важкою частиною є відфільтрувати речі, які не є жестами.
niaren

Це додаток: play.google.com/store/apps/… І дякую за точки зору. Але я хочу, щоб ти сказав мені, як розпізнавати не слова, а звуки (принаймні поки що), як свист, поп, хлопання тощо. Я працюю в Python.
bad_keypoints

1
На жаль, ця річ все ще є дослідницькою сферою. Мені невідомо, хто вирішує цю конкретну проблему.
Бьорн Рош

Відповіді:


2

Хоча я погоджуюся з одним із зауважень, що використання методів розпізнавання мовлення може бути гарним початком, але ці звуки різні, і я не знаю, чи хтось провів якісь дослідження щодо їх класифікації (документ, цитований Натаном, видається лише для розрізнення мови і шум), тож якщо хтось не подасть щось, що суперечить цьому, вам доведеться винайти власну техніку, і це забирає багато навчання і багато роботи. Найкраще, що я можу зробити, - це ти почати.

По-перше, не чекайте, що хтось зможе створити якусь магічну формулу. Немає рівняння, щоб перейти від звуку до того, яким є звук. Люди та комп’ютери повинні вчитися, включаючи дані, щоб скласти здогадки про те, що таке звуки. Причина, яку люди кажуть у своїх відповідях "використовувати FFT" або "використовувати нульове перетинання", полягає в тому, що це деякі основні будівельні блоки DSP, що використовуються для розпізнавання мови та пов'язаних з ними алгоритмів. Але FFT і нульова швидкість перетину зазвичай є лише першими кроками у створенні набору параметрів, що описують звук. Потім ці параметри аналізуються статистично (не через якусь магічну функцію), щоб визначити, до якої категорії вони, швидше за все, належать. Зауважте, що я сказав "найімовірніше": навіть найкраще виявлення мови (і людський мозок!

Отже, деякі параметри, які ви можете шукати, включають:

  • нульова швидкість перетину
  • частота центроїдів
  • конверт (це фактично набір параметрів, включаючи, наприклад, час атаки)
  • спектральна оболонка
  • парний / непарний гармонійний баланс
  • голосність
  • фундаментальний крок

Після того, як у вас з'явиться набір параметрів, які, на вашу думку, дозволять вам розрізнити звуки, вам потрібно буде використовувати якийсь статистичний метод, щоб класифікувати їх. Прихована модель Маркова часто використовується в мовленні. Ви також можете вивчити логістичну регресію, K-засоби, і я впевнений, що є й інші варіанти, але я думаю, що HMM випробуваний і справжній.


Ваша відповідь хороша, але я, головним чином, прошу порівняти власні звуки користувача зі звуками, які він видає пізніше для використання мого програмного забезпечення. Мовляв, подібність матеріалів. Скажімо, користувач видає різні типи звуків A, B і C. Характеристики цих звуків зберігаються як C_A, C_B, і C_C відповідно.
bad_keypoints

Методика залишається тією ж: 1. з'ясуйте, за якими параметрами ви збираєтеся вимірювати, 2. виміряйте їх, 3. використовуйте статистику, щоб дізнатися, що робить кожен звук різним, 4. використовуйте ці дані для категоризації.
Бйорн Рош

так це в основному те, що я думав. але, мабуть, мені доведеться побачити, з яких параметрів із хорошого довгого списку, який ви надали, мені доведеться позначити звуки, що викликають заперечення.
bad_keypoints

1
Якщо чесно, я дуже песимістичний щодо того, що зможу розрізнити такі речі, як перемикання пальців і перемикач світла в різних середовищах без великої кількості даних проб і, можливо, більше параметрів, ніж я дав, але сподіваюся, що я помиляюся. Повідомте про результати, навіть якщо це потребує певного часу.
Бьорн Рош

Також деякі люди в списку розсилки музики-dsp ( music.columbia.edu/cmc/music-dsp ) можуть мати інші пропозиції.
Бьорн Рош

0

Я використовував цей документ на основі вказівки на основі ентропії, коли я намагався ігнорувати подібні звуки в телефонних дзвінках, які використовуються для розпізнавання мовлення на комп’ютері, якщо звуки, які ви намагаєтеся захопити, це мова, то ентропія може працювати дуже добре, тому що музика може не бути корисним.


0

Я вважаю, що рекомендації Бьорна дуже хороші, але я хочу надати додаткову інформацію. З вашого опису, це дуже схоже на проблему ідентифікації тембру. У цій галузі є деякі дослідження в контекстах комп'ютерної музики (ідентифікація різних інструментів - корисна річ, яку можна зробити, і сказати різницю між оснащенням та плесканням через тембр звуку). Вільям Брентпровів деякі дослідження в цій галузі (шукайте timbreID на своїй сторінці) та створив деяке програмне забезпечення для використання в Pure Data. У кожній із ситуацій, де ви шукаєте конкретних подій, тож зробити автоматичну сегментацію шляхом виявлення настання було б хорошою ідеєю. Оскільки ви вже приймаєте STFT, для визначення настання не буде потрібно занадто багато додаткових робіт (подивіться на виявлення набору спектрального потоку). Структура системи може бути такою:

Навчання

  • Визначте відповідні характеристики (наприклад, нульова швидкість перетину, спектральний центроїд, MFCC)
  • Виявити напад
  • Обчисліть ці функції на вхідному аудіо (ваші записи жестами)
  • Зберігайте базу обчислень функцій. Вам потрібно буде визначити, чи це ситуація з навчанням під наглядом чи без нагляду. Наприклад, чи заздалегідь користувачі вказують, що оснащення - «звук 1», а хлопання - «звук 2», або ваша система намагається кластеризувати їх після тренування.

Класифікація

  • Визначте напад в режимі реального часу та обчисліть особливості вхідного аудіо
  • Використовуйте метрику відстані (евклідова відстань або інша відстань Lp), щоб зробити найближчу сусідку або K-найближчу класифікацію сусіда, щоб визначити "найближчий" звук з вашої бази даних

Цей документ про ідентифікацію ударних тембрів може бути корисним. У ньому викладено визначення можливих особливостей для обчислення вхідного звуку та методу класифікації автора. Це буде досить добре для ударних звуків, але може працювати не так, як для мови (декількох складів), у цьому випадку метод HMM був би більш підходящим. Аналогічно, точність виявлення вашої дії буде змінюватися в залежності від типів звуків, які ви шукаєте.

Якщо ви особливо стурбовані перемикачами та вимикачами світла, то приділіть деякий час, з'ясовуючи, які функції можуть точно розрізняти два звуки.


Я б визначив початок, виявивши раптові зміни вхідних аудіоданих. Це має спрацювати. Я розкриваю початок і кінець жестів, які потрібно зберегти.
bad_keypoints

Так, це в основному має працювати. Єдина причина, яку я запропонував Spectral Flux - це те, що ви все одно приймете STFT. Якщо ви очікуєте досить тихого середовища, то базовий поріг амплітуди повинен працювати досить добре.
greatscott
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.