Cambiar rápidamente de dispositivo de audio en KDE

Cambiar rápidamente de dispositivo de audio en KDE

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

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

ingrese la descripción de la imagen aquí

¿Existe alguna forma de utilizar algún script que me permita (a) seleccionar un nuevo dispositivo de reproducción y grabación de audio predeterminado sobre la marcha, (b) y al mismo tiempo configurar 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?

Respuesta1

La mayoría de los kits de GUI utilizan el mismo backend PulseAudio. Úselo pactlpara escribir un script 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 comprobar 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 comprobar 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 comprobar 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 el valor predeterminado

    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 transmisiones nuevas, debe mover las transmisiones en ejecución actuales, así que use:

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

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

  • Algunas tarjetas tienen varios puertos conmutables. Es posible 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

Siguienteeste tutorial, puede configurar el canal maestro de qdbusla siguiente manera:

  1. Encuentra el Master Mixer para cada uno de tus 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 deseas controlar, usa la siguiente sintaxis para cambiar tu canal maestro:

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

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

Respuesta2

Gracias aesta respuestaFinalmente 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.
Encuentre los mapas que están relacionados con su Analog profileyHDMI profile . (descripción:debe coincidir con elPerfiles de dispositivosse muestra en laVolumen de audiomódulo de configuración de Kde)

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 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 phonon 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 utilizar este mezclador de plasmoides:https://store.kde.org/p/1100894/

(paso adicional) Forzar ambas salidas habilitadas

Si no le importa tener el altavoz de la computadora y la salida de audio del televisor al mismo tiempo (básicamente, no tiene que cambiar la salida de audio nunca).

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

ingrese la descripción de la imagen aquí

Respuesta3

Basándome en 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

Respuesta4

Busqué por todos lados... no encontré... hice un script en python, úsalo)

import os
speakers = []
st = 0
au = os.popen("pacmd list-sinks")
audiotm = au.read()
audio = list(audiotm.split())
indices = [i for i, x in enumerate(audio) if x == "name:"]
for num in range(len(indices)):
    speakers.append(audio[indices[num]+1])
for num in range(len(speakers)):
    speakers[num] = speakers[num][1:len(speakers[num])-1]
dir = os.path.abspath(__file__)
dir = dir[:-5]
try: f = open(dir + "lststate.txt","r");st = int(f.read()) ;f.close();
except:f = open(dir + "lststate.txt","w");f.write(str(st)); f.close();
if st == len(speakers): st = 0;
OUT = speakers[st]
st += 1
f = open(dir + "lststate.txt","w");f.write(str(st)); f.close();
z = os.popen("pactl list short sink-inputs")
OUTID = z.read().split()
x = os.popen("pacmd set-default-sink " + OUT)
for num in range(0,len(OUTID),7):
    y = os.popen("pactl move-sink-input " + OUTID[num] + " " + OUT)
exit()

información relacionada