Changez rapidement de périphérique audio dans KDE

16

Je suis récemment passé à OpenSUSE (avec KDE) depuis Windows, et je suis toujours en train d'apprendre.

Je passe assez fréquemment entre l'utilisation de mes écouteurs avec microphone intégré et l'utilisation des haut-parleurs intégrés de mon moniteur et du microphone de ma webcam. En utilisant le menu Phonon via KMix (exemple ci-dessous), je suis en mesure de réorganiser les appareils pour mettre celui que je veux utiliser en haut, mais je préférerais pouvoir le faire avec un raccourci clavier, similaire à ce que l' application Audio Switcher fonctionne sous Windows. Quand je le fais, je voudrais également régler le canal Master sur le nouveau afin que je puisse facilement ajuster l'audio.

entrez la description de l'image ici

Existe-t-il un moyen de parcourir un script qui me permettrait (a) de sélectionner un nouveau périphérique de lecture audio et d'enregistrement audio par défaut, (b) tout en définissant également 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?

Ryan
la source

Réponses:

10

La plupart des kits d'interface graphique utilisent le même backend 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).

La source: man pactl

  1. Pour vérifier les récepteurs 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 la valeur 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 la valeur 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
    

Remarques:

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

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

    Bel exemple à copier à partir de: Passer à l'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 régler:

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

    Exemple:

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

Pour changer le canal principal

À la suite de ce didacticiel , vous pouvez définir le canal maître à l'aide de la qdbusmanière suivante:

  1. Trouvez le mixeur principal pour chacun de vos appareils avec la commande suivante. Réglez d'abord manuellement le canal maître 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 récepteur audio que vous souhaitez contrôler, utilisez la syntaxe suivante pour changer votre canal maître:

    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 vers un nouveau canal, le définir comme canal par défaut et le définir comme canal maître ressemble à ceci:

    #!/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
la source
Cela ressemble à une excellente réponse, mais je ne pense pas que mon installation utilise PulseAudio. Je peux utiliser les commandes, mais la source et le récepteur par défaut actuels ne sont pas les mêmes que ceux affichés dans le menu Phonon. Et les changer semble n'avoir aucun effet.
Ryan
@Ryan, je viens de le tester dans openSUSE 13.1 KDE, semble bien fonctionner. La seule chose que j'ai remarquée: le panneau Phonon ne rafraîchit pas son interface si les paramètres sont modifiés depuis PulseAudio. Pourriez-vous installer pavucontrolpuis ouvrir les 3 ensemble à l'écran (terminal w / pactl + panneau pavucontrol + panneau phonon). Essayez de changer le réglage de chacun et regardez. Parfois, vous devez fermer le phonon et l'ouvrir à nouveau pour voir l'état de réglage réel.
user.dz
J'ai découvert que vous pouvez créer un nouveau profil qui relie les deux puits ensemble et qu'ils sont donc toujours visibles pactl list short sinks, voir ma réponse ci
Francesco
3

Grâce à 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 qui relie les deux profils "Audio analogique" et "Audio HDMI".

D'après ma compréhension, ce fichier /usr/share/pulseaudio/alsa-mixer/profile-sets/default.confrépertorie tous les profils de mappage entre Alsa et Pulseaudio.

1.
Trouver la mise en correspondance qui sont liés à votre Analog profileet HDMI profiledéfinition. ( description: doit correspondre aux profils de périphérique affichés dans le module de réglage Audio Volume 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 ci-dessus:

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

3.
Redémarrez le son d'impulsion avec cette commande:

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

4.
Allez dans Paramètres phonon KDE> Configuration du matériel audio et sélectionnez le nouveau profil. 2 profils dans le mélangeur

Maintenant, vous devriez voir les deux profils dans le mix et vous pourrez donc changer facilement:

HDMI est toujours affiché dans le mélangeur maintenant
Je suggère d'utiliser ce mélangeur plasmoïde: https://store.kde.org/p/1100894/

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

Si cela ne vous dérange pas d'avoir à la fois le haut-parleur de l'ordinateur et la sortie audio du téléviseur (vous n'avez donc jamais à changer la sortie audio).

Vous pouvez sélectionner le paramètre ci-dessous, puis vous aurez une nouvelle entrée dans le mélangeur

entrez la description de l'image ici

Francesco
la source
C'est tout simplement génial, fonctionne comme un charme, merci!
stsloth
0

Sur la base des commentaires précédents, j'ai écrit le script suivant et je le lie à un raccourci clavier pour l'utiliser dans KDE Plasma pour basculer entre mes deux périphériques audio. J'aime avoir le contrôle de ma source audio plutôt que d'automatiser complètement ce processus.

Modifiez vos périphériques audio selon les besoins. Utilisez pactl list short sinkspour déterminer vos appareils.

#!/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
la source
0

Ma situation est simple. J'ai deux sorties en HDMI et en analogique, donc sur la base de la réponse user.dz (merci), j'ai écrit ce petit script et je l'appelle avec des raccourcis clavier.

#!/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 vous avez d'autres interfaces, vous pouvez rechercher un modèle unique dans la sortie "pactl list short sinks" et appeler le script avec le paramètre de votre choix.

gabor.zed
la source