Ubah perangkat audio dengan cepat di KDE

16

Saya baru-baru ini beralih ke OpenSUSE (dengan KDE) dari Windows, dan saya masih melalui kurva pembelajaran.

Saya cukup sering berganti antara menggunakan headphone saya dengan mikrofon internal, dan menggunakan speaker internal monitor saya dan mikrofon webcam saya. Dengan menggunakan menu Phonon melalui KMix (contoh di bawah), saya dapat mengatur ulang perangkat untuk meletakkan perangkat yang ingin saya gunakan di atas, tetapi saya lebih memilih untuk dapat melakukannya dengan hotkey, mirip dengan apa yang aplikasi Audio Switcher tidak pada Windows. Ketika saya melakukannya, saya juga ingin mengatur saluran Master ke yang baru juga sehingga saya dapat dengan mudah mengatur audio.

masukkan deskripsi gambar di sini

Apakah ada cara melalui beberapa skrip yang akan memungkinkan saya untuk (a) memilih pemutaran audio default baru dan perangkat perekaman audio dengan cepat, (b) sambil juga mengatur saluran master ke perangkat pemutaran yang sama (c) dengan hotkey atau Metode cepat lain di desktop?

Ryan
sumber

Jawaban:

10

Sebagian besar kit GUI menggunakan PulseAudio backend yang sama. Gunakan pactluntuk menulis skrip kontrol.

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

Sumber: man pactl

  1. Untuk memeriksa keluaran yang tersedia

    $ 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. Untuk memeriksa sumber input yang tersedia

    $ 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. Untuk memeriksa default

    $ 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. Untuk mengatur default

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

    Contoh:

    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
    

    atau:

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

Catatan:

  • Ini hanya akan memengaruhi aliran baru, Anda harus memindahkan aliran yang sedang berjalan, jadi gunakan:

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

    Contoh yang bagus untuk menyalin: Beralih ke HDMI Audio ketika HDMI dicolokkan ke laptop (14.04)

  • Beberapa kartu memiliki beberapa port switchable, Mungkin yang Anda inginkan bukan default.

    Periksa port yang tersedia:

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

    Untuk mengaturnya:

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

    Contoh:

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

Untuk mengubah Master Channel

Mengikuti tutorial ini , Anda dapat mengatur saluran master menggunakan qdbussebagai berikut:

  1. Temukan Master Mixer untuk masing-masing perangkat Anda dengan perintah berikut. Pertama-tama atur Master Channel secara manual ke yang ingin Anda periksa, kemudian jalankan perintah:

    qdbus org.kde.kmix /Mixers org.kde.KMix.MixSet.currentMasterControl
    
  2. Menggunakan hasil dari perintah itu dan wastafel audio yang ingin Anda kontrol, gunakan sintaks berikut untuk mengubah saluran master Anda:

    qdbus org.kde.kmix /Mixers org.kde.KMix.MixSet.setCurrentMaster "[insert Mixer]" "[insert sink]" 2>&1 > /dev/null
    
  3. Pada akhirnya, skrip untuk mengalihkan semua audio saat ini ke saluran baru, menetapkannya sebagai default, dan mengaturnya sebagai saluran induk terlihat seperti berikut:

    #!/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
sumber
Ini sepertinya jawaban yang bagus, tapi saya rasa instalasi saya tidak menggunakan PulseAudio. Saya dapat menggunakan perintah, tetapi sumber default dan sink tidak sama dengan apa yang ditampilkan dalam menu Phonon. Dan mengubahnya sepertinya tidak berpengaruh.
Ryan
@Ryan, saya baru mengujinya di openSUSE 13.1 KDE, sepertinya berfungsi dengan baik. Satu-satunya hal yang saya perhatikan: panel Phonon tidak menyegarkan antarmuka jika pengaturan berubah dari PulseAudio. Bisakah Anda menginstal pavucontrolkemudian membuka 3 bersama-sama di layar (terminal w / pactl + panel pavucontrol + panel phonon). Cobalah untuk mengubah pengaturan dari masing-masing dan menonton. Kadang-kadang, Anda perlu menutup phonon di buka lagi untuk melihat ke pengaturan nyata.
user.dz
Saya mengetahui bahwa Anda dapat membuat profil baru yang menghubungkan keduanya secara bersamaan sehingga mereka selalu terlihat pactl list short sinks, lihat jawaban saya di bawah ini
Francesco
3

Berkat jawaban ini, saya akhirnya menemukan solusi, lihat instruksi di bawah ini

Tampilkan selalu keluaran HDMI dalam campuran. Kami akan membuat profil baru yang menautkan kedua profil "Audio analog" dan "Audio HDMI".

Dari pemahaman saya, file ini /usr/share/pulseaudio/alsa-mixer/profile-sets/default.confmencantumkan semua profil pemetaan antara Alsa dan Pulseaudio.

1.
Temukan pemetaan yang terkait dengan definisi Analog profiledan Anda HDMI profile. ( keterangan: harus cocok dengan Profil Perangkat yang ditampilkan dalam modul pengaturan Audio Volume Kde)

Bagi saya adalah sebagai berikut:

[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.
Atas dasar definisi Pemetaan di atas, saya telah membuat profil baru berikut yang mengelompokkan keduanya di atas:

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

3.
Mulai ulang audio pulsa dengan perintah ini:

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

4.
Buka pengaturan fonon KDE> Pengaturan Perangkat Keras Audio dan pilih profil baru. 2 profil dalam mixer

Sekarang Anda akan melihat kedua profil dalam campuran sehingga Anda dapat beralih dengan mudah:

HDMI selalu ditampilkan dalam mixer sekarang
Saya akan menyarankan untuk menggunakan mixer plasmoid ini: https://store.kde.org/p/1100894/

(langkah ekstra) Memaksa kedua output diaktifkan

Jika Anda tidak keberatan memiliki speaker komputer dan audio output TV dalam waktu bersamaan (jadi pada dasarnya Anda tidak perlu mengganti output audio sebelumnya).

Anda dapat memilih pengaturan di bawah ini dan kemudian Anda akan memiliki entri baru di mixer

masukkan deskripsi gambar di sini

Francesco
sumber
Ini luar biasa, bekerja seperti pesona, terima kasih!
stsloth
0

Membangun berdasarkan komentar sebelumnya, saya menulis skrip berikut dan mengikatnya ke hotkey untuk digunakan di KDE Plasma untuk beralih di antara dua perangkat audio saya. Saya suka memiliki kontrol sumber audio saya sebagai lawan untuk sepenuhnya mengotomatisasi proses ini.

Ubah perangkat audio Anda jika perlu. Gunakan pactl list short sinksuntuk menentukan perangkat Anda.

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

Situasi saya sederhana. Saya memiliki dua keluaran, beberapa HDMI dan beberapa analog, jadi berdasarkan jawaban user.dz (terima kasih) saya menulis skrip kecil ini dan menyebutnya dengan pintasan keyboard.

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

Jika Anda memiliki antarmuka lain, Anda dapat mencari pola unik di keluaran "pactl list sinks" dan memanggil skrip dengan parameter apa pun yang Anda inginkan.

gabor.zed
sumber