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

2023-03-06

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/wireplumber.conf.d/

И создаём внутри него файл ~/.config/wireplumber/main.lua.d/51-Samson_C01UPro-rename.conf внутри которого будет объявлено входное и выходное аудиоустройство в более понятном виде.

Пояснение:

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

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

monitor.alsa.rules = [
   {
      matches = [
         {
            node.name = "alsa_output.usb-Samson_Technologies_Samson_C01U_Pro_Mic-00.analog-stereo"
         }
      ]
      actions = {
         update-props = {
            node.description = "C01U Pro",
            node.nick = "C01U Pro",
         }
      }
   }
   {
      matches = [
         {
            node.name = "alsa_input.usb-Samson_Technologies_Samson_C01U_Pro_Mic-00.mono-fallback"
         }
      ]
      actions = {
         update-props = {
            node.description = "C01U Pro",
            node.nick = "C01U Pro",
         }
      }
   }
]

Сохраняем и перезагружаем 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

Создаём файл ~/.config/wireplumber/wireplumber.conf.d/51-Speakers-rename.conf с содержимым внутри

Информация: Мои колонки иногда могут иметь другое название node, то есть в конфиге записываю 2 узла в качестве применения свойств переименования

monitor.alsa.rules = [
   {
      matches = [
         {
            node.name = "alsa_output.pci-0000_00_1b.0.analog-stereo.2"
         }
      ]
      actions = {
         update-props = {
            node.description = "Колонки",
            node.nick = "Колонки",
         }
      }
   }
   {
      matches = [
         {
            node.name = "alsa_output.pci-0000_00_1b.0.analog-stereo"
         }
      ]
      actions = {
         update-props = {
            node.description = "Колонки",
            node.nick = "Колонки",
         }
      }

   }
]

При перезагрузке 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

Создаём файл ~/.config/wireplumber/wireplumber.conf.d/51-amd-disable.conf с содержимым внутри

Пояснение:

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

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

monitor.alsa.rules = [
   {
      matches = [
         {
            device.name = "alsa_card.pci-0000_03_00.1"
         },
         {
            device.name = "alsa_output.pci-0000_03_00.1.hdmi-stereo-extra5"
         }
      ]
      actions = {
         update-props = {
            device.disabled = true
         }
      }
   }
]

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