Wechseln Sie schnell das Audiogerät in KDE

16

Ich bin kürzlich von Windows zu OpenSUSE (mit KDE) gewechselt und bin immer noch durch die Lernkurve gegangen.

Ich wechsle ziemlich häufig zwischen der Verwendung meines Kopfhörers mit eingebautem Mikrofon und der Verwendung der eingebauten Lautsprecher meines Monitors und des Mikrofons meiner Webcam. Wenn ich das Phonon-Menü über KMix verwende (Beispiel unten), kann ich die Geräte neu anordnen, um das Gerät, das ich verwenden möchte, oben zu platzieren, aber ich würde es vorziehen, es mit einem Hotkey zu tun, ähnlich wie bei dem Die Audio Switcher- Anwendung funktioniert unter Windows. Wenn ich das mache, möchte ich auch den Master-Kanal auf den neuen einstellen, damit ich das Audio leicht anpassen kann.

Bildbeschreibung hier eingeben

Gibt es einen Weg durch ein Skript, mit dem ich (a) im Handumdrehen ein neues Standard-Audiowiedergabe- und Audioaufnahmegerät auswählen und (b) gleichzeitig den Masterkanal auf dasselbe Wiedergabegerät einstellen kann (c), indem ich einen Hotkey oder drücke? andere schnelle Methode auf dem Desktop?

Ryan
quelle

Antworten:

10

Die meisten GUI-Kits verwenden dasselbe PulseAudio-Backend. Verwenden Sie pactlzum Schreibsteuerskript.

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

Quelle: man pactl

  1. Überprüfen der verfügbaren Ausgabesenken

    $ 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. Verfügbare Eingangsquellen prüfen

    $ 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. Standard überprüfen

    $ 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. Standard einstellen

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

    Beispiel:

    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
    

    oder:

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

Anmerkungen:

  • Dies wirkt sich nur auf neue Streams aus. Sie müssen die aktuell ausgeführten Streams verschieben. Verwenden Sie also:

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

    Schönes Beispiel zum Kopieren von: Umschalten auf HDMI-Audio, wenn HDMI an einen Laptop angeschlossen ist (14.04)

  • Einige Karten haben mehrere umschaltbare Ports. Möglicherweise ist der von Ihnen gewünschte nicht der Standard.

    Überprüfen Sie die verfügbaren Ports:

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

    So stellen Sie es ein:

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

    Beispiel:

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

Ändern des Master-Kanals

Nach diesem Tutorial können Sie den Master-Kanal qdbuswie folgt einstellen :

  1. Finden Sie den Master-Mixer für jedes Ihrer Geräte mit dem folgenden Befehl. Stellen Sie den Hauptkanal zuerst manuell auf den zu überprüfenden Kanal ein und führen Sie dann den folgenden Befehl aus:

    qdbus org.kde.kmix /Mixers org.kde.KMix.MixSet.currentMasterControl
    
  2. Verwenden Sie das Ergebnis dieses Befehls und die Audiosenke, die Sie steuern möchten, um Ihren Masterkanal mithilfe der folgenden Syntax zu ändern:

    qdbus org.kde.kmix /Mixers org.kde.KMix.MixSet.setCurrentMaster "[insert Mixer]" "[insert sink]" 2>&1 > /dev/null
    
  3. Am Ende sieht das Skript zum Umschalten aller aktuellen Audiodaten auf einen neuen Kanal wie folgt aus:

    #!/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
quelle
Dies scheint eine gute Antwort zu sein, aber ich glaube nicht, dass meine Installation PulseAudio verwendet. Ich kann die Befehle verwenden, aber die aktuelle Standardquelle und -senke stimmen nicht mit den im Phonon-Menü angezeigten Werten überein. Und ihre Änderung scheint keine Wirkung zu haben.
Ryan
@ Ryan, ich habe es gerade in openSUSE 13.1 KDE getestet, scheint gut zu funktionieren. Das einzige, was mir aufgefallen ist: Das Phonon-Panel aktualisiert seine Benutzeroberfläche nicht, wenn sich die Einstellungen von PulseAudio geändert haben. Könnten Sie installieren, pavucontroldann öffnen Sie die 3 zusammen auf dem Bildschirm (Terminal w / Pactl + Pavucontrol Panel + Phonon Panel). Versuchen Sie, die Einstellungen von jedem zu ändern und schauen Sie zu. Irgendwann müssen Sie das Telefon wieder schließen, um den tatsächlichen Einstellungsstatus zu überprüfen.
user.dz
Ich habe herausgefunden, dass Sie ein neues Profil erstellen können, das beide Senken miteinander verbindet und für das sie immer sichtbar pactl list short sinkssind. Siehe meine Antwort unten
Francesco,
3

Dank dieser Antwort habe ich endlich eine Lösung gefunden, siehe nachfolgende Anleitung

Zeige immer den HDMI-Ausgang im Mix Wir erstellen ein neues Profil, das die beiden Profile "Analog Audio" und "HDMI Audio" verknüpft.

/usr/share/pulseaudio/alsa-mixer/profile-sets/default.confNach meinem Verständnis listet diese Datei alle Mapping-Profile zwischen Alsa und Pulseaudio auf.

1.
Suchen Sie die Zuordnung, die zu Ihrer Definition Analog profileund zu Ihrer gehört HDMI profile. ( Beschreibung: sollte mit den in Audio Volume angezeigten Geräteprofilen übereinstimmen Kde Einstellmodul)

Für mich sind das folgende:

[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.
Auf der Basis der obigen Mapping-Definition habe ich das folgende neue Profil erstellt, das beide oben genannten gruppiert:

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

3.
Starten Sie pulse audio mit diesem Befehl neu:

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

4.
Gehen Sie zu KDE-Telefoneinstellungen> Audio-Hardware-Setup und wählen Sie das neue Profil aus. 2 Profile im Mischer

Jetzt sollten Sie beide Profile im Mix sehen und so können Sie einfach wechseln:

HDMI wird jetzt immer im Mixer angezeigt
Ich würde vorschlagen, diesen Plasmoid-Mixer zu verwenden: https://store.kde.org/p/1100894/

(zusätzlicher Schritt) Erzwinge, dass beide Ausgänge aktiviert sind

Wenn es Ihnen nichts ausmacht, wenn sowohl Computerlautsprecher als auch TV-Audio gleichzeitig ausgegeben werden (Sie müssen also den Audioausgang nie umschalten).

Sie können die folgende Einstellung auswählen und dann haben Sie einen neuen Eintrag im Mixer

Bildbeschreibung hier eingeben

Francesco
quelle
Das ist einfach toll, wirkt wie ein Zauber, danke!
Stsloth
0

Aufbauend auf früheren Kommentaren habe ich das folgende Skript geschrieben und es an einen Hotkey für KDE Plasma gebunden, um zwischen meinen beiden Audiogeräten umzuschalten. Ich mag es, die Kontrolle über meine Audioquelle zu haben, anstatt diesen Prozess vollständig zu automatisieren.

Ändern Sie Ihre Audiogeräte entsprechend. Verwenden Sie pactl list short sinks, um Ihre Geräte zu bestimmen.

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

Meine Situation ist einfach. Ich habe zwei Ausgaben, einige HDMI und einige analoge, also basierend auf user.dz Antwort (danke) habe ich dieses kleine Skript geschrieben und es mit Tastaturkürzeln aufgerufen.

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

Wenn Sie über andere Schnittstellen verfügen, können Sie in der Ausgabe von "Pactl List Short Sinks" nach einem eindeutigen Muster suchen und das Skript mit einem beliebigen Parameter aufrufen.

gabor.zed
quelle