Cambie rápidamente el dispositivo de audio en KDE

16

Recientemente cambié a OpenSUSE (con KDE) desde Windows, y todavía estoy pasando por la curva de aprendizaje.

Con frecuencia cambio entre usar mis auriculares con micrófono incorporado y usar los altavoces integrados de mi monitor y el micrófono de mi cámara web. Usando el menú de Phonon a través de KMix (ejemplo a continuación), puedo reorganizar los dispositivos para poner el que quiero usar en la parte superior, pero preferiría poder hacerlo con una tecla de acceso rápido, similar a lo que la aplicación Audio Switcher lo hace en Windows. Cuando lo haga, también me gustaría configurar el canal maestro al nuevo para que pueda ajustar fácilmente el audio.

ingrese la descripción de la imagen aquí

¿Hay alguna forma de guión que me permita (a) seleccionar un nuevo dispositivo predeterminado de reproducción de audio y grabación de audio sobre la marcha, (b) mientras configura el canal maestro en ese mismo dispositivo de reproducción (c) con una tecla de acceso rápido o Otro método rápido en el escritorio?

Ryan
fuente

Respuestas:

10

La mayoría de los kits GUI usan el mismo backend PulseAudio. Se usa pactlpara escribir guiones de control.

NAME
       pactl - Control a running PulseAudio sound server

DESCRIPTION
       pactl can be used to issue control commands to the PulseAudio sound server.

       pactl only exposes a subset of the available operations. For the full set use the pacmd(1).

Fuente: man pactl

  1. Para verificar los sumideros de salida disponibles

    $ pactl list short sinks
    0   alsa_output.pci-0000_01_00.1.hdmi-stereo    module-alsa-card.c  s16le 2ch 44100Hz   SUSPENDED
    1   alsa_output.pci-0000_00_1b.0.analog-stereo  module-alsa-card.c  s16le 2ch 44100Hz   SUSPENDED
    
  2. Para verificar las fuentes de entrada disponibles

    $ pactl list short sources
    0   alsa_output.pci-0000_01_00.1.hdmi-stereo.monitor    module-alsa-card.c  s16le 2ch 44100Hz   SUSPENDED
    1   alsa_output.pci-0000_00_1b.0.analog-stereo.monitor  module-alsa-card.c  s16le 2ch 44100Hz   SUSPENDED
    2   alsa_input.pci-0000_00_1b.0.analog-stereo   module-alsa-card.c  s16le 2ch 44100Hz   SUSPENDED
    
  3. Para verificar el valor predeterminado

    $ pactl info
    Server String: /run/user/1000/pulse/native
    Library Protocol Version: 30
    Server Protocol Version: 30
    Is Local: yes
    Client Index: 2
    Tile Size: 65472
    User Name: user
    Host Name: userpc
    Server Name: pulseaudio
    Server Version: 6.0
    Default Sample Specification: s16le 2ch 44100Hz
    Default Channel Map: front-left,front-right
    Default Sink: alsa_output.pci-0000_00_1b.0.analog-stereo
    Default Source: alsa_input.pci-0000_00_1b.0.analog-stereo
    
  4. Para establecer por defecto

    pactl set-default-source id-or-name
    pactl set-default-sink id-or-name
    

    Ejemplo:

    pactl set-default-source alsa_input.pci-0000_00_1b.0.analog-stereo
    pactl set-default-sink alsa_output.pci-0000_00_1b.0.analog-stereo
    

    o:

    pactl set-default-source 2
    pactl set-default-sink 1
    

Notas:

  • Esto afectará solo a las nuevas transmisiones, debe mover las transmisiones actuales en ejecución, así que use:

    pacmd move-sink-input <stream-id> <sink-id/name>
    

    Un buen ejemplo para copiar: Cambiar a audio HDMI cuando HDMI está conectado a una computadora portátil (14.04)

  • Algunas tarjetas tienen múltiples puertos conmutables, puede que el que desee no sea el predeterminado.

    Verifique los puertos disponibles:

    $pactl list sinks
    Sink #1
        State: RUNNING
        Name: alsa_output.pci-0000_00_1b.0.analog-stereo
        Description: Built-in Audio Analog Stereo
        Driver: module-alsa-card.c
        ...
        Ports:
            analog-output-speaker: Speakers (priority: 10000, not available)
            analog-output-headphones: Headphones (priority: 9000, available)
        Active Port: analog-output-headphones
        Formats:
            pcm
    ...
    

    Para configurarlo:

    pactl set-sink-port <sink-id/name> <port-name>
    

    Ejemplo:

    pactl set-sink-port 1 analog-output-headphones
    

Para cambiar el canal maestro

Siguiendo este tutorial , puede configurar el canal maestro de la qdbussiguiente manera:

  1. Encuentre el Master Mixer para cada uno de sus dispositivos con el siguiente comando. Primero configure manualmente el canal maestro en el que desea verificar, luego ejecute el comando:

    qdbus org.kde.kmix /Mixers org.kde.KMix.MixSet.currentMasterControl
    
  2. Usando el resultado de ese comando y el receptor de audio que desea controlar, use la siguiente sintaxis para cambiar su canal maestro:

    qdbus org.kde.kmix /Mixers org.kde.KMix.MixSet.setCurrentMaster "[insert Mixer]" "[insert sink]" 2>&1 > /dev/null
    
  3. Al final, la secuencia de comandos para cambiar todo el audio actual a un nuevo canal, configurarlo como predeterminado y configurarlo como el canal maestro tiene el siguiente aspecto:

    #!/bin/bash
    pactl set-default-sink alsa_output.usb-Logitech_Logitech_G930_Headset-00-Headset.analog-stereo
    pactl set-default-source alsa_input.usb-Logitech_Logitech_G930_Headset-00-Headset.analog-mono
    INPUTS=($(pacmd list-sink-inputs | grep index | awk '{print $2}'))
    for i in ${INPUTS[*]}; do pacmd move-sink-input $i alsa_output.usb-Logitech_Logitech_G930_Headset-00-Headset.analog-stereo &> /dev/null; done
    qdbus org.kde.kmix /Mixers org.kde.KMix.MixSet.setCurrentMaster "PulseAudio::Playback_Devices=:1" "alsa_output.usb-Logitech_Logitech_G930_Headset-00-Headset.analog-stereo" 2>&1 > /dev/null
user.dz
fuente
Esta parece una gran respuesta, pero no creo que mi instalación esté usando PulseAudio. Puedo usar los comandos, pero la fuente y el sumidero predeterminados actuales no son los mismos que se muestran en el menú de Phonon. Y cambiarlos parece no tener efecto.
Ryan
@ Ryan, acabo de probarlo en openSUSE 13.1 KDE, parece funcionar bien. Lo único que noté: el panel Phonon no actualiza su interfaz si la configuración cambió de PulseAudio. ¿Podría instalar y pavucontrolluego abrir los 3 juntos en la pantalla (terminal con pactl + panel de control de pavu + panel de fonón). Intente cambiar la configuración de cada uno y observe. En algún momento, debe cerrar el teléfono y abrirlo nuevamente para ver el estado de configuración real.
user.dz
Descubrí que puedes crear un nuevo perfil que vincule ambos a la vez y que estén siempre visibles pactl list short sinks, mira mi respuesta a continuación
Francesco
3

Gracias a esta respuesta , finalmente encontré una solución, consulte las instrucciones a continuación.

Mostrar siempre la salida HDMI en modo mixto Crearemos un nuevo perfil que vincule ambos perfiles "Audio analógico" y "Audio HDMI".

Según tengo entendido, este archivo /usr/share/pulseaudio/alsa-mixer/profile-sets/default.confenumera todos los perfiles de mapeo entre Alsa y Pulseaudio.

1.
Encontrar la correlación que están relacionados con su Analog profiley HDMI profiledefinición. ( descripción: debe coincidir con los perfiles de dispositivo que se muestran en el módulo de configuración Kde de volumen de audio )

Para mi son los siguientes:

[Mapping analog-stereo]
device-strings = front:%f
channel-map = left,right
paths-output = analog-output analog-output-lineout analog-output-speaker analog-output-headphones analog-output-headphones-2
paths-input = analog-input-front-mic analog-input-rear-mic analog-input-internal-mic analog-input-dock-mic analog-input analog-input-mic analog-input-linein analog-input-aux analog-input-video analog-input-tvtuner analog-input-fm analog-input-mic-line analog-input-headphone-mic analog-input-headset-mic
priority = 10

[Mapping hdmi-stereo-extra1]
description = Digital Stereo (HDMI 2)
device-strings = hdmi:%f,1
paths-output = hdmi-output-1
channel-map = left,right
priority = 2
direction = output

2.
Sobre la base de la definición de mapeo anterior, he creado el siguiente perfil nuevo que agrupa a los dos anteriores:

[Profile output:analog-stereo+output:hdmi-stereo-extra1]
description = All
output-mappings = analog-stereo hdmi-stereo-extra1
input-mappings = analog-stereo

3.
Reinicie el audio de pulso con este comando:

pulseaudio --kill; sleep 1; pulseaudio --start

4.
Vaya a Configuración de fonón de KDE> Configuración de hardware de audio y seleccione el nuevo perfil. 2 perfiles en el mezclador

Ahora deberías ver ambos perfiles en el mixto y así podrás cambiar fácilmente:

HDMI siempre se muestra en el mezclador ahora
Sugeriría usar este mezclador de plasmoides: https://store.kde.org/p/1100894/

(paso adicional) Forzar ambas salidas habilitadas

Si no le importa tener tanto el altavoz de la computadora como el audio de salida de TV al mismo tiempo (así que básicamente no tiene que cambiar la salida de audio nunca).

Puede seleccionar la configuración a continuación y luego tendrá una nueva entrada en el mezclador

ingrese la descripción de la imagen aquí

Francesco
fuente
Esto es genial, funciona como un encanto, ¡gracias!
stsloth
0

Sobre la base de comentarios anteriores, escribí el siguiente script y lo vinculé a una tecla de acceso rápido para usarlo en KDE Plasma para alternar entre mis dos dispositivos de audio. Me gusta tener el control de mi fuente de audio en lugar de automatizar completamente este proceso.

Cambie sus dispositivos de audio según corresponda. Úselo pactl list short sinkspara determinar sus dispositivos.

#!/bin/bash

# Audio sinks
HEADSET='alsa_output.usb-Corsair_Corsair_VOID_PRO_Wireless_Gaming_Headset-00.analog-stereo'
SPEAKERS='alsa_output.pci-0000_1f_00.3.analog-stereo'

# Get current audio sink
CURRENTDEV=$(pactl list short sinks | grep RUNNING | awk {'print $2'})

# Determine our next audio sink
if [[ "$CURRENTDEV" == "$HEADSET" ]]; then
    NEXTDEV=$SPEAKERS
else
    NEXTDEV=$HEADSET
fi

# Set our default device
pactl set-default-sink $NEXTDEV

# Move current streams (dont check for null, if null you wont see heads up display of audio change)
INPUTS=($(pacmd list-sink-inputs | grep index | awk '{print $2}'))
for i in ${INPUTS[*]}; do pacmd move-sink-input $i $NEXTDEV &> /dev/null; done

linuxkd
fuente
0

Mi situacion es simple. Tengo dos salidas, algunas hdmi y algunas analógicas, por lo que según la respuesta de user.dz (gracias) escribí este pequeño script y lo llamé con atajos de teclado.

#!/bin/bash
# parameter: "hdmi" or "analog"

output=`pactl list short sinks |grep $1 | cut -f1`

pactl set-default-sink $output

for i in `pacmd list-sink-inputs |grep index: | awk '{print $2}'`; do
  pacmd move-sink-input $i $output
done

Si tiene otras interfaces, puede buscar un patrón único en la salida de "lista corta de sumideros de pactl" y llamar al script con el parámetro que desee.

gabor.zed
fuente