首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为Alsa/脉冲回送创建一个实时音频过滤器

为Alsa/脉冲回送创建一个实时音频过滤器
EN

Stack Overflow用户
提问于 2018-05-22 00:33:59
回答 2查看 4.4K关注 0票数 0

我想复制使用常规耳机和Linux计算机的有源噪声控制耳机的效果,以便实时消除任何环境噪声(而不仅仅是清除背景噪声中的声音输入)。

该方案是通过Alsa/Pulse音频将麦克风输入回送,应用前馈窄带噪声抵消滤波器(作为LADSPA滤波器?),然后将结果输出到耳机。

问题是,我不知道从哪里开始对过滤器部分:我应该如何连接到阿尔萨/脉冲音频?是否有某种可以用来创建自定义过滤器的C API?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-22 06:51:19

1)我建议在Pulse音频中这样做;通过过滤器重定向ALSA输出将更加困难。

2)脉冲音频已有module-ladspa-sink等模块,详细信息如这里。该模块将LADSPA处理过的声音转发给master,但是由于您需要麦克风输入和计算机声音输出,您可能需要使用一些其他模块(例如组合接收器、空接收器作为虚拟输出接收器)和/或脉冲音频回送命令,以便在不同的通道上将这两个模块转发到LADSPA模块。

也许您还可以加载两个LADSPA模块,使用一个模块作为虚拟输出,将麦克风输入回另一个模块,并从一个LADSPA插件中处理这两个模块--我没有尝试过,但是如果它能工作,它可能会更简单。

3)脉冲音频中已经有一些噪声消除和回波消除模块,例如在基于Linux的智能手机中,也许其中一个模块足够满足您的需要。谷歌。

4)如果所有其他模块都失败了,或者LADSPA过滤器本身是不够的,请查看该模块的来源 (或其他脉冲音频模块),并对其进行相应的修改。

票数 1
EN

Stack Overflow用户

发布于 2019-03-02 07:15:21

从IRC的debianuser那里得到的,对我来说很管用。用/proc/ named /卡中的任何卡替换。您可以在/etc/modprobe.d/alsa-base.conf中编辑该名称,或者在‘id="mycardname“enable=1’行中编辑该名称。

代码语言:javascript
复制
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\""`
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50539766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档