web-dev-qa-db-fra.com

Changer rapidement de périphérique audio dans KDE

Je suis récemment passé de Windows à OpenSUSE (avec KDE) et je suis toujours dans la courbe d'apprentissage.

J'utilise assez souvent mon casque avec microphone intégré et les haut-parleurs intégrés de mon moniteur et le microphone de ma webcam. En utilisant le menu Phonon via KMix (exemple ci-dessous), je peux réorganiser les périphériques pour y placer celui que je veux utiliser, mais je préférerais pouvoir le faire avec une touche de raccourci, similaire à celle utilisée l'application Audio Switcher fonctionne sous Windows. Lorsque je le fais, j'aimerais également régler le canal principal sur le nouveau afin que je puisse facilement régler le son.

enter image description here

Existe-t-il un moyen de script qui me permettrait de (a) sélectionner un nouveau périphérique de lecture et d’enregistrement audio par défaut à la volée, (b) tout en définissant le canal principal sur ce même périphérique de lecture (c) avec un raccourci clavier ou autre méthode rapide sur le bureau?

15
Ryan

La plupart des kits d'interface graphique utilisent le même back-end PulseAudio. Utilisez pactlpour écrire le script de contrôle.

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

Source: man pactl

  1. Pour vérifier les éviers de sortie 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. Pour vérifier les sources d'entrée 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. Pour vérifier les valeurs par défaut

    $ 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. Pour définir les valeurs par défaut

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

    Exemple:

    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
    

    ou:

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

Notes:

  • Cela n'affectera que les nouveaux flux, vous devez déplacer les flux en cours, utilisez donc:

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

    Bel exemple à copier de: Passage en audio HDMI lorsque HDMI est branché sur un ordinateur portable (14.04)

  • Certaines cartes ont plusieurs ports commutables. Peut-être que celui que vous voulez n’est pas celui par défaut.

    Vérifiez les ports 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
    ...
    

    Pour le définir:

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

    Exemple:

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

Pour changer le canal principal

Après ce tutoriel , vous pouvez définir le canal principal à l’aide de qdbuscomme suit:

  1. Recherchez le mixeur principal de chacun de vos périphériques à l’aide de la commande suivante. Réglez tout d'abord manuellement le canal principal sur celui que vous souhaitez vérifier, puis exécutez la commande:

    qdbus org.kde.kmix /Mixers org.kde.KMix.MixSet.currentMasterControl
    
  2. En utilisant le résultat de cette commande et le collecteur audio que vous souhaitez contrôler, utilisez la syntaxe suivante pour changer de canal principal:

    qdbus org.kde.kmix /Mixers org.kde.KMix.MixSet.setCurrentMaster "[insert Mixer]" "[insert sink]" 2>&1 > /dev/null
    
  3. En fin de compte, le script pour basculer tout l'audio actuel sur un nouveau canal, le définir comme canal par défaut et comme canal principal ressemble à ce qui suit:

    #!/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
    
10
user.dz

Merci à cette réponse J'ai finalement trouvé une solution, voir les instructions ci-dessous

Afficher toujours la sortie HDMI dans le mixage Nous allons créer un nouveau profil reliant les deux profils "audio analogique" et "audio HDMI".

D'après ce que j'ai compris, ce fichier /usr/share/pulseaudio/alsa-mixer/profile-sets/default.conf répertorie tous les profils de mappage entre Alsa et Pulseaudio.

1.
Recherchez le mappage associé à vos définitions Analog profile et HDMI profile. ( description: doit correspondre aux profils de l'appareil indiqués dans Volume audio Module de réglage de Kde)

Pour moi sont les suivants:

[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.
Sur la base de la définition de mappage ci-dessus, j'ai créé le nouveau profil suivant qui regroupe les deux précédents:

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

3.
Redémarrez Pulse audio avec cette commande:

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

4.
Sélectionnez Paramètres de KDE phonon> Configuration du matériel audio et sélectionnez le nouveau profil. 2 profiles in the mixer

Maintenant, vous devriez voir les deux profils dans le mixte et ainsi vous pourrez basculer facilement:

HDMI is always shown in the mixer now
Je suggérerais d'utiliser ce mélangeur plasmoïde: https://store.kde.org/p/1100894/

(étape supplémentaire) Force les deux sorties activées

Si vous n’êtes pas dérangé d’avoir le même son pour le haut-parleur de l’ordinateur et la sortie TV, vous n’avez donc pas besoin de changer la sortie audio.

Vous pouvez sélectionner le réglage ci-dessous pour créer une nouvelle entrée dans le mélangeur.

enter image description here

1
Francesco

En me basant sur les commentaires précédents, j’ai écrit le script suivant et l’a lié à un raccourci clavier à utiliser dans KDE Plasma pour basculer entre mes deux périphériques audio. J'aime avoir le contrôle de ma source audio au lieu d'automatiser complètement ce processus.

Changez vos appareils audio comme il convient. Utilisez pactl list short sinks pour déterminer vos périphériques.

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

0
linuxkd