Atajo para cambiar entre salida estéreo analógica y salida de audio HDMI

18

Para cambiar a la salida de audio HDMI (del monitor) y volver a la salida de audio normal desde el conector de audio del sistema (para auriculares, ya que mi monitor no tiene salida de audio), me encuentro abriendo las preferencias de sonido y seleccionando el canal correcto cada vez. ¿Hay alguna forma de crear un botón de alternancia en el panel o asignar alguna tecla de acceso directo para alternar ya que hago el cambio con tanta frecuencia?

: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

ingrese la descripción de la imagen aquí

iJeeves
fuente
1
+1 Sería increíble si pudiera cambiar al modo de salida de pantalla HDMI y al modo de sonido correctos con solo presionar una tecla.
Kit Menke
Lo que sería mejor aún es que cuando detecte este canal de audio HDMI / Display Port lo cambie automáticamente. Para eso sirve el acoplamiento. Parece que recuerdo algún código de acoplamiento hace un tiempo que cambiará la configuración en función de ciertas ID de hardware (MAC). Alguien sabe cómo se llama eso de nuevo?
Elijah Lynn el

Respuestas:

10

Con pulseaudio podemos seleccionar el sumidero de salida desde la línea de comando:

pacmd set-default-sink "SINKNAME"

Este comando puede usarse en un iniciador, script o incluso asignarse a un atajo de teclado para cambiar rápidamente entre diferentes sumideros. Reemplace "SINKNAME" por el nombre o número de su fregadero deseado. El comando proporciona una lista de sumideros conocidos con sus números y nombres asociados:

pacmd list-sinks

Nota: Cambiar el sumidero de salida a través de la interfaz de línea de comando solo puede tener efecto si la lectura del dispositivo de destino de transmisión está deshabilitada. Esto se puede hacer editando la línea correspondiente en /etc/pulse/default.pa:

load-module module-stream-restore restore_device=false

Alternativamente, podríamos ejecutar pulseaudio para emitir sonido simultáneamente al dispositivo de audio interno y al dispositivo hdmi ejecutando paprefs con la opción de agregar un dispositivo de salida virtual:

paprefs

Takkat
fuente
2
pacmd set-default-sink "alsa_output.pci-0000_00_1b.0.analog-stereo"y pacmd set-default-sink "alsa_output.pci-0000_00_1b.0.hdmi-stereo"funciona solo después de seleccionar el perfil correspondiente en Preferencias de sonido. Si estoy configurando HDMI y ejecuto el comando pacmd para estéreo analógico, obtengo el error Sink alsa_output.pci-0000_00_1b.0.analog-stereo does not exist.Pero si selecciono manualmente el perfil de la GUI de Preferencias de sonido y ejecuto el mismo comando, no obtengo el error. Por lo tanto, no está ayudando a cambiar.
iJeeves
@ iJeeves: vea editar para actualizar.
Takkat
Problema similar Si ejecuto el comando visualmente lo cambiará en la GUI pero el sonido no redirige. Tengo que alternarlo manualmente en la GUI para que funcione. ¿Algunas ideas?
Elijah Lynn el
1
@ElijahLynn: También puede que tengas que mover la transmisión: askubuntu.com/questions/71863/…
Takkat
@Takkat: Todavía no lo intenté, pero ese parece ser el problema exacto que estaba teniendo. ¡Muchas gracias!
Elijah Lynn el
7

Me pareció muy molesto y escribí un script para alternar la salida:

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

y luego uní una tecla no utilizada en mi teclado para ejecutarla (consulte ¿Cómo vincular comandos personalizados a atajos de teclado? )

user829996
fuente
Aunque no se ha
registrado
¿Cómo puedo hacer esto si necesito cambiar entre dos tarjetas, no solo dos perfiles de una tarjeta?
Oebele
2

Sin embargo, otra secuencia de comandos Sink Switcher

probado en Ubuntu 16.04


Pero este le permite cambiar solo el audio de la aplicación que desea.

USO: enfoque la aplicación que desea cambiar su sumidero y ejecute este script. ¡¡¡Eso es!!!

Este script detecta la aplicación que está enfocada, encuentra todos los audios que se reproducen desde ella y los cambia al siguiente sumidero disponible.

https://gist.github.com/madacol/1a0d8569166886d2d98f073f7f5c5fe3

Explicando el guión

Necesitamos encontrar el PID de la aplicación en foco

Pero primero necesitamos el xid

xprop -root _NET_ACTIVE_WINDOW 

Luego insértelo aquí $xidpara obtener el pid de la aplicación

xprop -id $xid _NET_WM_PID

Ahora necesitamos encontrar las entradas de sumidero relacionadas con ese PID

Primero linealicemos la salida del comando pacmd list-sink-inputspara enumerar una entrada de sumidero por línea, mostrando su índice, sumidero y pid en la misma línea

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

analicémoslo paso a paso:

grep -E 'index:|sink:|process.idsolo mantenga líneas que contengan index:, sink:oprocess.id

tr '\n' ' ' une todas las líneas

tr -d '"'elimina todos los "personajes Necesario para obtener el pid sin comillas

sed -e 's/index:/\n/g'reemplaza todas las index:ocurrencias con un nuevo carácter de línea\n

tail -n +2 elimina la primera línea porque está vacía

Y el resultado es algo como esto:

  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

Analicemos una línea para entender lo que significa:

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

182es el índice de entrada de sumidero, 0es el índice de sumidero y, 13752al final, es el pid de la aplicación correspondiente

Luego iteramos a través de cada línea

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

Y finalmente filtre solo el pid de entrada de sumidero que coincida con el pid de la aplicación enfocada

  if [ $sink_input_pid = $app_pid ]; then

Extrayendo datos

Con awknosotros podemos obtener los elementos que necesitamos

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

Obtenga números de sumideros, para saber cuándo la rotación de sumideros debe reiniciarse desde 0.

sink_list_size=${#sink_list_array[@]}

Para encontrar el próximo sumidero, tenemos que recorrer la lista de sumideros para saber cuál coincide con current_sink_index y conocer el índice del próximo sumidero.

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

Y finalmente, movemos la entrada del receptor para jugar en next_sink_index

pacmd move-sink-input $sink_input_index $next_sink_index

Nota sobre Ubuntu 16.04:

Al configurar la tecla de acceso directo, no pude hacerlo funcionar con el administrador de accesos directos de ubuntu. Así que tuve que instalar compizconfig-settings-manager

sudo apt-get install compizconfig-settings-manager
Madacol
fuente
+1 para una excelente primera respuesta como nuevo usuario. Como la pregunta original era para Ubuntu 11.04, debe señalar con qué versión se probó.
WinEunuuchs2Unix
@ WinEunuuchs2Unix ¡Guau! gracias :). Agregué la versión de Ubuntu debajo del título.
Madacol
1

Como solo hay una tarjeta de sonido visible en la captura de pantalla, creo que la salida de esta tarjeta de sonido debería cambiarse.

Por ejemplo: tengo una computadora portátil con una tarjeta de sonido integrada, pero tiene una salida digital (SPDIF) cuando está acoplada.

Entonces, lo que quería hacer es cambiar la salida activa o "Perfil" en pulseaudio.

Encontré los comandos que hacen exactamente eso:

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

Lo que hice para obtener los nombres correctos para mi configuración de salida deseada (aquí, salida digital, pero entrada analógica (micro)) fue:

pacmd list | grep output
ritterkeks
fuente
1

He estado tratando de encontrar una solución a este problema también. A partir de Ubuntu 11.04, esto no parece ser posible directamente, solo encontré esta guía para agregar HDMI y Analog como salidas separadas, por lo que pacmd muestra 3 sumideros ahora. Entonces es posible cambiar entre sumideros utilizando los comandos anteriores. ( ver también )

Pero aparentemente Ubuntu 11.11 obtendrá un PulseAudio con sistema de detección de jack. Según el sitio web a continuación, David Henningsson ha codificado una detección a través de udev para que el audio de pulso se cambie automáticamente a la última salida agregada, incluido el cambio entre diferentes perfiles de la misma tarjeta de sonido (como es el caso con su configuración y la mía). (ver aquí )

Así que espero que esto funcione, cuando pruebe la versión final el próximo viernes.

Graipher
fuente
1

Basado en muchas de las respuestas anteriores, escribí un script que establece el sumidero de reproducción alternando entre los disponibles.

La mejor manera de usarlo es creando un atajo de teclado para ejecutarlo, por lo que cada vez que presiona esa combinación de teclas, el audio se redirige al siguiente receptor disponible.

El código está disponible aquí: https://gist.github.com/germank/7fa2fb07d45a838bf890addadd8bea8c

GermanK
fuente
0

En mi caso, las opciones analógicas no estaban en la lista. Instalar pavucontrol: sudo apt install pavucontrol

Podría solucionar el problema iniciando la aplicación:

  1. Inicie la aplicación a través de la terminal, ingresando: pavucontrol(enter)
  2. Vaya a la pestaña 'Configuración'.
  3. Seleccione el perfil de salida estéreo analógico en Intern Sound

ingrese la descripción de la imagen aquí

Ahora podría sonar y seleccionar diferentes perfiles (en Linux Mint):

ingrese la descripción de la imagen aquí

peligro89
fuente
0

Una alternativa al Indicador de conmutador de sonido (que requiere agregar un PPA) es crear un comando (o un script) y llamarlo con un atajo:

En mi caso fue el hdmi-stereo-extra1+inputperfil, por lo que en una línea sería:

[[ $(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"

Puede usar un acceso directo personalizado ( gnome-control-center keyboard) para ejecutarlo con bash -c(le advertirá si hay algún conflicto con otro acceso directo):

captura de pantalla

captura de pantalla

Yo suelo:

  • Super + Alt + o: Cambia la salida entre auriculares y HDMI.
  • Super + Alt + Up: Subir volumen
  • Super + Alt + Down: Vol Down

También puede agregar un aliasa su .bashrc.

Probado en Ubuntu 16.04 y 18.04


Si no desea el comportamiento anterior en un script, hice algunos cambios en función de la respuesta @ 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
Pablo Bianchi
fuente
0

¿Hay alguna forma de crear un botón de alternancia en el panel?

Escribí un applet indicador que te permite cambiar la salida de sonido.

Lukas
fuente
Bienvenido a Ask Ubuntu! Si bien esto puede responder teóricamente la pregunta, sería preferible incluir aquí las partes esenciales de la respuesta y proporcionar el enlace para referencia.
Warren Hill