Szybko zmień urządzenie audio w KDE

16

Niedawno przełączyłem się na OpenSUSE (z KDE) z Windows i wciąż przechodzę przez krzywą uczenia się.

Dość często przełączam się między używaniem słuchawek z wbudowanym mikrofonem, a używaniem wbudowanych głośników monitora i mikrofonu kamery internetowej. Korzystając z menu Phonon za pomocą KMix (przykład poniżej), mogę zmienić układ urządzeń, aby umieścić to, którego chcę użyć na górze, ale wolałbym móc to zrobić za pomocą skrótu, podobnego do tego aplikacja Audio Switcher działa w systemie Windows. Kiedy to robię, chciałbym również ustawić kanał główny na nowy, aby móc łatwo dostosować dźwięk.

wprowadź opis zdjęcia tutaj

Czy istnieje sposób przez jakiś skrypt, który pozwoliłby mi (a) wybrać nowe domyślne urządzenie do odtwarzania i nagrywania dźwięku w locie, (b) jednocześnie ustawiając kanał główny na to samo urządzenie odtwarzające (c) za pomocą skrótu lub inna szybka metoda na pulpicie?

Ryan
źródło

Odpowiedzi:

10

Większość zestawów GUI używa tego samego zaplecza PulseAudio. Służy pactldo pisania skryptu sterującego.

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

Źródło: man pactl

  1. Aby sprawdzić dostępne ujścia wyjściowe

    $ 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. Aby sprawdzić dostępne źródła wejściowe

    $ 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. Aby sprawdzić domyślne

    $ 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. Aby ustawić domyślne

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

    Przykład:

    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
    

    lub:

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

Uwagi:

  • Wpłynie to tylko na nowe strumienie, musisz przenieść bieżące strumienie, więc użyj:

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

    Fajny przykład do skopiowania z: Przełączanie na HDMI Audio, gdy HDMI jest podłączony do laptopa (14.04)

  • Niektóre karty mają wiele przełączanych portów, być może ten, który chcesz, nie jest domyślny.

    Sprawdź dostępne porty:

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

    Aby ustawić:

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

    Przykład:

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

Aby zmienić kanał główny

Postępując zgodnie z tym samouczkiem , możesz ustawić kanał główny qdbusw następujący sposób:

  1. Znajdź Master Mixer dla każdego ze swoich urządzeń za pomocą następującego polecenia. Najpierw ręcznie ustaw kanał główny na ten, który chcesz sprawdzić, a następnie uruchom polecenie:

    qdbus org.kde.kmix /Mixers org.kde.KMix.MixSet.currentMasterControl
    
  2. Korzystając z wyniku tego polecenia i kontrolera audio, którym chcesz sterować, użyj następującej składni, aby zmienić kanał główny:

    qdbus org.kde.kmix /Mixers org.kde.KMix.MixSet.setCurrentMaster "[insert Mixer]" "[insert sink]" 2>&1 > /dev/null
    
  3. Na koniec skrypt, aby przełączyć cały bieżący dźwięk na nowy kanał, ustawić go jako domyślny i ustawić jako kanał główny, wygląda następująco:

    #!/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
źródło
To wygląda na świetną odpowiedź, ale nie sądzę, że moja instalacja używa PulseAudio. Mogę używać poleceń, ale bieżące domyślne źródło i ujście nie są takie same, jak pokazano w menu Phonon. I ich zmiana wydaje się nie mieć wpływu.
Ryan
@ Ryan, właśnie przetestowałem go w openSUSE 13.1 KDE, wydaje się działać dobrze. Jedyną rzeczą, którą zauważyłem: panel Phonon nie odświeża swojego interfejsu, jeśli ustawienia zostały zmienione z PulseAudio. Czy możesz zainstalować, pavucontrola następnie otwórz 3 razem na ekranie (terminal w / pactl + panel pavucontrol + panel fononu). Spróbuj zmienić ustawienia dla każdego z nich i obserwuj. Czasami musisz zamknąć fonon ponownie go otworzyć, aby zobaczyć rzeczywisty stan ustawień.
user.dz
Dowiedziałem się, że możesz utworzyć nowy profil, który łączy oba zlew razem, dzięki czemu są zawsze widoczne pactl list short sinks, patrz moja odpowiedź poniżej
Francesco
3

Dzięki tej odpowiedzi końcu znalazłem rozwiązanie, patrz poniższa instrukcja

Pokaż zawsze wyjście HDMI w miksie Utworzymy nowy profil, który połączy oba profile „Analog audio” i „HDMI audio”.

Z mojego zrozumienia, ten plik zawiera /usr/share/pulseaudio/alsa-mixer/profile-sets/default.conflistę wszystkich profili mapowania między Alsa i Pulseaudio.

1.
Znajdź mapowanie powiązane z twoją Analog profilei HDMI profiledefinicją. ( opis: powinien pasować do profili urządzeń pokazanych w module ustawień Audio Volume Kde)

Dla mnie są to:

[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.
Na podstawie powyższej definicji mapowania utworzyłem następujący nowy profil grupujący oba powyższe:

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

3.
Uruchom ponownie pulsujący dźwięk za pomocą tego polecenia:

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

4.
Przejdź do ustawień telefonu KDE> Ustawienia sprzętu audio i wybierz nowy profil. 2 profile w mikserze

Teraz powinieneś zobaczyć oba profile w mieszanym, abyś mógł łatwo przełączać:

HDMI jest teraz zawsze wyświetlane w mikserze
Sugerowałbym użycie tego miksera plazmoidalnego: https://store.kde.org/p/1100894/

(dodatkowy krok) Wymuś włączenie obu wyjść

Jeśli nie przeszkadza ci jednoczesne odtwarzanie dźwięku z głośników komputera i telewizora (więc zasadniczo nie musisz nigdy przełączać wyjścia audio).

Możesz wybrać poniższe ustawienie, a wtedy będziesz mieć nowy wpis w mikserze

wprowadź opis zdjęcia tutaj

Francesco
źródło
To jest po prostu świetne, działa jak urok, dziękuję!
stsloth,
0

Opierając się na poprzednich komentarzach, napisałem następujący skrypt i przypisałem go do klawisza skrótu do użycia w KDE Plasma do przełączania między moimi dwoma urządzeniami audio. Lubię mieć kontrolę nad moim źródłem dźwięku, zamiast całkowicie zautomatyzować ten proces.

Zmień odpowiednio swoje urządzenia audio. Służy pactl list short sinksdo określania urządzeń.

#!/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
źródło
0

Moja sytuacja jest prosta. Mam dwa wyjścia trochę HDMI i trochę analogowych, więc na podstawie odpowiedzi user.dz (dzięki) napisałem ten mały skrypt i wywołałem go za pomocą skrótów klawiaturowych.

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

Jeśli masz inne interfejsy, możesz poszukać unikalnego wzorca w danych wyjściowych „krótkich ujść listy pactl” i wywołać skrypt z dowolnym parametrem.

gabor.zed
źródło