เปลี่ยนอุปกรณ์เสียงอย่างรวดเร็วใน KDE


16

ฉันเพิ่งเปลี่ยนมาใช้ OpenSUSE (กับ KDE) จาก Windows และฉันยังคงผ่านช่วงการเรียนรู้

ฉันสลับบ่อยระหว่างการใช้หูฟังกับไมโครโฟนในตัวและการใช้ลำโพงในตัวของจอภาพและไมโครโฟนของเว็บแคม การใช้เมนู Phonon ผ่าน KMix (ตัวอย่างด้านล่าง) ฉันสามารถจัดเรียงอุปกรณ์ใหม่เพื่อวางสิ่งที่ฉันต้องการใช้ด้านบน แต่ฉันต้องการที่จะทำมันด้วยปุ่มลัดคล้ายกับสิ่งที่เสียง Switcherแอพลิเคชันบน Windows ไม่ เมื่อฉันทำฉันต้องการตั้งช่อง Master เป็นช่องใหม่เช่นกันเพื่อให้ฉันสามารถปรับเสียงได้อย่างง่ายดาย

ป้อนคำอธิบายรูปภาพที่นี่

มีวิธีผ่านสคริปต์บางอย่างที่จะอนุญาตให้ฉัน (a) เลือกการเล่นเสียงเริ่มต้นใหม่และอุปกรณ์บันทึกเสียงได้ทันทีหรือไม่ (b) ในขณะที่ยังตั้งค่าช่องสัญญาณหลักเป็นอุปกรณ์การเล่นเดียวกัน (c) ด้วยปุ่มลัดหรือ วิธีการอย่างรวดเร็วอื่น ๆ บนเดสก์ทอป?

คำตอบ:


10

ชุด GUI ส่วนใหญ่ใช้ PulseAudio ส่วนหลังเดียวกัน ใช้pactlเพื่อเขียนสคริปต์ควบคุม

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

ที่มา: man pactl

  1. เพื่อตรวจสอบ sink sink เอาต์พุตที่มีอยู่

    $ 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. เพื่อตรวจสอบแหล่งสัญญาณเข้าที่มีอยู่

    $ 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. เพื่อตรวจสอบค่าเริ่มต้น

    $ 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. เพื่อตั้งค่าเริ่มต้น

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

    ตัวอย่าง:

    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
    

    หรือ:

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

หมายเหตุ:

  • สิ่งนี้จะส่งผลกระทบกับสตรีมใหม่เท่านั้นคุณต้องย้ายสตรีมที่กำลังทำงานอยู่ดังนั้นให้ใช้:

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

    ตัวอย่างที่ดีในการคัดลอกจาก: การสลับเป็นเสียง HDMI เมื่อต่อ HDMI เข้ากับแล็ปท็อป (14.04)

  • การ์ดบางใบมีพอร์ตที่สามารถสลับได้หลายพอร์ตอาจเป็นการ์ดที่คุณต้องการไม่ใช่ค่าเริ่มต้น

    ตรวจสอบพอร์ตที่มี:

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

    วิธีตั้งค่า:

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

    ตัวอย่าง:

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

ในการเปลี่ยน Master Channel

การทำตามบทช่วยสอนนี้คุณสามารถตั้งค่าช่องหลักโดยใช้qdbusดังนี้:

  1. ค้นหา Master Mixer สำหรับอุปกรณ์แต่ละเครื่องของคุณด้วยคำสั่งต่อไปนี้ ขั้นแรกให้ตั้งค่า Master Channel ด้วยตนเองเป็นรายการที่คุณต้องการตรวจสอบจากนั้นเรียกใช้คำสั่ง:

    qdbus org.kde.kmix /Mixers org.kde.KMix.MixSet.currentMasterControl
    
  2. การใช้ผลลัพธ์ของคำสั่งนั้นและชุดเสียงที่คุณต้องการให้คุณใช้ไวยากรณ์ต่อไปนี้เพื่อเปลี่ยนช่องสัญญาณหลักของคุณ:

    qdbus org.kde.kmix /Mixers org.kde.KMix.MixSet.setCurrentMaster "[insert Mixer]" "[insert sink]" 2>&1 > /dev/null
    
  3. ในท้ายที่สุดสคริปต์เพื่อสลับเสียงปัจจุบันทั้งหมดไปยังช่องใหม่ตั้งเป็นค่าเริ่มต้นและตั้งเป็นช่องหลักดูเหมือนว่าต่อไปนี้:

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

ดูเหมือนว่าจะเป็นคำตอบที่ดี แต่ฉันไม่คิดว่าการติดตั้งของฉันกำลังใช้ PulseAudio ฉันสามารถใช้คำสั่งได้ แต่แหล่งที่มาเริ่มต้นและอ่างล้างจานปัจจุบันไม่เหมือนกับสิ่งที่แสดงในเมนู Phonon และการเปลี่ยนพวกมันดูเหมือนจะไม่มีผล
Ryan

@ Ryan ฉันเพิ่งทดสอบใน openSUSE 13.1 KDE ดูเหมือนจะทำงานได้ดี สิ่งเดียวที่ฉันสังเกตเห็น: พาเนล Phonon ไม่รีเฟรชอินเทอร์เฟซหากการตั้งค่าเปลี่ยนจาก PulseAudio คุณสามารถติดตั้งpavucontrolแล้วเปิด 3 พร้อมกันบนหน้าจอ (เทอร์มินัล w / pactl + พาเนลควบคุม pavucontrol + พาเนลแผง) ลองเปลี่ยนการตั้งค่าจากแต่ละรายการแล้วดู บางครั้งคุณจำเป็นต้องปิดการออกเสียงเปิดอีกครั้งเพื่อดูสถานะการตั้งค่าที่แท้จริง
user.dz

ฉันพบว่าคุณสามารถสร้างโปรไฟล์ใหม่ที่เชื่อมโยงทั้งคู่เข้าด้วยกันและเพื่อให้พวกเขามองเห็นได้ตลอดเวลาpactl list short sinksดูคำตอบของฉันด้านล่าง
Francesco

3

ขอบคุณคำตอบนี้ในที่สุดฉันก็พบวิธีแก้ไขดูคำแนะนำด้านล่าง

แสดงเอาต์พุต HDMI แบบผสมเสมอ เราจะสร้างโปรไฟล์ใหม่ที่ลิงก์ทั้งโปรไฟล์ "เสียงอะนาล็อก" และ "เสียง HDMI"

จากความเข้าใจของฉันไฟล์นี้จะ /usr/share/pulseaudio/alsa-mixer/profile-sets/default.confแสดงรายการการทำแผนที่โปรไฟล์ทั้งหมดระหว่าง Alsa และ Pulseaudio

1.
ค้นหาการทำแผนที่ที่เกี่ยวข้องกับคุณAnalog profileและHDMI profileความหมาย ( คำอธิบาย:ควรตรงกับโปรไฟล์อุปกรณ์ที่แสดงในโมดูลการตั้งค่าAudio Volume Kde)

สำหรับฉันมีดังต่อไปนี้:

[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.
บนพื้นฐานของคำจำกัดความการแม็พด้านบนฉันได้สร้างโปรไฟล์ใหม่ต่อไปนี้ที่จัดกลุ่มทั้งคู่ข้างบน:

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

3.
รีสตาร์ทชีพจรเสียงด้วยคำสั่งนี้:

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

4.
ไปที่การตั้งค่าโทรศัพท์ KDE> การตั้งค่าฮาร์ดแวร์เสียงและเลือกโปรไฟล์ใหม่ 2 โปรไฟล์ในเครื่องผสม

ตอนนี้คุณควรเห็นโปรไฟล์ทั้งสองแบบผสมดังนั้นคุณจะสามารถสลับได้อย่างง่ายดาย:

ตอนนี้ HDMI จะแสดงในมิกเซอร์เสมอ
ฉันขอแนะนำให้ใช้ตัวผสมพลาสลอยด์นี้: https://store.kde.org/p/1100894/

(ขั้นตอนพิเศษ) บังคับให้เปิดใช้งานเอาต์พุตทั้งสอง

หากคุณไม่คิดว่าจะต้องมีทั้งลำโพงคอมพิวเตอร์และเสียงออกทีวีในเวลาเดียวกัน (โดยทั่วไปคุณไม่จำเป็นต้องสลับสัญญาณเสียงไปเลย

คุณสามารถเลือกการตั้งค่าด้านล่างแล้วคุณจะมีรายการใหม่ในตัวผสม

ป้อนคำอธิบายรูปภาพที่นี่


นี่ยอดเยี่ยมมากใช้งานได้อย่างมีเสน่ห์ขอบคุณ!
stsloth

0

เมื่อสร้างความคิดเห็นก่อนหน้านี้ฉันได้เขียนสคริปต์ต่อไปนี้และผูกไว้กับฮอตคีย์เพื่อใช้ใน KDE Plasma เพื่อสลับระหว่างอุปกรณ์เสียงทั้งสองของฉัน ฉันชอบที่จะควบคุมแหล่งกำเนิดเสียงของฉันเมื่อเทียบกับกระบวนการนี้โดยอัตโนมัติ

เปลี่ยนอุปกรณ์เสียงของคุณตามความเหมาะสม ใช้pactl list short sinksเพื่อกำหนดอุปกรณ์ของคุณ

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

สถานการณ์ของฉันง่าย ฉันมีสองเอาต์พุต hdmi และอะนาล็อกบางส่วนดังนั้นตามคำตอบ user.dz (ขอบคุณ) ฉันเขียนสคริปต์นี้เล็กน้อยและเรียกมันด้วยแป้นพิมพ์ลัด

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

หากคุณมีอินเทอร์เฟซอื่นคุณสามารถค้นหารูปแบบเฉพาะในเอาต์พุต "pactl list short sinks" และเรียกใช้สคริปต์ด้วยพารามิเตอร์ใด ๆ ที่คุณต้องการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.