Changer de sortie 'pulseaudio' en ligne de commande mais facilement
Table of contents
Problématique
J'ai souvent besoin de changer sur quel matériel je veux que le son de mon ordinateur soit joué. En général, j'ai le choix entre la carte son intégrée à mon laptop, la carte son USB de meilleur qualité, et des enceintes branchées sur un ordinateur distant configuré pour accepter les connections 'pulseaudio'
Pulseaudio fournit un outil en ligne de commande: 'pacmd' mais il n'est pas pratique à utiliser. Voila un petit script qui se charge de lister les sorties audio disponibles et de choisir celle à utiliser par défaut. En bonus, il indique aussi à 'pulseaudio' de changer la sortie des applications en cours de lecture.
Script
#!/usr/bin/env python
import sys
import subprocess
default_index = None
current_sink = None
outputs = {}
sinks, _ = subprocess.Popen('pacmd list-sinks', shell=True,
stdout=subprocess.PIPE).communicate()
for line in sinks.split('\n'):
if line.startswith(' index'):
index = line.split(':')[1].strip()
current_index = index
if line.startswith(' * index'):
index = line.split(':')[1].strip()
default_index = index
current_index = index
if line.startswith("\tname:"):
name = line.split(':')[1].strip()
if current_index:
outputs[current_index] = name
to_move = set()
inputs, _ = subprocess.Popen('pacmd list-sink-inputs', shell=True,
stdout=subprocess.PIPE).communicate()
for line in inputs.split('\n'):
if line.startswith(' index'):
index = line.split(':')[1].strip()
to_move.add(index)
if len(sys.argv) > 1:
selected = sys.argv[1].lower()
if selected not in outputs.keys():
for index, output in outputs.items():
if selected in output.lower():
selected = index
break
subprocess.call(["pacmd", "set-default-sink", selected])
for input in to_move:
subprocess.call(["pacmd", "move-sink-input", input, selected])
else:
for index, output in outputs.items():
print "%s %s %s" % (index, output,
"SELECTED" if index == default_index else "")
Utilisation
Lister les sorties
jeansch@blackpage:~/tmp (0) % sso
1 <alsa_output.pci-0000_00_1b.0.analog-stereo>
32 <tunnel.hop.local.alsa_output.pci-0000_00_1b.0.analog-stereo>
33 <alsa_output.usb-Focusrite_Scarlett_2i2_USB-00-USB.analog-stereo> SELECTED
Choisir une sortie par son numéro
jeansch@blackpage:~/tmp (0) % sso 33
Choisir une sortie par son nom
jeansch@blackpage:~/tmp (0) % sso focus