Thay đổi nhanh thiết bị âm thanh trong KDE


16

Gần đây tôi đã chuyển sang OpenSUSE (với KDE) từ Windows và tôi vẫn đang tiếp tục quá trình học tập.

Tôi chuyển đổi khá thường xuyên giữa việc sử dụng tai nghe có micrô tích hợp và sử dụng loa tích hợp trên màn hình và micrô của webcam. Sử dụng menu Phonon thông qua KMix (ví dụ bên dưới), tôi có thể sắp xếp lại các thiết bị để đặt thiết bị tôi muốn sử dụng lên hàng đầu, nhưng tôi thích có thể làm điều đó bằng phím nóng, tương tự như những gì những âm thanh Switcher ứng dụng nào trên Windows. Khi tôi làm điều đó, tôi cũng muốn đặt kênh Master thành kênh mới để tôi có thể dễ dàng điều chỉnh âm thanh.

nhập mô tả hình ảnh ở đây

Có cách nào thông qua một số tập lệnh cho phép tôi (a) chọn một thiết bị phát lại âm thanh và phát âm thanh mặc định mới khi đang di chuyển, (b) đồng thời đặt kênh chính cho cùng một thiết bị phát lại đó bằng một phím nóng hoặc phương pháp nhanh khác trên máy tính để bàn?

Câu trả lời:


10

Hầu hết các bộ công cụ GUI sử dụng cùng một phụ trợ PulseAudio. Sử dụng pactlđể viết kịch bản điều khiển.

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

Nguồn: man pactl

  1. Để kiểm tra bồn đầu ra có sẵn

    $ 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. Để kiểm tra các nguồn đầu vào có sẵn

    $ 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. Để kiểm tra mặc định

    $ 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. Để đặt mặc định

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

    Thí dụ:

    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
    

    hoặc là:

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

Ghi chú:

  • Điều này sẽ chỉ ảnh hưởng đến các luồng mới, bạn phải di chuyển các luồng đang chạy hiện tại, vì vậy hãy sử dụng:

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

    Ví dụ hay để sao chép từ: Chuyển sang HDMI Audio khi HDMI được cắm vào máy tính xách tay (14.04)

  • Một số thẻ có nhiều cổng có thể chuyển đổi, có thể là cổng bạn muốn không phải là mặc định.

    Kiểm tra các cổng có sẵn:

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

    Để đặt nó:

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

    Thí dụ:

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

Để thay đổi Kênh chính

Theo hướng dẫn này , bạn có thể đặt kênh chính bằng cách sử dụng qdbusnhư sau:

  1. Tìm Trình trộn chính cho mỗi thiết bị của bạn bằng lệnh sau. Trước tiên, hãy đặt thủ công Kênh chính thành kênh bạn muốn kiểm tra, sau đó chạy lệnh:

    qdbus org.kde.kmix /Mixers org.kde.KMix.MixSet.currentMasterControl
    
  2. Sử dụng kết quả của lệnh đó và âm thanh chìm bạn muốn bạn điều khiển, sử dụng cú pháp sau để thay đổi kênh chính của bạn:

    qdbus org.kde.kmix /Mixers org.kde.KMix.MixSet.setCurrentMaster "[insert Mixer]" "[insert sink]" 2>&1 > /dev/null
    
  3. Cuối cùng, tập lệnh chuyển tất cả âm thanh hiện tại sang một kênh mới, đặt nó làm mặc định và đặt nó làm kênh chính trông như sau:

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

Đây có vẻ là một câu trả lời tuyệt vời, nhưng tôi không nghĩ cài đặt của mình đang sử dụng PulseAudio. Tôi có thể sử dụng các lệnh, nhưng nguồn và chìm mặc định hiện tại không giống như những gì được hiển thị trong menu Phonon. Và thay đổi chúng dường như không có hiệu lực.
Ryan

@Ryan, tôi vừa thử nghiệm nó trong openSUSE 13.1 KDE, dường như hoạt động tốt. Điều duy nhất tôi nhận thấy: bảng Phonon không làm mới giao diện của nó nếu cài đặt thay đổi từ PulseAudio. Bạn có thể cài đặt pavucontrolsau đó mở 3 cái trên màn hình (terminal w / pactl + pavucontrol panel + phonon panel). Cố gắng thay đổi cài đặt từ mỗi người và xem. Đôi khi, bạn cần đóng phonon mở lại để xem trạng thái cài đặt thực.
user.dz

Tôi phát hiện ra rằng bạn có thể tạo một hồ sơ mới liên kết cả hai cùng nhau và vì vậy chúng luôn hiển thị pactl list short sinks, xem câu trả lời của tôi dưới đây
Francesco

3

Nhờ câu trả lời này, cuối cùng tôi đã tìm thấy một giải pháp, xem hướng dẫn bên dưới

Hiển thị luôn đầu ra HDMI trong hỗn hợp Chúng tôi sẽ tạo một cấu hình mới liên kết cả hai cấu hình "Âm thanh tương tự" và "Âm thanh HDMI".

Theo hiểu biết của tôi, tập tin này /usr/share/pulseaudio/alsa-mixer/profile-sets/default.confliệt kê tất cả các hồ sơ ánh xạ giữa Alsa và Pulseaudio.

1.
Tìm ánh xạ có liên quan đến Analog profileHDMI profileđịnh nghĩa của bạn . ( mô tả: phải khớp với Cấu hình thiết bị được hiển thị trong mô-đun cài đặt Âm lượng âm thanh )

Đối với tôi là như sau:

[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.
Trên cơ sở định nghĩa Ánh xạ ở trên, tôi đã tạo hồ sơ mới sau đây nhóm cả hai cấu hình trên:

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

3.
Khởi động lại âm thanh xung bằng lệnh này:

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

4.
Chuyển đến cài đặt phonon KDE> Cài đặt phần cứng âm thanh và chọn cấu hình mới. 2 hồ sơ trong máy trộn

Bây giờ bạn sẽ thấy cả hai hồ sơ trong hỗn hợp và do đó bạn sẽ có thể chuyển đổi dễ dàng:

HDMI luôn được hiển thị trong bộ trộn ngay bây giờ
Tôi sẽ đề nghị sử dụng máy trộn plasmoid này: https://store.kde.org/p/1100894/

(bước thêm) Buộc bật cả hai đầu ra

Nếu bạn không phiền khi có cả loa máy tính và âm thanh đầu ra TV cùng một lúc (vì vậy về cơ bản, bạn không phải chuyển đổi đầu ra âm thanh bao giờ).

Bạn có thể chọn cài đặt bên dưới và sau đó bạn sẽ có một mục mới trong trình trộn

nhập mô tả hình ảnh ở đây


Điều này thật tuyệt vời, hoạt động như một cơ duyên, cảm ơn bạn!
lở đất

0

Dựa trên các nhận xét trước đó, tôi đã viết đoạn script sau và liên kết nó với một phím nóng để sử dụng trong KDE Plasma để chuyển đổi giữa hai thiết bị âm thanh của mình. Tôi thích kiểm soát nguồn âm thanh của mình thay vì tự động hóa hoàn toàn quy trình này.

Thay đổi thiết bị âm thanh của bạn khi thích hợp. Sử dụng pactl list short sinksđể xác định thiết bị của bạn.

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

Tình hình của tôi rất đơn giản. Tôi có hai đầu ra một số hdmi và một số tương tự, vì vậy dựa trên câu trả lời của user.dz (cảm ơn) Tôi đã viết đoạn script nhỏ này và gọi nó bằng phím tắt.

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

Nếu bạn có các giao diện khác, bạn có thể tìm mẫu duy nhất trong đầu ra "pactl list short chìm" và gọi tập lệnh với bất kỳ tham số nào bạn muốn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.