Как объединить приемники PulseAudio в группы?

Как объединить приемники PulseAudio в группы?

Я хотел бы настроить некий виртуальный приемник или группу источников, которые позволят мне изменить приемник для нескольких активных входных потоков. До сих пор я использовал следующий скрипт, чтобы установить все входные потоки на источник по умолчанию:

#!/bin/bash
pacmd set-default-sink "$1"
pacmd list-sink-inputs | grep index | while read input
do
  pacmd move-sink-input "${input##* }" "$1"
done

Или переместить входы только в последний приемник по умолчанию:

#!/bin/bash
pacmd list-sinks |
grep -e "* index:" |
tr -dc "[:digit:]\n" |
{
  read old_sink
  pacmd set-default-sink "$1"
  pacmd list-sink-inputs  |
  grep -e "index:" -e "sink:" |
  grep -B 1 -e "sink: $old_sink" |
  grep -e "index:" |
  tr -dc "[:digit:]\n" |
  while read i
  do
    pacmd move-sink-input "$i" "$1"
  done
}

Однако это не соответствует моим потребностям. Подобные решения предполагают, что я хочу, чтобы все входные потоки, указывающие на один целевой приемник, переместились на другой. Мне бы хотелось получить решение, которое обеспечивает следующее поведение:

# previous state
sourceA -> (virtualSink -> sinkA)
sourceB -> (virtualSink -> sinkA)
sourceC -> sinkA

$ set-sink (virtualSink -> sinkB)
sourceA -> (virtualSink -> sinkB)
sourceB -> (virtualSink -> sinkB)
sourceC -> sinkA

В идеале set-sinkследовало бы переместить все активные входные потоки в новый приемник, но итерация по входным потокам, указывающим на него, virtualSinkбыла бы вполне приемлемой.

Связанный контент