web-dev-qa-db-fra.com

Raccourci pour basculer entre la sortie stéréo analogique et la sortie audio HDMI

Pour basculer sur la sortie audio HDMI (du moniteur) et revenir à la sortie audio normale de la prise audio du système (pour les écouteurs, mon moniteur n'ayant pas de sortie audio), je me trouve à ouvrir les préférences de son et à sélectionner le bon canal à chaque fois. Est-il possible de créer un bouton bascule dans le panneau ou d’attribuer une touche de raccourci à une bascule puisque je fais le changement si souvent?.

:aplay -l 
**** List of PLAYBACK Hardware Devices ****
card 0: Intel [HDA Intel], device 0: STAC92xx Analog [STAC92xx Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: Intel [HDA Intel], device 3: HDMI 0 [HDMI 0]
  Subdevices: 0/1
  Subdevice #0: subdevice #0
card 0: Intel [HDA Intel], device 7: STAC92xx Digital [STAC92xx Digital]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

enter image description here

18
iJeeves

Avec pulseaudio , nous sommes en mesure de sélectionner le récepteur de sortie à partir de la ligne de commande:

pacmd set-default-sink "SINKNAME"

Cette commande peut être utilisée dans un lanceur, un script ou même assignée à un raccourci clavier pour une commutation rapide entre les différents puits. Veuillez remplacer "SINKNAME" par le nom ou le numéro de l'évier de votre choix. Une liste des éviers connus avec leurs numéros et noms associés est donnée par la commande:

pacmd list-sinks

Remarque: La modification du récepteur de sortie via l'interface de ligne de commande ne prend effet que si la lecture d'un périphérique cible par flux est désactivée. Cela peut être fait en modifiant la ligne correspondante dans /etc/Pulse/default.pa en:

load-module module-stream-restore restore_device=false

Alternativement, nous pourrions utiliser pulseaudio pour transmettre simultanément le son au périphérique audio interne et au périphérique HDMI en exécutant paprefs avec la possibilité d'ajouter un périphérique de sortie virtuel:

paprefs

10
Takkat

J'ai trouvé cela très agaçant moi-même et j'ai écrit un script pour basculer l'affichage:

#!/bin/bash

CURRENT_PROFILE=$(pacmd list-cards | grep "active profile" | cut -d ' ' -f 3-)

if [ "$CURRENT_PROFILE" = "<output:hdmi-stereo+input:analog-stereo>" ] ; then
        pacmd set-card-profile 0 "output:analog-stereo+input:analog-stereo"
else 
        pacmd set-card-profile 0 "output:hdmi-stereo+input:analog-stereo"        
fi

puis lié une touche inutilisée de mon clavier pour l'exécuter (voir Comment lier des commandes personnalisées à des raccourcis clavier? )

7
user829996

Encore un autre script Switcher Sink

testé sur Ubuntu 16.04


Mais celui-ci vous permet de ne changer que l'audio de l'application que vous voulez.

UTILISATION: Concentrez-vous sur l'application pour laquelle vous souhaitez modifier le récepteur et exécutez ce script. C'est tout!!!

Ce script détecte l’application sélectionnée, trouve tous les fichiers audio qui y sont lus et les fait basculer vers le prochain collecteur disponible.

https://Gist.github.com/madacol/1a0d8569166886d2d98f073f7f5c5fe

Expliquer le script

Nous devons trouver le PID de l'application mise au point

Mais d'abord nous avons besoin du xid

xprop -root _NET_ACTIVE_WINDOW 

Puis insérez-le ici $xid pour obtenir le pid de l'application

xprop -id $xid _NET_WM_PID

Maintenant, nous devons trouver les entrées-puits associées à ce PID

Commençons par linéariser le résultat de la commande pacmd list-sink-inputs pour répertorier une entrée-récepteur par ligne, en affichant son index, son récepteur et son pid sur la même ligne.

pacmd list-sink-inputs | grep -E 'index:|sink:|process.id' | tr '\n' ' ' | tr -d '"' | sed -e 's/index:/\n/g' | tail -n +2

analysons-le étape par étape:

grep -E 'index:|sink:|process.id conserve uniquement les lignes qui contiennent index:, sink: ou process.id

tr '\n' ' ' rejoint toutes les lignes

tr -d '"' supprime tous les ". Nécessaire pour obtenir le pid sans guillemets

sed -e 's/index:/\n/g' remplace toutes les occurrences de index: par un nouveau caractère de ligne \n

tail -n +2 supprime la première ligne car elle est vide

Et le résultat ressemble à ceci:

  180 sink: 0 <alsa_output.pci-0000_00_00.1.hdmi-stereo-extra1> application.process.id = 3521
  181 sink: 1 <alsa_output.pci-0000_00_01.0.analog-stereo> application.process.id = 2733
  182 sink: 0 <alsa_output.pci-0000_00_00.1.hdmi-stereo-extra1> application.process.id = 13752

Analysons une ligne pour comprendre ce que cela signifie:

  # 182 sink: 0 <alsa_output.pci-0000_00_00.1.hdmi-stereo-extra1> application.process.id = 13752

182 est l'index de l'entrée du récepteur, 0 est l'index du récepteur, et 13752 à la fin, est le pid de l'application d'appartenance.

Ensuite, nous parcourons chaque ligne

... | while IFS= read -r line || [ -n "$line" ]; do
  sink_input_pid=$(echo $line | awk '{print $NF}')

Et enfin, ne filtrez que le pid de l'entrée du récepteur correspondant à celui de l'application ciblée

  if [ $sink_input_pid = $app_pid ]; then

Extraction de données

Avec awk nous pouvons obtenir les éléments dont nous avons besoin

sink_input_index=$(echo $sink_input | awk '{print $1}')
current_sink_index=$(echo $sink_input | awk '{print $3}')

Obtenez le nombre de puits, pour savoir quand la rotation des puits doit recommencer à 0.

sink_list_size=${#sink_list_array[@]}

Pour trouver le prochain puits, nous devons parcourir la liste des puits, savoir lequel correspond current_sink_index et connaître l’indice du prochain puits.

i=0
for sink in "${sink_list_array[@]}"; do
  i=$((($i+1)%sink_list_size))  # i++ mod(#sinks)
  if [ $sink = $current_sink_index ]; then
    next_sink_index=${sink_list_array[i]}
    break
  fi
done

Et finalement, nous déplaçons l'entrée-récepteur pour jouer dans next_sink_index

pacmd move-sink-input $sink_input_index $next_sink_index

Note sur Ubuntu 16.04:

Lors de la configuration de la touche de raccourci, je ne pouvais pas la faire fonctionner avec le gestionnaire de raccourcis d'ubuntu. Donc je devais installer compizconfig-settings-manager

Sudo apt-get install compizconfig-settings-manager
2
Madacol

Sur la base de nombreuses réponses précédentes, j'ai écrit un script qui définit le récepteur de lecture en alternance entre ceux disponibles.

La meilleure façon de l'utiliser consiste à créer un raccourci clavier pour l'exécuter. Ainsi, chaque fois que vous appuierez sur cette combinaison de touches, l'audio sera redirigé vers le prochain évier disponible.

Le code est disponible ici: https://Gist.github.com/germank/7fa2fb07d45a838bf890addadd8bea8c

1
GermanK

Puisqu'il n'y a qu'une seule carte son visible dans la capture d'écran, je pense que le sortie de cette carte son devrait être commuté.

Par exemple: j'ai un ordinateur portable avec une carte son intégrée, mais il possède une sortie numérique (SPDIF) lorsqu'il est ancré.

Donc, ce que je voulais faire est de changer la sortie active ou "Profil" dans pulseaudio.

J'ai trouvé les commandes qui font exactement cela:

pacmd set-card-profile 0 output:analog-stereo
pacmd set-card-profile 0 output:iec958-stereo+input:analog-stereo

Ce que j'ai fait pour obtenir les noms corrects pour le réglage de sortie souhaité - ici, sortie numérique, mais entrée (micro) analogique - était:

pacmd list | grep output
1
ritterkeks

Si vous utilisez Gnome Shell au lieu de Unity, vous pouvez installer l’extension ci-dessous. Vous pourrez alors passer du raccourci de volume dans le panneau supérieur. https://extensions.gnome.org/extension/142/output-device-chooser-on-volume-menu/

1
rubadubdub

J'ai aussi essayé de trouver une solution à ce problème. Depuis Ubuntu 11.04, cela ne semble pas être possible directement. J'ai seulement trouvé dans ce guide l'ajout des sorties HDMI et Analog en tant que sorties séparées. Par conséquent, pacmd affiche maintenant 3 puits. Ensuite, il est possible de basculer entre les éviers en utilisant les commandes ci-dessus. ( voir aussi )

Mais apparemment, Ubuntu 11.11 obtiendra un système de détection de jacks PulseAudio. Selon le site Web ci-dessous, David Henningsson a codé une détection via udev afin que l'audio Pulse soit automatiquement basculé sur la dernière sortie ajoutée, y compris la commutation entre différents profils de la même carte son (comme c'est le cas avec votre et votre configuration). (voir ici )

J'espère donc que cela fonctionnera lorsque j'essayerai la version finale vendredi prochain.

1
Graipher

Une alternative à indicateur de changement de son (qui nécessite l'ajout d'un PPA) consiste à créer une commande (ou un script) et à l'appeler avec un raccourci:

Dans mon cas, il y avait hdmi-stereo-extra1+input profile, donc dans une ligne serait:

[[ $(pacmd list-cards | grep "active profile" | cut -d " " -f 3-) = "<output:hdmi-stereo-extra1+input:analog-stereo>" ]] && \
     pacmd set-card-profile 0 "output:analog-stereo+input:analog-stereo" || \
     pacmd set-card-profile 0 "output:hdmi-stereo-extra1+input:analog-stereo"

Vous pouvez utiliser un raccourci personnalisé (gnome-control-center keyboard) pour l'exécuter avec bash -c (vous avertira en cas de conflit avec un autre raccourci):

screenshot

screenshot

J'utilise:

  • Super + Alt + o: Bascule la sortie entre casque et HDMI.
  • Super + Alt + Up: Vol Up
  • Super + Alt + Down: Vol Down

Vous pouvez également ajouter un alias à votre .bashrc.

Testé sur Ubuntu 16.04 et 18.04


Si vous n'acceptez pas le comportement précédent d'un script, j'ai apporté quelques modifications en fonction de la réponse de @ user829996:

#!/bin/bash
set -euo pipefail # strict mode

activeProfile() { pacmd list-cards | grep "active profile" | cut -d " " -f 3-; }
CURRENT_PROFILE="$(eval activeProfile)"

# If it doesn't work run  pacmd list-cards  and try the other outputs from profile section
ANALOG_PROFILE="output:analog-stereo+input:analog-stereo"
HDMI_PROFILE="output:hdmi-stereo-extra1+input:analog-stereo"

if [ "$CURRENT_PROFILE" = "<output:hdmi-stereo-extra1+input:analog-stereo>" ] ; then
  pacmd set-card-profile 0 "$ANALOG_PROFILE"
else
    pacmd set-card-profile 0 "$HDMI_PROFILE"
fi

activeProfile
0
Pablo Bianchi

Est-il possible de créer un bouton bascule dans le panneau?

J'ai écrit un applet indicateur qui vous permet de changer la sortie audio.

0
Lukas

Dans mon cas, les options analogiques n'étaient pas dans la liste. Installez pavucontrol: Sudo apt install pavucontrol

Pourrait résoudre le problème, en lançant l'application:

  1. Lancez l'application via un terminal en entrant: pavucontrol (enter)
  2. Allez dans l'onglet 'Configuration'.
  3. Sélectionnez le profil de sortie stéréo analogique dans Intern Sound

enter image description here

Maintenant, je pourrais ici sonner et sélectionner différents profils (sous Linux Mint):

enter image description here

0
danger89