6
22
2024
12

使用 PipeWire 实现自动应用均衡器

本文来自依云's Blog,转载请注明。

之前我写过一篇文章,讲述我使用 EasyEffects 的均衡器来调整 Bose 音箱的音效。最近读者 RNE 留言说可以直接通过 PipeWire 实现,于是前几天我实现了一下。

先说一下换了之后的体验。相比于 EasyEffects,使用 PipeWire 实现此功能获得了以下好处:

  • 少用一个软件(虽然并没有多大)。
  • 不依赖图形界面。EasyEffects 没有图形界面是启动不了的。
  • 占用内存少。EasyEffects 有时候会占用很多内存,不知道是什么问题。
  • 自己实现的切换逻辑,更符合自己的需求。EasyEffects 只能针对指定设备加载指定的配置,不能指定未知设备加载什么配置。因此,当我的内置扬声器名称在「alsa_output.pci-0000_00_1f.3.analog-stereo」、「alsa_output.pci-0000_00_1f.3.7.analog-stereo」或者「alsa_output.pci-0000_00_1f.3.13.analog-stereo」等之间变化时,我需要一个个名称地指定要加载的配置。
  • 只要打开 pavucontrol 就能确认均衡器是否被应用了。EasyEffects 需要按两下Shift-Tab和空格(或者找找鼠标)来切换界面。

缺点嘛,就是我偶尔使用的「自动增益」功能没啦。不过自动增益的效果并不太好,我都是手动按需开关的。没了就没了吧。

配置方法

首先要定义均衡器。创建「~/.config/pipewire/pipewire.conf.d/bose-eq.conf」文件,按《Linux好声音(干净的均衡器)》一文的方式把均衡器定义写进去就好了。我的文件见 GitHub

然后需要在合适的时候使用这个均衡器。实际上上述配置加载之后,PipeWire 里就会多出来一对名叫「Bose Equalizer Sink」的设备,一个 source 一个 sink。把 source 接到音箱,播放声音的程序接到 sink,就用上了。别问我为什么 source 的名字也是「Sink」,我不会分开定义它们的名字……

自动化应用使用的是 WirePlumber 脚本。它应该放在「~/.local/share/wireplumber/scripts」里,但是我为了方便放到 dotconfig 仓库里管理,在这里放了个到「~/.config/wireplumber/scripts」的软链接。脚本干的事情很简单:在选择输出设备的时候,看看当前默认设备是不是 Bose 音箱;如果是,就选择之前定义的「Bose Equalizer Sink」作为输出目标。不过因为文档匮乏,为了干成这件事花了我不少精力,翻看了不少 WirePlumber 自带脚本和源码。最终的脚本也在 GitHub 上

结语

PipeWire 挺强大的,就是文档太「瘦弱」啦。能用脚本配置的软件都很棒~

再次感谢读者 RNE 的留言~

Category: Linux | Tags: linux 音频 外部设备 lua | Read Count: 3407
丛明 说:
Aug 08, 2024 01:36:35 AM

我也遇到了问题,请问,github的地址是多少呢?感谢

Avatar_small
依云 说:
Aug 08, 2024 09:58:01 AM

啊?文中链接了呀。带下划线的粗体字都是超链接。

丛明 说:
Aug 08, 2024 06:05:02 PM

麻烦加我一下微信,26917235,我用您这个脚本,提示attempt to call a nil value(field open_topic)

Avatar_small
依云 说:
Aug 08, 2024 08:46:26 PM

微信在 Linux 上太难用了。用 Telegram(@lilydjwg) / Matrix(@lilydjwg:mozilla.org)吧。

丛明 说:
Aug 08, 2024 11:20:34 PM

好的,那我注册一个账号,然后添加你好友

丛明 说:
Aug 09, 2024 11:23:10 AM

我下载了Telegram,无法注册账号

Avatar_small
依云 说:
Aug 09, 2024 01:17:33 PM

现在 Telegram 的反垃圾是比较狠……注册个 Matrix 账号吧,用你喜欢的服务器就行。

丛明 说:
Aug 09, 2024 02:18:24 PM

我知道问题了,我客户的机器是wireplumber0.4.17版本,您这个脚本应该是0.5.x的版本,一些函数不支持的原因

Avatar_small
依云 说:
Aug 09, 2024 08:59:48 PM

哦,原来如此。我现在用的是 0.5.5。

Coelacanthus 说:
Oct 02, 2024 12:52:06 AM

上游合并了一个 module 可以直接加载 Parametric EQ 格式的均衡器配置文件,不过还没发版本。

https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/68ed40570de272bd78c1ecb23c4cc4bdf911c0d3

Coelacanthus 说:
Oct 02, 2024 01:10:12 AM

另外可以看看 Wireplumber 的 Smart Filter 机制

https://www.collabora.com/news-and-blog/blog/2024/06/26/smart-audio-filters-with-wireplumber-0.5/

Coelacanthus 说:
Oct 02, 2024 02:43:44 AM

虽然文档没直说,但是 filter.smart.target 的 node.name 是可以用正则表达式的


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

Mastodon | Theme: Aeros 2.0 by TheBuckmaker.com