Dispositivo de salida de audio, cambio rápido?

19

Dependiendo de la situación, uso mis altavoces o mis auriculares para la salida de audio. Dado que mi auricular es un auricular USB, se comporta como su propio dispositivo de audio.

Actualmente cambio entre dispositivos de salida de audio haciendo clic en el icono del altavoz en la bandeja superior derecha, donde selecciono Configuración de sonido, voy a la pestaña Salida y elige el dispositivo que quiero.

Lo que me pregunto es si podría haber alguna forma más fácil / rápida de cambiar de un lado a otro de mis auriculares USB. ¿Quizás un icono de bandeja dedicado, una asignación de teclas, o algo así?

Estoy ejecutando Ubuntu 10.04, con el escritorio predeterminado de Gnome.

andol
fuente

Respuestas:

11

Para cambiar el dispositivo de salida de audio predeterminado desde la línea de comandos, puede usar la pacmdutilidad de línea de comandos Pulse Audio.

Encontré la necesidad de hacer lo mismo hoy, queriendo cambiar entre auriculares y altavoces, ambos conectados a tarjetas de audio separadas. Aquí está el script de shell que escribí para hacerlo:

#!/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

Notas:

  • Esto intercambia entre los dos primeros dispositivos de salida de audio que pacmdenumera la utilidad. Si tiene más de dos dispositivos de audio y desea cambiar a uno diferente, deberá reemplazar la lógica en la línea 7 con algunos condicionales.
  • Simplemente intercambiar el dispositivo de sumidero predeterminado no hace nada para las aplicaciones que se ejecutan actualmente; continuarán enviando al dispositivo anterior. Este script también mueve el destino del receptor para todas las entradas existentes. Es decir, si ejecuta este script con música reproduciéndose en un dispositivo, cambiará instantáneamente al otro. Si desea que las aplicaciones existentes continúen en el dispositivo anterior, comente la última línea (y la línea 5, si lo desea).
Andrés
fuente
7

Bueno, puedes instalar pavucontrol, muestra aplicaciones con selección de dispositivo de sonido en la primera pestaña, te ahorrará un poco de esfuerzo. Pero creo que lo que realmente desea es marcar su auricular USB como dispositivo predeterminado, luego, cada vez que lo conecte, todo el sonido se redirigirá a él, y cuando lo desconecte, volverá a los altavoces. Sin esfuerzo, de verdad.

vava
fuente
2
¿Cómo se configura el dispositivo predeterminado en Ubuntu Precise?
azulado
3

La pregunta es bastante antigua, pero mi respuesta aún puede ser útil para los usuarios de GNOME 2. Utilicé el Applet de mezclador PulseAudio para el problema exacto descrito aquí. Puede cambiar los dispositivos de entrada y salida directamente en el menú del panel. Es la forma más conveniente que encontré.

dAnjou
fuente
3

Por supuesto, cambiar de dispositivo usando el Applet también funciona bien. Pero lo bueno de escribir un guión es que es súper rápido. Puse el mío, por ejemplo, en el atajo de teclado alt + s. así, cuando quiero cambiar de auriculares a altavoces, solo necesito presionar alt + s.

De todas formas. Andrew dijo:

Si tiene más de dos dispositivos de audio y desea cambiar a uno diferente, deberá reemplazar la lógica en la línea 7 con algunos condicionales.

Eso fue lo que hice. Lo comparto, en caso de que alguien tenga problemas con él:

#!/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

Lo que hice de manera diferente es a) encontrar el sumidero activo en un bucle for. Y b) cambie al siguiente sumidero aumentando el índice en 1. Luego modulo el resultado por el número de sumideros. Eso asegura que, por ejemplo, al tener 3 sumideros, (2 + 1)% 3 = 0. Así, desde el índice de hundimiento 2, pasaríamos al índice de hundimiento 0.

De esta manera, el interruptor permite moverse hacia arriba a través de los sumideros disponibles.

traumtaenzer
fuente
2

Gracias por los guiones! También agregué una parte para entrada (micrófono) en caso de que alguien quiera usarlo:

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
fuente
2

Para recorrer su lista de dispositivos de sonido, use el siguiente script:

#!/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;

Todo el crédito va a tsvetan desde el foro de Ubuntu .

Guttermonk
fuente
1

Estaba buscando una manera de hacer esto para cambiar entre los altavoces internos de mi computadora portátil y una estación base del aeropuerto de Apple que está conectada a mi estéreo. Decidí asignar teclas de acceso rápido para cambiar. Quería que la ventana de preferencias de audio apareciera por un segundo para dar una confirmación visual del interruptor y luego usé wmctrl para cerrar la ventana.

(Utilicé ctrl + F8 y ctrl + F9 como teclas de acceso rápido ya que la función Fn de estas teclas en mi computadora portátil es aumentar y disminuir el volumen, por lo que parecía obvio que las funciones ctrl cambiaran la salida de audio).

Usé los siguientes 2 scripts (casi idénticos):

#! /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

El primero cambia a la estación base de Apple (que asigné a ctrl + F9) y el segundo vuelve a los altavoces internos (ctrl + F8). Esto supone que estos son los únicos 2 dispositivos de salida instalados.


fuente
1

Construí sobre la secuencia de comandos de Andrews para hacer que use notify-osd para anunciar lo que acaba de hacer. Edite las líneas con los nombres según sus necesidades.

#!/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
fuente