
Ich bin vor Kurzem von Windows auf OpenSUSE (mit KDE) umgestiegen und bin immer noch in der Lernphase.
Ich wechsle ziemlich häufig zwischen der Verwendung meiner Kopfhörer mit eingebautem Mikrofon und der Verwendung der eingebauten Lautsprecher meines Monitors und des Mikrofons meiner Webcam. Über das Phonon-Menü über KMix (Beispiel unten) kann ich die Geräte neu anordnen, um das gewünschte Gerät oben zu platzieren, aber ich würde es lieber mit einem Hotkey tun können, ähnlich wie beiAudio-UmschalterAnwendung unter Windows. Wenn ich das mache, möchte ich auch den Master-Kanal auf den neuen einstellen, damit ich den Ton einfach anpassen kann.
Gibt es eine Möglichkeit über ein Skript, das es mir ermöglicht, (a) spontan ein neues Standardgerät für die Audiowiedergabe und -aufzeichnung auszuwählen und (b) gleichzeitig den Masterkanal auf dasselbe Wiedergabegerät einzustellen (c) und zwar über einen Hotkey oder eine andere schnelle Methode auf dem Desktop?
Antwort1
Die meisten GUI-Kits verwenden dasselbe Backend PulseAudio. Verwenden Sie es pactl
zum Schreiben von Steuerskripten.
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
So überprüfen Sie die 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
So prüfen Sie die verfügbaren Eingabequellen
$ 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
So überprüfen Sie die Standardeinstellungen
$ 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
So legen Sie den Standardwert fest
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 laufenden Streams verschieben. Verwenden Sie daher:
pacmd move-sink-input <stream-id> <sink-id/name>
Schönes Beispiel zum Abschreiben:Umschalten auf HDMI-Audio, wenn HDMI an einen Laptop angeschlossen ist (14.04)
Manche Karten haben mehrere umschaltbare Ports. Möglicherweise ist der gewünschte Port nicht der Standardport.
Suchen Sie nach 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 legen Sie es fest:
pactl set-sink-port <sink-id/name> <port-name>
Beispiel:
pactl set-sink-port 1 analog-output-headphones
So ändern Sie den Master-Kanal
Gefolgtdieses Tutorialkönnen Sie den Masterkanal qdbus
wie folgt einstellen:
Suchen Sie mit dem folgenden Befehl den Master-Mixer für jedes Ihrer Geräte. Stellen Sie zunächst den Master-Kanal manuell auf den Kanal ein, den Sie überprüfen möchten, und führen Sie dann den Befehl aus:
qdbus org.kde.kmix /Mixers org.kde.KMix.MixSet.currentMasterControl
Verwenden Sie das Ergebnis dieses Befehls und den Audio-Senk, den Sie steuern möchten, und ändern Sie mit der folgenden Syntax Ihren Masterkanal:
qdbus org.kde.kmix /Mixers org.kde.KMix.MixSet.setCurrentMaster "[insert Mixer]" "[insert sink]" 2>&1 > /dev/null
Am Ende sieht das Skript zum Umschalten des gesamten aktuellen Audios auf einen neuen Kanal, zum Festlegen als Standard und zum Einstellen als Masterkanal 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
Antwort2
Dank andiese AntwortIch habe endlich eine Lösung gefunden, siehe die Anleitung unten
Im gemischten Modus immer den HDMI-Ausgang anzeigen Wir werden ein neues Profil erstellen, das die beiden Profile „Analog-Audio“ und „HDMI-Audio“ verknüpft.
Meines Wissens nach
/usr/share/pulseaudio/alsa-mixer/profile-sets/default.conf
listet diese Datei alle Mapping-Profile zwischen Alsa und Pulseaudio auf.
1.Analog profile
Suchen Sie die Zuordnung, die zu Ihrer Definition passt HDMI profile
. (Beschreibung:sollte übereinstimmen mitGeräteprofilegezeigt inLautstärkeKde-Einstellungsmodul)
Für mich sind folgende dabei:
[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 Grundlage der obigen Mapping-Definition habe ich das folgende neue Profil erstellt, das die beiden 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 den KDE-Phonon-Einstellungen > Audio-Hardware-Setup und wählen Sie das neue Profil aus.
Nun sollten beide Profile im gemischten Modus angezeigt werden und Sie können ganz einfach wechseln:
Ich würde vorschlagen, diesen Plasmoid-Mixer zu verwenden:https://store.kde.org/p/1100894/
(zusätzlicher Schritt) Erzwingen Sie die Aktivierung beider Ausgänge
Wenn es Ihnen nichts ausmacht, wenn sowohl der Computerlautsprecher als auch der Fernseher gleichzeitig Ton ausgeben (Sie müssen den Audioausgang also im Grunde nie umschalten).
Sie können die folgende Einstellung auswählen und dann haben Sie einen neuen Eintrag im Mixer
Antwort3
Aufbauend auf vorherigen Kommentaren habe ich das folgende Skript geschrieben und es an einen Hotkey gebunden, der in KDE Plasma verwendet werden kann, um zwischen meinen beiden Audiogeräten umzuschalten. Ich habe lieber die Kontrolle über meine Audioquelle, als diesen Prozess vollständig zu automatisieren.
Ändern Sie Ihre Audiogeräte nach Bedarf. 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
Antwort4
Ich habe überall gesucht ... ich habe nichts gefunden ... Ich habe ein Skript in Python erstellt, verwenden Sie es)
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()