Cambia rapidamente il dispositivo audio in KDE


16

Di recente sono passato a OpenSUSE (con KDE) da Windows e sto ancora attraversando la curva di apprendimento.

Passo abbastanza frequentemente tra l'uso delle cuffie con microfono incorporato e l'uso degli altoparlanti integrati del monitor e del microfono della webcam. Usando il menu Phonon tramite KMix (esempio sotto), sono in grado di riorganizzare i dispositivi per mettere quello che voglio usare in cima, ma preferirei essere in grado di farlo con un tasto di scelta rapida, simile a quello l' applicazione Audio Switcher funziona su Windows. Quando lo faccio, vorrei anche impostare il canale Master su quello nuovo in modo da poter facilmente regolare l'audio.

inserisci qui la descrizione dell'immagine

Esiste un modo attraverso uno script che mi consenta di (a) selezionare al volo una nuova riproduzione audio e un dispositivo di registrazione audio predefiniti, (b) impostando anche il canale principale sullo stesso dispositivo di riproduzione (c) con un tasto di scelta rapida o altro metodo rapido sul desktop?

Risposte:


10

La maggior parte dei kit GUI utilizza lo stesso back-end PulseAudio. Utilizzare pactlper scrivere script di controllo.

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

Fonte: man pactl

  1. Per verificare i sink di output disponibili

    $ 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. Per verificare le fonti di input disponibili

    $ 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. Per verificare l'impostazione predefinita

    $ 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. Per impostare il valore predefinito

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

    Esempio:

    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
    

Appunti:

  • Questo influenzerà solo i nuovi flussi, devi spostare i flussi correnti correnti, quindi usa:

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

    Un bell'esempio da cui copiare: Passaggio a HDMI Audio quando HDMI è collegato a un laptop (14.04)

  • Alcune carte hanno più porte commutabili, può essere quella che desideri non è quella predefinita.

    Controlla le porte disponibili:

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

    Per impostarlo:

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

    Esempio:

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

Per cambiare il canale principale

Seguendo questo tutorial , puoi impostare il canale principale usando qdbuscome segue:

  1. Trova il Master Mixer per ciascuno dei tuoi dispositivi con il seguente comando. Innanzitutto imposta manualmente il canale principale su quello che desideri controllare, quindi esegui il comando:

    qdbus org.kde.kmix /Mixers org.kde.KMix.MixSet.currentMasterControl
    
  2. Utilizzando il risultato di quel comando e il sink audio che desideri controllare, usa la sintassi seguente per cambiare il tuo canale principale:

    qdbus org.kde.kmix /Mixers org.kde.KMix.MixSet.setCurrentMaster "[insert Mixer]" "[insert sink]" 2>&1 > /dev/null
    
  3. Alla fine, lo script per passare tutto l'audio corrente a un nuovo canale, impostarlo come predefinito e impostarlo come canale principale è simile al seguente:

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

Sembra un'ottima risposta, ma non credo che la mia installazione stia usando PulseAudio. Posso usare i comandi, ma l'attuale sorgente e sink predefiniti non sono gli stessi di quelli mostrati nel menu Phonon. E cambiarli sembra non avere alcun effetto.
Ryan,

@Ryan, l'ho appena testato in openSUSE 13.1 KDE, sembra funzionare bene. L'unica cosa che ho notato: il pannello Phonon non aggiorna la sua interfaccia se le impostazioni sono cambiate da PulseAudio. Potresti installare pavucontrolquindi aprire i 3 insieme sullo schermo (terminale w / pactl + pannello pavucontrol + pannello fononico). Prova a cambiare l'impostazione da ciascuno e guarda. A volte, è necessario chiudere il fonon aprendolo di nuovo per vedere il vero stato di impostazione.
user.dz

Ho scoperto che puoi creare un nuovo profilo che collega entrambi i sink insieme e quindi sono sempre visibili pactl list short sinks, vedi la mia risposta di seguito
Francesco

3

Grazie a questa risposta ho finalmente trovato una soluzione, vedere le istruzioni seguenti

Mostra sempre l'uscita HDMI nel misto Creeremo un nuovo profilo che collega entrambi i profili "Audio analogico" e "Audio HDMI".

Dalla mia comprensione di questo file /usr/share/pulseaudio/alsa-mixer/profile-sets/default.conf elenca tutti i profili di mappatura tra Alsa e Pulseaudio.

1.
Trova la mappatura correlata alla tua Analog profilee alla HDMI profiledefinizione. ( descrizione: deve corrispondere ai profili del dispositivo mostrati nel modulo di impostazione Kde del volume audio )

Per me sono i seguenti:

[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.
Sulla base della definizione di Mapping sopra ho creato il seguente nuovo profilo che raggruppa entrambi i precedenti:

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

3.
Riavvia l'audio degli impulsi con questo comando:

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

4.
Vai su Impostazioni fonon KDE> Configurazione hardware audio e seleziona il nuovo profilo. 2 profili nel mixer

Ora dovresti vedere entrambi i profili nel misto e così sarai in grado di passare facilmente:

HDMI è sempre mostrato nel mixer ora
Suggerirei di utilizzare questo mixer plasmoide: https://store.kde.org/p/1100894/

(passaggio aggiuntivo) Forza entrambi gli output abilitati

Se non ti dispiace avere sia l'audio dell'altoparlante del computer sia l'uscita TV allo stesso tempo (quindi sostanzialmente non devi mai cambiare l'uscita audio).

Puoi selezionare l'impostazione seguente e avrai una nuova voce nel mixer

inserisci qui la descrizione dell'immagine


Questo è semplicemente fantastico, funziona come un fascino, grazie!
stsloth,

0

Basandomi sui commenti precedenti, ho scritto il seguente script e lo associo a un tasto di scelta rapida da utilizzare in KDE Plasma per alternare tra i miei due dispositivi audio. Mi piace avere il controllo della mia sorgente audio invece di automatizzare completamente questo processo.

Cambia i tuoi dispositivi audio come appropriato. Utilizzare pactl list short sinksper determinare i dispositivi.

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

La mia situazione è semplice. Ho due output alcuni hdmi e alcuni analogici, quindi in base alla risposta user.dz (grazie) ho scritto questo piccolo script e lo chiamo con le scorciatoie da tastiera.

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

Se hai altre interfacce puoi cercare un pattern univoco nell'output di "pactl list short sink" e chiamare lo script con qualunque parametro tu voglia.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.