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

19

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 appareil audio.

Actuellement, je bascule entre les périphériques de sortie audio en cliquant sur l'icône du haut-parleur dans le plateau supérieur droit, où je sélectionne les paramètres audio, accède à l'onglet Sortie et y sélectionne le périphérique que je veux.

Ce que je me demande, c'est s'il pourrait y avoir un moyen plus facile / plus rapide de basculer vers mon casque USB? Peut-être une icône de plateau dédiée, un mappage de clés, ou ainsi?

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

andol
la source

Réponses:

11

Afin de changer le périphérique de sortie audio par défaut à partir de la ligne de commande, vous pouvez utiliser l' pacmdutilitaire de ligne de commande Pulse Audio.

J'ai trouvé la nécessité de faire de même aujourd'hui, voulant basculer entre les écouteurs et les haut-parleurs, tous deux branchés sur des cartes audio distinctes. 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:

  • Cela permute entre les deux premiers périphériques de sortie audio pacmdrépertoriés par l' utilitaire. Si vous avez plus de deux périphériques audio et que vous souhaitez passer à un autre, vous devrez remplacer la logique de la ligne 7 par des conditions.
  • Le simple échange du périphérique récepteur par défaut ne fait rien pour les applications en cours d'exécution - elles continueront de sortir sur le périphérique précédent. Ce script déplace également la destination du récepteur pour toutes les entrées existantes. Autrement dit, si vous exécutez ce script avec de la musique jouée sur un appareil, il passera instantanément à l'autre. Si vous souhaitez que les applications existantes continuent sur le périphérique précédent, mettez en commentaire la dernière ligne (et la ligne 5, si vous le souhaitez).
Andrew
la source
7

Eh bien, vous pouvez installer pavucontrol, il montre des applications avec une sélection de périphériques audio dans le premier onglet, cela vous fera économiser un peu d'effort. Mais ce que vous voulez vraiment, je pense, c'est de marquer votre casque USB comme appareil par défaut, puis chaque fois que vous le branchez, tout le son est redirigé vers lui, et lorsque vous le débranchez - il sera de retour aux haut-parleurs. Sans effort, vraiment.

vava
la source
2
Comment définissez-vous le périphérique par défaut dans Ubuntu Precise?
blueyed le
3

La question est assez ancienne mais ma réponse peut toujours être utile pour les 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é.

dAnjou
la source
3

Bien sûr, le changement de périphérique à l'aide de l'applet fonctionne également correctement. Mais ce qu'il y a de bien avec l'écriture d'un script, c'est qu'il est super rapide. J'ai mis le mien par exemple sur le raccourci clavier alt + s. ainsi quand je veux passer du casque aux haut-parleurs, je n'ai qu'à appuyer sur alt + s.

En tous cas. Andrew a déclaré:

Si vous avez plus de deux périphériques audio et que vous souhaitez passer à un autre, vous devrez remplacer la logique de la ligne 7 par des 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'indice de 1. Ensuite, je modulo le résultat par le nombre de puits. Cela garantit que, par exemple, lorsque vous avez 3 puits, (2 + 1)% 3 = 0. Ainsi, à partir de l'index 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.

traumtaenzer
la source
2

Merci pour les scripts! J'ai également ajouté une partie pour l'entrée (microphone) 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)
Subbeh
la source
2

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 du forum Ubuntu .

gouttière
la source
1

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

(J'ai utilisé ctrl + F8 et ctrl + F9 comme raccourcis clavier car la fonction Fn de ces touches sur mon ordinateur portable est d'augmenter et de diminuer le volume, il semblait donc é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 attribué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.


la source
1

J'ai construit sur le script Andrews pour lui faire utiliser notify-osd pour annoncer ce qu'il vient de faire. Modifiez les lignes avec les noms selon 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
Kveras
la source