อุปกรณ์ส่งสัญญาณเสียงสวิตช์เร็ว?


19

ขึ้นอยู่กับสถานการณ์ฉันใช้ทั้งลำโพงหรือชุดหูฟังสำหรับสัญญาณเสียง เมื่อระบุว่าชุดหูฟังของฉันเป็นชุดหูฟัง USB มันจะทำงานเป็นอุปกรณ์เสียงของตัวเอง

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

สิ่งที่ฉันสงสัยคือถ้ามีวิธีที่ง่ายกว่า / เร็วกว่าในการสลับไปมาเป็นชุดหูฟัง USB ของฉัน บางทีไอคอนถาดเฉพาะการจับคู่คีย์หรือเป็นเช่นนั้น?

ฉันใช้ Ubuntu 10.04 กับเดสก์ท็อป Gnome เริ่มต้น

คำตอบ:


11

ในการเปลี่ยนอุปกรณ์เอาต์พุตเสียงเริ่มต้นจากบรรทัดคำสั่งคุณสามารถใช้pacmdยูทิลิตีบรรทัดคำสั่ง Pulse Audio

ฉันพบว่าจำเป็นต้องทำเช่นเดียวกันในวันนี้ต้องการสลับระหว่างหูฟังและลำโพงทั้งสองเสียบเข้ากับการ์ดเสียงแยก นี่คือเชลล์สคริปต์ที่ฉันเขียนถึง:

#!/usr/bin/env bash

sinks=($(pacmd list-sinks | grep index | \
    awk '{ if ($1 == "*") print "1",$3; else print "0",$2 }'))
inputs=($(pacmd list-sink-inputs | grep index | awk '{print $2}'))

[[ ${sinks[0]} = 0 ]] && swap=${sinks[1]} || swap=${sinks[3]}

pacmd set-default-sink $swap &> /dev/null
for i in ${inputs[*]}; do pacmd move-sink-input $i $swap &> /dev/null; done

หมายเหตุ:

  • สิ่งนี้สลับระหว่างอุปกรณ์เอาต์พุตเสียงสองตัวแรกที่pacmdยูทิลิตีแสดงรายการ หากคุณมีอุปกรณ์เสียงมากกว่าสองเครื่องและต้องการสลับเป็นอุปกรณ์อื่นคุณจะต้องเปลี่ยนตรรกะในบรรทัดที่ 7 ด้วยเงื่อนไขบางอย่าง
  • เพียงแค่การแลกเปลี่ยนอุปกรณ์ซิงค์เริ่มต้นจะไม่ทำอะไรเลยสำหรับแอปพลิเคชั่นที่กำลังทำงานอยู่ - พวกมันจะยังคงส่งออกไปยังอุปกรณ์ก่อนหน้า สคริปต์นี้ยังย้ายปลายทางการซิงค์สำหรับอินพุตที่มีอยู่ทั้งหมด นั่นคือถ้าคุณเรียกใช้สคริปต์นี้ด้วยการเล่นเพลงบนอุปกรณ์หนึ่งมันจะสลับไปยังอุปกรณ์อื่นทันที หากคุณต้องการให้แอปพลิเคชันที่มีอยู่ดำเนินการต่อในอุปกรณ์ก่อนหน้าให้แสดงความคิดเห็นในบรรทัดสุดท้าย (และบรรทัดที่ 5 หากคุณต้องการ)

7

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


2
คุณจะตั้งค่าอุปกรณ์เริ่มต้นใน Ubuntu ได้อย่างไร
blueyed

3

คำถามนี้ค่อนข้างเก่า แต่คำตอบของฉันอาจยังคงมีประโยชน์สำหรับผู้ใช้ GNOME 2 ฉันใช้PulseAudio Mixer Appletสำหรับปัญหาตรงตามที่อธิบายไว้ที่นี่ คุณสามารถเปลี่ยนอุปกรณ์อินพุตและเอาต์พุตได้จากเมนูพาเนล มันเป็นวิธีที่สะดวกที่สุดที่ฉันพบ


3

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

อย่างไรก็ตาม. แอนดรูว์พูดว่า:

หากคุณมีอุปกรณ์เสียงมากกว่าสองเครื่องและต้องการเปลี่ยนเป็นอุปกรณ์อื่นคุณจะต้องเปลี่ยนตรรกะในบรรทัดที่ 7 ด้วยเงื่อนไขบางอย่าง

นั่นคือสิ่งที่ฉันทำ ฉันแบ่งปันในกรณีที่มีคนมีปัญหา:

#!/usr/bin/env bash

#sinks=($(pacmd list-sinks | grep index | \
#    awk '{ if ($1 == "*") print "1",$3; else print "0",$2 }'))
sinks=($(pacmd list-sinks | grep index | \
    awk '{ if ($1 == "*") print "1"; else print "0" }'))
inputs=($(pacmd list-sink-inputs | grep index | awk '{print $2}'))

#find active sink
active=0
for i in ${sinks[*]}
do
    if [ $i -eq 0 ]
        then active=$((active+1))
        else break
    fi
done

#switch to next sink
swap=$(((active+1)%${#sinks[@]}))

pacmd set-default-sink $swap &> /dev/null
for i in ${inputs[*]}; do pacmd move-sink-input $i $swap &> /dev/null; done

สิ่งที่ฉันทำแตกต่างกันคือ a) หา sink ที่แอ็คทีฟใน for for loop และ b) สลับไปที่ sink ถัดไปโดยเพิ่มดัชนีโดย 1 จากนั้นฉัน modulo ผลลัพธ์ตามจำนวน sinks รับรองว่าเช่นเมื่อมี 3 อ่าง (2 + 1)% 3 = 0 ดังนั้นจาก sink index 2 เราจะเปลี่ยนไปที่ sink index 0

ด้วยวิธีนี้สวิตช์ช่วยให้สามารถเลื่อนขึ้นด้านบนผ่าน sinks ที่พร้อมใช้งาน


2

ขอบคุณสำหรับสคริปต์! ฉันได้เพิ่มส่วนหนึ่งสำหรับอินพุต (ไมโครโฟน) เช่นกันในกรณีที่ทุกคนต้องการใช้:

while read line ; do
  case $line in 
    *\*\ index*) x=1 ;;
    index*) x=0 ;;
    name*) 
      source=$(echo $line | sed -e "s/.*<//;s/>.*//")
      if [[ $x = "0" ]] ; then
        pacmd set-default-source $source &> /dev/null
      fi ;;
  esac
done < <(pacmd list-sources | grep -e alsa_input -e index)

2

ในการวนรอบรายการอุปกรณ์เสียงของคุณใช้สคริปต์ต่อไปนี้:

#!/bin/bash

declare -i sinks=(`pacmd list-sinks | sed -n -e 's/\**[[:space:]]index:[[:space:]]\([[:digit:]]\)/\1/p'`)
declare -i sinks_count=${#sinks[*]}
declare -i active_sink_index=`pacmd list-sinks | sed -n -e 's/\*[[:space:]]index:[[:space:]]\([[:digit:]]\)/\1/p'`
declare -i next_sink_index=${sinks[0]}

#find the next sink (not always the next index number)
declare -i ord=0
while [ $ord -lt $sinks_count ];
do
echo ${sinks[$ord]}
if [ ${sinks[$ord]} -gt $active_sink_index ] ; then
    next_sink_index=${sinks[$ord]}
    break
fi
let ord++
done

#change the default sink
pacmd "set-default-sink ${next_sink_index}"

#move all inputs to the new sink
for app in $(pacmd list-sink-inputs | sed -n -e 's/index:[[:space:]]\([[:digit:]]\)/\1/p');
do
pacmd "move-sink-input $app $next_sink_index"
done

#display notification
declare -i ndx=0
pacmd list-sinks | sed -n -e 's/device.description[[:space:]]=[[:space:]]"\(.*\)"/\1/p' | while read line;
do
if [ $(( $ord % $sinks_count )) -eq $ndx ] ; then
    notify-send -i notification-audio-volume-high --hint=string:x-canonical-private-    synchronous: "Sound output switched to" "$line"
    exit
fi
let ndx++
done;

เครดิตทั้งหมดไปที่ Tsvetan จากฟอรั่มอูบุนตู


1

ฉันกำลังมองหาวิธีที่จะทำเช่นนี้เพื่อสลับระหว่างลำโพงภายในบนแล็ปท็อปของฉันและสถานีฐานสนามบินแอปเปิ้ลซึ่งเสียบเข้ากับสเตอริโอของฉัน ฉันตัดสินใจมอบหมายปุ่มลัดเพื่อสลับ ฉันต้องการให้หน้าต่างการตั้งค่าเสียงปรากฏขึ้นเป็นวินาทีเพื่อให้การยืนยันภาพของสวิตช์และใช้ wmctrl เพื่อปิดหน้าต่างหลังจากนั้น

(ฉันใช้ ctrl + F8 และ ctrl + F9 เป็นปุ่มลัดเนื่องจากฟังก์ชั่น Fn ของปุ่มเหล่านี้บนแล็ปท็อปของฉันคือการเพิ่มและลดระดับเสียงดังนั้นจึงดูเหมือนชัดเจนว่าการทำงานของ ctrl เปลี่ยนเสียงออก)

ฉันใช้สคริปต์ 2 (เกือบเหมือนกัน) ต่อไปนี้:

#! /bin/bash
gnome-volume-control -p output &
sleep .7 
pacmd set-default-sink 1
sleep .8 
wmctrl -c "Sound Preferences"
exit

#! /bin/bash
gnome-volume-control -p output &
sleep .7 
pacmd set-default-sink 0
sleep .8 
wmctrl -c "Sound Preferences"
exit

การเปลี่ยนแปลงครั้งแรกของสถานีฐานแอปเปิ้ล (ซึ่งฉันกำหนดให้ ctrl + F9) และอันที่สองเปลี่ยนกลับไปเป็นลำโพงภายใน (ctrl + F8) นี่ถือว่าเป็นอุปกรณ์เอาต์พุต 2 ตัวเท่านั้นที่ติดตั้ง


1

ฉันสร้างสคริปต์ของ Andrews เพื่อให้ใช้ alert-osd เพื่อประกาศสิ่งที่เพิ่งทำ แก้ไขบรรทัดด้วยชื่อหลังจากที่คุณต้องการ

#!/usr/bin/env bash

sinks=($(pacmd list-sinks | grep index | \
    awk '{ if ($1 == "*") print "1",$3; else print "0",$2 }'))
inputs=($(pacmd list-sink-inputs | grep index | awk '{print $2}'))

[[ ${sinks[0]} = 0 ]] && swap=${sinks[1]} || swap=${sinks[3]}

pacmd set-default-sink $swap 

for i in ${inputs[*]}; do pacmd move-sink-input $i $swap &> /dev/null; done

if [ "$swap" = "0" ]; then
notify-send -u normal -i audio-volume-medium-symbolic "Sound output changed. Now using: Corsair 2.1 Speakers!" 

else
notify-send -u normal -i audio-volume-medium-symbolic "Sound output changed. Now using: Logitech G930 Headset!" 

fi


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