Dispositivo de salida de audio, interruptor 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 ícono del altavoz en la bandeja superior derecha, donde selecciono Configuración de sonido, voy a la pestaña Salida y selecciono el dispositivo que quiero.

Lo que me pregunto es si podría haber alguna manera más fácil / rápida de cambiar de un audífono USB a otro. ¿Quizás un ícono de bandeja dedicada, una asignación de teclas, o más?

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

    
pregunta andol 12.09.2010 - 07:37

10 respuestas

11

Para cambiar el dispositivo de salida de audio predeterminado desde la línea de comando, puede usar la utilidad de línea de comandos% Audio de pulso pacmd .

Encontré la necesidad de hacer lo mismo hoy, queriendo cambiar entre auriculares y parlantes, ambos enchufados en 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 ( == "*") print "1",; else print "0", }'))
inputs=($(pacmd list-sink-inputs | grep index | awk '{print }'))

[[ ${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 enumera la utilidad pacmd . 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.
  • El solo hecho de intercambiar el dispositivo receptor predeterminado no hace nada para las aplicaciones que se están ejecutando actualmente; continuarán saliendo al dispositivo anterior. Este script también mueve el destino del receptor para todas las entradas existentes. Es decir, si ejecuta esta secuencia de comandos con la reproducción de música en un dispositivo, cambiará al instante 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).
respondido por el Andrew 20.12.2010 - 04:00
7

Bueno, puedes instalar pavucontrol , muestra aplicaciones con selección de dispositivo de sonido en la primera pestaña, te ahorrará algo de esfuerzo. Pero lo que realmente quieres es marcar tus auriculares USB como dispositivo predeterminado, y luego cada vez que lo enchufas, todo el sonido se redireccionará a él, y cuando lo desconectes, volverá a los altavoces. Sin esfuerzo, de verdad.

    
respondido por el vava 12.09.2010 - 09:33
3

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

    
respondido por el dAnjou 14.12.2011 - 16:29
3

Por supuesto, cambiar dispositivos 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. por lo tanto, cuando quiero cambiar de auriculares a altavoces, solo necesito presionar alt + s.

De todos modos. Andrew dijo:

  

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

Eso es 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 ( == "*") print "1",; else print "0", }'))
sinks=($(pacmd list-sinks | grep index | \
    awk '{ if ( == "*") print "1"; else print "0" }'))
inputs=($(pacmd list-sink-inputs | grep index | awk '{print }'))

#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 diferente es a) encontrar el sumidero activo en un ciclo 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, p. cuando tienes 3 sumideros, (2 + 1)% 3 = 0. Por lo tanto, desde el índice 2 del fregadero cambiaremos al índice 0 del fregadero.

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

    
respondido por el traumtaenzer 18.01.2012 - 07:29
2

¡Gracias por los guiones! Añadí una parte para la entrada (micrófono) también en caso de que alguien quiera usarla:

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)
    
respondido por el Subbeh 19.12.2011 - 22:16
2

Para recorrer su lista de dispositivos de sonido, use la siguiente secuencia de comandos:

#!/bin/bash

declare -i sinks=('pacmd list-sinks | sed -n -e 's/\**[[:space:]]index:[[:space:]]\([[:digit:]]\)//p'')
declare -i sinks_count=${#sinks[*]}
declare -i active_sink_index='pacmd list-sinks | sed -n -e 's/\*[[:space:]]index:[[:space:]]\([[:digit:]]\)//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:]]\)//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:]]"\(.*\)"//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 del foro de Ubuntu .

    
respondido por el guttermonk 19.04.2014 - 15:33
1

Estaba buscando una forma de hacerlo para cambiar entre los parlantes internos de mi computadora portátil y un aeropuerto de manzana estación base que está conectada a mi estéreo. Decidí asignar teclas rápidas para cambiar. Quería que la ventana de preferencias de audio apareciera por un segundo para dar una confirmación visual del interruptor y usar wmctrl para cerrar la ventana después.

(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).

Utilicé 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

Los primeros cambios a la estación base Apple (que asigné a ctrl + F9) y el segundo a los parlantes internos (ctrl + F8). Esto supone que estos son los únicos 2 dispositivos de salida instalados.

    
respondido por el retrokid 22.01.2011 - 12:11
1

Me basé en el script de Andrews para que usase 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 ( == "*") print "1",; else print "0", }'))
inputs=($(pacmd list-sink-inputs | grep index | awk '{print }'))

[[ ${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
    
respondido por el Kveras 13.05.2012 - 17:55
0

Tuve el mismo problema y escribí un pequeño applet indicador para el escritorio Ubuntu Unity:

enlace

enlace

    
respondido por el Lukas 21.12.2013 - 12:43
0

Aquí hay un pequeño script que cicla los receptores de audio para la ventana actualmente enfocada: enlace

Requiere pacmd y xdotool

    
respondido por el rif 22.06.2018 - 21:02

Lea otras preguntas en las etiquetas