Менеджмент сессии аудиоустройств - Wireplumber

2023-03-06T23:42:47+05:00

linux

Скачиваем данный пакет, pipewire-media-session заменится на wireplumber.

sudo pacman -S wireplumber

После чего перезапускаем ПК

#  Изменить названия аудиоустройств

В терминале вводим

pw-cli list-objects Node

В данном примере возьму выход на наушники через jack микрофона Samson C01U Pro. Находим длинное имя для выхода (output) устройства и копируем его

........
id 32, type PipeWire:Interface:Node/3
 		object.serial = "58"
 		object.path = "alsa:pcm:3:front:3:playback"
 		factory.id = "18"
 		client.id = "35"
 		device.id = "48"
 		priority.session = "1009"
 		priority.driver = "1009"
 		node.description = "C01U Pro condenser microphone Аналоговый стерео"
 		node.name = "alsa_output.usb-Samson_Technologies_Samson_C01U_Pro_Mic-00.analog-stereo"
		node.nick = "Samson C01U Pro Mic"
 		media.class = "Audio/Sink"

То есть я копирую alsa_output.usb-Samson_Technologies_Samson_C01U_Pro_Mic-00.analog-stereo

И тут же ищем и копируем для входного (input) устройство

........
id 52, type PipeWire:Interface:Node/3
 		object.serial = "58"
 		object.path = "alsa:pcm:3:hw:3:capture"
 		factory.id = "18"
 		client.id = "35"
 		device.id = "48"
 		priority.session = "2000"
 		priority.driver = "2000"
 		node.description = "C01U Pro condenser microphone Моно"
 		node.name = "alsa_input.usb-Samson_Technologies_Samson_C01U_Pro_Mic-00.mono-fallback"
		node.nick = "Samson C01U Pro Mic"
 		media.class = "Audio/Source"

Здесь также, но я копирую alsa_input.usb-Samson_Technologies_Samson_C01U_Pro_Mic-00.mono-fallback

Создаём структуру папки

mkdir -p ~/.config/wireplumber/main.lua.d/

Создаём внутри main.lua.d наш первый конфиг чтобы переименовывать входной и выходное аудиоустройство в более понятном виде.

nvim ~/.config/wireplumber/main.lua.d/51-Samson_C01UPro-rename.lua

Пояснение:

В node.description указываем ваше укороченное имя, это название будет применятся на общих для аудиомикшерах программ таких как pavucontrol, pasystray, cli pulsemixer и т.д

А node.nick указываем то же самое но название но оно уже предназначено для применения наименования для профессиональных программ таких как patchbay, qpwgraph, QjackCtl и т.д

rule = {
  matches = {
    {
      { "node.name", "equals", "alsa_output.usb-Samson_Technologies_Samson_C01U_Pro_Mic-00.analog-stereo" },
    },
  },
  apply_properties = {
    ["node.description"] = "C01U Pro",
  },
}

table.insert(alsa_monitor.rules, rule)

rule = {
  matches = {
    {
      { "node.name", "equals", "alsa_input.usb-Samson_Technologies_Samson_C01U_Pro_Mic-00.mono-fallback" },
    },
  },
  apply_properties = {
    ["node.description"] = "C01U Pro",
	["node.nick"] = "C01U Pro"
  },
}

table.insert(alsa_monitor.rules, rule)

Сохраняем и перезагружаем pipewire или ребутимся

systemctl --user restart pipewire

После перезапуска в pavucontrol и Cli утилита pulsemixer будет показывать ваше укороченное название аудиоустройство которое вы указали

Для вывода из колонок (Speakers) находите тоже в node

pw-cli list-objects Node
		......
		node.description = "Встроенное аудио Аналоговый стерео"
 		node.name = "alsa_output.pci-0000_00_1b.0.analog-stereo"
 		node.nick = "ALC662 rev3 Analog"
 		media.class = "Audio/Sink"

Копирую alsa_output.pci-0000_00_1b.0.analog-stereo

nvim ~/.config/wireplumber/main.lua.d/51-Speakers-rename.lua
rule = {
  matches = {
    {
      { "node.name", "equals", "alsa_output.pci-0000_00_1b.0.analog-stereo" },
    },
  },
  apply_properties = {
    ["node.description"] = "Колонки",
	["node.nick"] = "Колонки"
  },
}

table.insert(alsa_monitor.rules, rule)

При перезагрузке pipewire вот что у меня получилось в pulsemixer image

#  Отключение ненужного выхода аудио HDMI GPU

В этот раз ищем не в узлах (Node) а в Device

pw-cli list-objects Device
.............
id 42, type PipeWire:Interface:Device/3
 		object.serial = "42"
 		factory.id = "14"
 		client.id = "32"
 		device.api = "alsa"
 		device.description = "Ellesmere HDMI Audio [Radeon RX 470/480 / 570/580/590]"
 		device.name = "alsa_card.pci-0000_03_00.1"
 		device.nick = "HDA ATI HDMI"
 		media.class = "Audio/Device"
..............

То есть копируем alsa_card.pci-0000_03_00.1

nvim ~/.config/wireplumber/main.lua.d/51-amd-disable.lua

Пояснение:

Под matches вместо node.name должно быть device.name

Под apply_properties вводите ["device.disabled"] = true это применяет отключение данного аудиоустройства которое вы выставили в matches

rule = {
  matches = {
    {
      { "device.name", "equals", "alsa_card.pci-0000_03_00.1" },
    },
  },
  apply_properties = {
    ["device.disabled"] = true,
  },
}

table.insert(alsa_monitor.rules, rule)

После перезагрузки pipewire в pavucontrol больше не будет появлятся ненужное аудио устройство image image