如何通过 ALSA 中的高通滤波器发送音频输出?

如何通过 ALSA 中的高通滤波器发送音频输出?

我住在复式公寓里,如果我的音乐中有低音,我的邻居就能听到。作为解决方案,我想配置 ALSA 以对通过扬声器(但不是耳机)发出的音频应用高通滤波器。我该如何实现这个目标?

答案1

这是我的相关部分~/.asoundrc。我的扬声器已连接到 USB 音频设备,该设备hw:3在 ALSA 中显示为。在我的个人设置中,已经有一个设备hw3mix,如上所述这里,它将多个客户端流混合到hw:3.其他选项也是可能的,如注释行所示:

pcm.hw3highpass {
    type ladspa
    slave.pcm "plug:hw3mix";
    # you can choose a different hardware device (no mixing) like this:
#    slave.pcm "plughw:0,0";
    # and you can even specify basic mixing in the same line:
#    slave.pcm "plug:dmix:0"

    # but note that the following doesn't work, we need 'plug' to
    # convert to/from floating point
#    slave.pcm "hw3mix";

    path "/usr/lib/ladspa";
    plugins [{
        label hpf
        input {
            controls [ 1000 ]
        }
    }]
    hint {
        show on
        description "Highpass filter for hw:3"
    } 
}

pcm.!default plug:hw3highpass

高通滤波器是一个拉斯帕插件(标签hpf)。其他插件可能对我的生活情况有用,例如添加压缩机

我调用了两次的该plug插件是一个有点神奇的插件,可以自动进行格式转换。它需要与需要浮点的 LADSPA 接口。您可以通过执行命令来查看过滤器链并观察正在完成浮点转换的事实aplay -v some.wav。如果从属定义plug:上没有前缀hw3mix,您会收到一条晦涩的错误消息“ALSA lib pcm_params.c:2162:(snd1_pcm_hw_refine_slave)从属 PCM 不可用”。如果没有plug:最后一行的默认别名,您会收到另一个晦涩的错误消息“aplay:set_params:1292:访问类型不可用”。耶Linux!

我问并回答我自己的问题是因为 ALSA 文档难以理解,而且我在网上找到的其他解决方案也不必要地复杂 - 要么使用数字id而不是labelLADSPA 插件部分;或定义两个额外的命名设备来执行手动浮动<->整数转换,而不是使用plug:此处所示的前缀;或者没有提到直接别名到设备的可能性plug:...,就像我在最后一行所做的那样。我惊讶地发现配置如此简单,一旦了解了基础知识,ALSA/LADSPA 就会变得多么有用和强大。

我找到了 Volker Schatz 教程“近距离观察 ALSA”弄清楚这些东西是必不可少的。显然,自他的教程编写以来,ALSA 已经发生了一些变化,例如他说他从未让 Dmix 工作过,并且他说不允许为带有参数的设备使用别名(我的pcm.default就是这样的别名)。

相关内容