web-dev-qa-db-fra.com

Périphérique de sortie audio, commutateur rapide?

Selon la situation, j'utilise mes haut-parleurs ou mon casque pour la sortie audio. Étant donné que mon casque est un casque USB, il se comporte comme son propre périphérique audio.

Actuellement, je bascule entre les périphériques de sortie audio en cliquant sur l'icône du haut-parleur dans le bac en haut à droite, où je sélectionne Paramètres de son, passe à l'onglet Sortie et choisit le périphérique que je veux.

Ce que je me demande, c'est s'il existe un moyen plus simple/plus rapide de basculer dans mon casque USB. Peut-être une icône de plateau dédié, un mappage de clé, ou autre

J'utilise Ubuntu 10.04 avec le bureau Gnome par défaut.

19
andol

Pour modifier le périphérique de sortie audio par défaut à partir de la ligne de commande, vous pouvez utiliser l'utilitaire de ligne de commande pacmdPulse Audio.

J'ai trouvé le besoin de faire la même chose aujourd'hui, en voulant basculer entre un casque et des haut-parleurs, tous deux connectés à des cartes son séparées. Voici le script Shell que j'ai écrit pour le faire:

#!/usr/bin/env bash

sinks=($(pacmd list-sinks | grep index | \
    awk '{ if ($1 == "*") print "1",$3; else print "0",$2 }'))
inputs=($(pacmd list-sink-inputs | grep index | awk '{print $2}'))

[[ ${sinks[0]} = 0 ]] && swap=${sinks[1]} || swap=${sinks[3]}

pacmd set-default-sink $swap &> /dev/null
for i in ${inputs[*]}; do pacmd move-sink-input $i $swap &> /dev/null; done

Remarques:

  • Ceci permute entre les deux premiers périphériques de sortie audio répertoriés par l'utilitaire pacmdname__. Si vous avez plus de deux périphériques audio et souhaitez en changer, vous devez remplacer la logique de la ligne 7 par certaines conditions.
  • Le simple fait d'échanger le périphérique récepteur par défaut ne fait rien pour les applications en cours d'exécution - elles continueront à sortir vers le périphérique précédent. Ce script déplace également la destination du récepteur pour toutes les entrées existantes. C'est-à-dire que si vous exécutez ce script avec de la musique en lecture sur un périphérique, il basculera instantanément sur l'autre. Si vous souhaitez que les applications existantes continuent sur le périphérique précédent, commentez la dernière ligne (et la ligne 5 si vous le souhaitez).
11
Andrew

Eh bien, vous pouvez installer pavucontrol, il affiche les applications avec la sélection du périphérique audio sur le premier onglet, cela vous épargnera quelques efforts. Mais ce que vous voulez vraiment, je pense, c'est marquer votre casque USB comme périphérique par défaut, puis chaque fois que vous le branchez, tout le son y sera redirigé, et lorsque vous le déconnectez, il revient aux haut-parleurs. Sans effort, vraiment.

7
vava

Bien sûr, le changement de périphérique à l'aide de l'applet fonctionne également très bien. Mais ce qui est bien avec l’écriture d’un script, c’est que c’est super rapide. Je mets le mien par exemple sur le raccourci clavier alt + s. Ainsi, lorsque je souhaite passer du casque aux haut-parleurs, il suffit d'appuyer sur alt + s.

En tous cas. Andrew a dit:

Si vous avez plus de deux périphériques audio et souhaitez en changer, vous devez remplacer la logique de la ligne 7 par certaines conditions.

C'est ce que j'ai fait. Je le partage, au cas où quelqu'un aurait des problèmes avec:

#!/usr/bin/env bash

#sinks=($(pacmd list-sinks | grep index | \
#    awk '{ if ($1 == "*") print "1",$3; else print "0",$2 }'))
sinks=($(pacmd list-sinks | grep index | \
    awk '{ if ($1 == "*") print "1"; else print "0" }'))
inputs=($(pacmd list-sink-inputs | grep index | awk '{print $2}'))

#find active sink
active=0
for i in ${sinks[*]}
do
    if [ $i -eq 0 ]
        then active=$((active+1))
        else break
    fi
done

#switch to next sink
swap=$(((active+1)%${#sinks[@]}))

pacmd set-default-sink $swap &> /dev/null
for i in ${inputs[*]}; do pacmd move-sink-input $i $swap &> /dev/null; done

Ce que j'ai fait différemment, c'est a) trouver le puits actif dans une boucle for. Et b) passer au prochain puits en augmentant l'index de 1. Ensuite, je module le résultat en fonction du nombre de puits. Cela assure que par exemple lorsqu’il ya 3 éviers, (2 + 1)% 3 = 0. Ainsi, à partir de l'indice de puits 2, nous passerions à l'indice de puits 0.

De cette façon, le commutateur permet de se déplacer vers le haut à travers les éviers disponibles.

3
traumtaenzer

La question est assez ancienne mais ma réponse pourrait quand même être utile aux utilisateurs de GNOME 2. J'ai utilisé PulseAudio Mixer Applet pour le problème exact décrit ici. Vous pouvez modifier les périphériques d'entrée et de sortie directement dans le menu du panneau. C'est le moyen le plus pratique que j'ai trouvé.

3
dAnjou

Merci pour les scripts! J'ai ajouté une partie pour l'entrée (microphone) également au cas où quelqu'un voudrait l'utiliser:

while read line ; do
  case $line in 
    *\*\ index*) x=1 ;;
    index*) x=0 ;;
    name*) 
      source=$(echo $line | sed -e "s/.*<//;s/>.*//")
      if [[ $x = "0" ]] ; then
        pacmd set-default-source $source &> /dev/null
      fi ;;
  esac
done < <(pacmd list-sources | grep -e alsa_input -e index)
2
Subbeh

Pour parcourir votre liste de périphériques audio, utilisez le script suivant:

#!/bin/bash

declare -i sinks=(`pacmd list-sinks | sed -n -e 's/\**[[:space:]]index:[[:space:]]\([[:digit:]]\)/\1/p'`)
declare -i sinks_count=${#sinks[*]}
declare -i active_sink_index=`pacmd list-sinks | sed -n -e 's/\*[[:space:]]index:[[:space:]]\([[:digit:]]\)/\1/p'`
declare -i next_sink_index=${sinks[0]}

#find the next sink (not always the next index number)
declare -i ord=0
while [ $ord -lt $sinks_count ];
do
echo ${sinks[$ord]}
if [ ${sinks[$ord]} -gt $active_sink_index ] ; then
    next_sink_index=${sinks[$ord]}
    break
fi
let ord++
done

#change the default sink
pacmd "set-default-sink ${next_sink_index}"

#move all inputs to the new sink
for app in $(pacmd list-sink-inputs | sed -n -e 's/index:[[:space:]]\([[:digit:]]\)/\1/p');
do
pacmd "move-sink-input $app $next_sink_index"
done

#display notification
declare -i ndx=0
pacmd list-sinks | sed -n -e 's/device.description[[:space:]]=[[:space:]]"\(.*\)"/\1/p' | while read line;
do
if [ $(( $ord % $sinks_count )) -eq $ndx ] ; then
    notify-send -i notification-audio-volume-high --hint=string:x-canonical-private-    synchronous: "Sound output switched to" "$line"
    exit
fi
let ndx++
done;

Tout le mérite revient à tsvetan depuis le forum Ubunt .

2
guttermonk

Je me suis inspiré du script Andrews pour l’utiliser avec notify-osd pour annoncer ce qu’il venait de faire. Modifiez les lignes avec les noms en fonction de vos besoins.

#!/usr/bin/env bash

sinks=($(pacmd list-sinks | grep index | \
    awk '{ if ($1 == "*") print "1",$3; else print "0",$2 }'))
inputs=($(pacmd list-sink-inputs | grep index | awk '{print $2}'))

[[ ${sinks[0]} = 0 ]] && swap=${sinks[1]} || swap=${sinks[3]}

pacmd set-default-sink $swap 

for i in ${inputs[*]}; do pacmd move-sink-input $i $swap &> /dev/null; done

if [ "$swap" = "0" ]; then
notify-send -u normal -i audio-volume-medium-symbolic "Sound output changed. Now using: Corsair 2.1 Speakers!" 

else
notify-send -u normal -i audio-volume-medium-symbolic "Sound output changed. Now using: Logitech G930 Headset!" 

fi
1
Kveras

Je cherchais un moyen de basculer entre les haut-parleurs internes de mon ordinateur portable et une station de base d'aéroport Apple connectée à ma chaîne stéréo. J'ai décidé d'attribuer des raccourcis clavier pour basculer. Je voulais que la fenêtre des préférences audio apparaisse pendant une seconde pour donner une confirmation visuelle du commutateur et a ensuite utilisé wmctrl pour fermer la fenêtre.

(J'ai utilisé les touches de raccourci Ctrl + F8 et Ctrl + F9, car la fonction Fn de ces touches sur mon ordinateur portable permet d'augmenter et de diminuer le volume, de sorte qu'il semblait évident que les fonctions Ctrl modifient la sortie audio.)

J'ai utilisé les 2 scripts suivants (presque identiques):

#! /bin/bash
gnome-volume-control -p output &
sleep .7 
pacmd set-default-sink 1
sleep .8 
wmctrl -c "Sound Preferences"
exit

#! /bin/bash
gnome-volume-control -p output &
sleep .7 
pacmd set-default-sink 0
sleep .8 
wmctrl -c "Sound Preferences"
exit

Le premier passe à la station de base Apple (que j'ai affectée à ctrl + F9) et le second revient aux haut-parleurs internes (ctrl + F8). Cela suppose que ce sont les deux seuls périphériques de sortie installés.

1
retrokid

Voici un petit script qui fait défiler les puits d’audio pour la fenêtre actuellement active: https://Gist.github.com/rif/01ffb5e3eb45d2e4e6ebb4652b3b19ce

Nécessite pacmd et xdotool

0
rif

J'ai eu le même problème et j'ai écrit un petit applet indicateur pour le bureau Ubuntu Unity:

https://github.com/lkettenb/sound-output-switcher

http://www.capslockblog.com/images/misc/Screenshot.png

0
Lukas