Активное шумоподавление - PullRequest
       52

Активное шумоподавление

6 голосов
/ 27 ноября 2011

Я запрограммировал программу распознавания голоса, и у меня проблемы с микрофоном, который меня слышит, из-за компьютера, играющего музыку.Мне нужно программное обеспечение, которое может отфильтровывать звук, оставляя динамики от звука, поступающего в микрофон.

Есть ли программное обеспечение или компонент (для Delphi), который решит мою проблему?

Ответы [ 5 ]

7 голосов
/ 27 ноября 2011

Вам нужно захватить:

  1. выход компьютера
  2. микрофон.input

Затем вам нужно найти два параметра, в зависимости от вашего микрофона.задержка локации и звуковой системы.Эти два параметра являются n-задержкой и k-усилением.

Stream1[t+n]*k=Stream2[t]

Где t = время.Когда вы найдете этот параметр, тогда ваш результирующий поток только произнесет микрофон.ввод будет

Stream2[t]-Stream1[t+n]*k=MusicReductionStream[t]
6 голосов
/ 27 ноября 2011

Я думаю, что вы хотите сделать то, что шумоподавляющие микрофоны делают.Эти системы используют как минимум один дополнительный микрофон для расчета разницы между «окружающим шумом» и шумом, который направлен непосредственно на микрофон (речь, которую он должен зарегистрировать).Я не думаю, что вы можете надежно получить тот же эффект с помощью программного решения.

Первым шагом, очевидно, было бы отключить музыку: -)

5 голосов
/ 27 ноября 2011

Проверьте библиотеку AsioVST .

  • 100% код Delphi с открытым исходным кодом
  • Free
  • Очень полный
  • Активно (например, добавлена ​​поддержка xe2 / x64)

В разделе Examples\Plugins\Crosstalk Cancellation\ вы найдете исходный код плагина, который, вероятно, выполняет то, что вы ищете.

Screenshot

Волшебство происходит в DAV_DspCrosstalkCancellation.pas .

1 голос
/ 27 ноября 2011

Вам необходимо оценить импульсную характеристику динамика и комнаты и т. Д., Которые могут меняться в зависимости от точного расположения динамика и микрофона, а также размера и содержания комнаты и т. Д., А также узнать / оценить задержку системы.

Если человек или микрофон являются подвижными, импульсную реакцию и задержку необходимо постоянно переоценивать.

После того, как вы оценили импульсный отклик, вы можете сверить его с выходным сигналом и попытаться вычесть отсроченные версии результата из микрофонного входа, пока не сможете обнулить молчаливые части речевого ввода. Для оценки задержки может быть полезна взаимная корреляция.

1 голос
/ 27 ноября 2011

Я думаю, что препроцессор speex имеет функцию эхоподавления. Вам нужно будет передать ему аудиоданные, которые вы записали, и звук, который вы хотите отменить, и он попытается удалить его.

Основная проблема - выяснить, какой звук воспроизводит ваш компьютер. Не уверен, что для этого есть хороший API.

Он также имеет функцию шумоподавления и обнаружение голосовой активности. Вы можете скомпилировать его как dll, а затем написать заголовок delphi.

...