Создайте аудио фильтр в реальном времени для петли Alsa / Pulse - PullRequest
0 голосов
/ 22 мая 2018

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

План состоит в том, чтобы замкнуть петлю на входе микрофона через Alsa / Pulseaudio, применить узкополосный фильтр с подавлением шума с прямой связью (как фильтр LADSPA?), А затем вывести результат на наушники.

Проблема в том, что я не знаю, с чего начать для части фильтра: как мне подключить ее к Alsa / Pulseaudio?Есть ли какой-то C API, который можно использовать для создания пользовательского фильтра?

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Из debianuser на IRC, и у меня это работает.Замените на то, что ваша карта названа в / proc / asound / cards.Вы можете редактировать это имя в /etc/modprobe.d/alsa-base.conf или аналогичном в строке 'options snd-mycard id = "mycardname" enable = 1 ".

defaults.pcm.dmix.!rate 48000
defaults.pcm.dmix.!format S16_LE
pcm.multi {
    type multi
    slaves.a.pcm "dmix:RealCardName"
    slaves.a.channels 2
    slaves.b.pcm "dmix:Loopback"
    slaves.b.channels 2
    bindings.0 { slave a; channel 0; }
    bindings.1 { slave a; channel 1; }
    bindings.2 { slave b; channel 0; }
    bindings.3 { slave b; channel 1; }
}
pcm.both {
    type route
    slave.pcm "multi"
    ttable.0.0 1
    ttable.1.1 1
    ttable.0.2 1
    ttable.1.3 1
}
pcm.!default {
    type asym
    playback.pcm "plug:both"
    capture.pcm "plug:dsnoop:RealCardName"
}

pcm.nowplaying "plug:\"dsnoop:Loopback,1\""`
0 голосов
/ 22 мая 2018

1) Я рекомендую сделать это в Pulseaudio;перенаправление вывода ALSA через ваш фильтр будет более сложным.

2) Уже есть такие модули, как module-ladspa-sink для Pulseaudio, подробности, например, здесь .Модуль перенаправляет обработанный LADSPA звук на master, но, поскольку вам нужны и микрофонный вход, и звук компьютера, вам, возможно, придется использовать некоторые другие модули (например, комбинированный приемник, нулевой приемник в качестве виртуального выходного приемника) и / или pulseaudioкоманды loopback для перенаправления их обоих на разных наборах каналов в модуль LADSPA.

Возможно, вы также можете загрузить два модуля LADSPA, использовать один в качестве виртуального выхода, вход петлевого микрофона для другого и обрабатывать оба изодин плагин LADSPA - я не пробовал, но если он работает, он может быть проще.

3) Уже есть модули шумоподавления и эхоподавления для Pulseaudio, которые используются, например, в смартфонах на базев Linux;может быть, один из них достаточно хорош для ваших нужд.Google.

4) Если ничего не помогает, или если одних только фильтров LADSPA недостаточно, посмотрите на источник этого модуля (или других модулей Pulseaudio) и измените его соответствующим образом.

...