A maioria dos kits GUI usa o mesmo backend PulseAudio. Use pactl
para escrever script de controle.
NAME
pactl - Control a running PulseAudio sound server
DESCRIPTION
pactl can be used to issue control commands to the PulseAudio sound server.
pactl only exposes a subset of the available operations. For the full set use the pacmd(1).
Origem: man pactl
-
Para verificar os dissipadores de saída disponíveis
$ pactl list short sinks 0 alsa_output.pci-0000_01_00.1.hdmi-stereo module-alsa-card.c s16le 2ch 44100Hz SUSPENDED 1 alsa_output.pci-0000_00_1b.0.analog-stereo module-alsa-card.c s16le 2ch 44100Hz SUSPENDED
-
Para verificar as fontes de entrada disponíveis
$ pactl list short sources 0 alsa_output.pci-0000_01_00.1.hdmi-stereo.monitor module-alsa-card.c s16le 2ch 44100Hz SUSPENDED 1 alsa_output.pci-0000_00_1b.0.analog-stereo.monitor module-alsa-card.c s16le 2ch 44100Hz SUSPENDED 2 alsa_input.pci-0000_00_1b.0.analog-stereo module-alsa-card.c s16le 2ch 44100Hz SUSPENDED
-
Para verificar o padrão
$ pactl info Server String: /run/user/1000/pulse/native Library Protocol Version: 30 Server Protocol Version: 30 Is Local: yes Client Index: 2 Tile Size: 65472 User Name: user Host Name: userpc Server Name: pulseaudio Server Version: 6.0 Default Sample Specification: s16le 2ch 44100Hz Default Channel Map: front-left,front-right Default Sink: alsa_output.pci-0000_00_1b.0.analog-stereo Default Source: alsa_input.pci-0000_00_1b.0.analog-stereo
-
Para definir o padrão
pactl set-default-source id-or-name pactl set-default-sink id-or-name
Exemplo:
pactl set-default-source alsa_input.pci-0000_00_1b.0.analog-stereo pactl set-default-sink alsa_output.pci-0000_00_1b.0.analog-stereo
ou:
pactl set-default-source 2 pactl set-default-sink 1
Notas:
-
Isso afetará apenas novos streams, você tem que mover os streams atuais, então use:
pacmd move-sink-input <stream-id> <sink-id/name>
Bom exemplo para copiar: Mudando para Áudio HDMI quando o HDMI é conectado a um laptop (14.04)
-
Algumas placas têm várias portas selecionáveis. Pode ser a que você deseja que não seja o padrão.
Verifique as portas disponíveis:
$pactl list sinks Sink #1 State: RUNNING Name: alsa_output.pci-0000_00_1b.0.analog-stereo Description: Built-in Audio Analog Stereo Driver: module-alsa-card.c ... Ports: analog-output-speaker: Speakers (priority: 10000, not available) analog-output-headphones: Headphones (priority: 9000, available) Active Port: analog-output-headphones Formats: pcm ...
Para definir:
pactl set-sink-port <sink-id/name> <port-name>
Exemplo:
pactl set-sink-port 1 analog-output-headphones
Para alterar o canal principal
Após este tutorial , você pode definir o canal mestre usando qdbus
da seguinte forma:
-
Encontre o Master Mixer para cada um dos seus dispositivos com o seguinte comando. Primeiro, defina manualmente o canal mestre para o que deseja verificar e, em seguida, execute o comando:
qdbus org.kde.kmix /Mixers org.kde.KMix.MixSet.currentMasterControl
-
Usando o resultado desse comando e o coletor de áudio que você deseja controlar, use a seguinte sintaxe para alterar seu canal mestre:
qdbus org.kde.kmix /Mixers org.kde.KMix.MixSet.setCurrentMaster "[insert Mixer]" "[insert sink]" 2>&1 > /dev/null
-
No final, o script para mudar todo o áudio atual para um novo canal, defini-lo como o padrão e configurá-lo como o canal mestre se parece com o seguinte:
#!/bin/bash pactl set-default-sink alsa_output.usb-Logitech_Logitech_G930_Headset-00-Headset.analog-stereo pactl set-default-source alsa_input.usb-Logitech_Logitech_G930_Headset-00-Headset.analog-mono INPUTS=($(pacmd list-sink-inputs | grep index | awk '{print $2}')) for i in ${INPUTS[*]}; do pacmd move-sink-input $i alsa_output.usb-Logitech_Logitech_G930_Headset-00-Headset.analog-stereo &> /dev/null; done qdbus org.kde.kmix /Mixers org.kde.KMix.MixSet.setCurrentMaster "PulseAudio::Playback_Devices=:1" "alsa_output.usb-Logitech_Logitech_G930_Headset-00-Headset.analog-stereo" 2>&1 > /dev/null