Perangkat keluaran audio, sakelar cepat?

19

Bergantung pada situasinya, saya menggunakan speaker atau headset untuk output audio. Mengingat headset saya adalah headset USB berperilaku sebagai perangkat audio sendiri.

Saat ini saya beralih di antara perangkat output audio dengan mengklik ikon speaker di baki kanan atas, tempat saya memilih pengaturan Suara, pergi ke tab Output dan memilih perangkat yang saya inginkan.

Yang saya heran adalah apakah mungkin ada cara yang lebih mudah / lebih cepat untuk bolak-balik ke headset USB saya? Mungkin ikon baki khusus, pemetaan kunci, atau lebih?

Saya menjalankan Ubuntu 10.04, dengan desktop Gnome default.

andol
sumber

Jawaban:

11

Untuk mengubah perangkat output audio default dari baris perintah, Anda dapat menggunakan pacmdutilitas baris perintah Pulse Audio.

Saya menemukan kebutuhan untuk melakukan hal yang sama hari ini, ingin beralih antara headphone dan speaker, keduanya dicolokkan ke kartu audio yang terpisah. Inilah skrip shell yang saya tulis untuk melakukannya:

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

Catatan:

  • Ini bertukar antara dua perangkat output audio pertama yang pacmddicantumkan oleh utilitas. Jika Anda memiliki lebih dari dua perangkat audio dan ingin bertukar ke perangkat lain, Anda harus mengganti logika on line 7 dengan beberapa persyaratan.
  • Hanya menukar perangkat bak cuci standar tidak melakukan apa pun untuk aplikasi yang sedang berjalan - mereka akan terus mengeluarkan keluaran ke perangkat sebelumnya. Script ini juga memindahkan tujuan wastafel untuk semua input yang ada. Yaitu, jika Anda menjalankan skrip ini dengan musik yang diputar di satu perangkat, itu akan langsung bertukar ke yang lain. Jika Anda ingin aplikasi yang ada melanjutkan pada perangkat sebelumnya, beri komentar pada baris terakhir (dan baris 5, jika Anda mau).
Andrew
sumber
7

Nah, Anda dapat menginstal pavucontrol, ini menunjukkan aplikasi dengan pemilihan perangkat suara pada tab pertama, itu akan menghemat usaha. Tapi apa yang sebenarnya Anda inginkan adalah menandai Anda sebagai headset USB sebagai perangkat default, maka setiap kali Anda mencolokkan semua suara akan dialihkan ke sana, dan ketika Anda memasangnya - itu akan kembali ke speaker. Mudah, sungguh.

vava
sumber
2
Bagaimana Anda mengatur perangkat default di Ubuntu Precise?
blueyed
3

Pertanyaannya cukup lama tetapi jawaban saya mungkin masih berguna untuk pengguna GNOME 2. Saya menggunakan PulseAudio Mixer Applet untuk masalah persis yang dijelaskan di sini. Anda dapat mengubah perangkat input dan output tepat di menu panel. Ini cara paling nyaman yang saya temukan.

dAnjou
sumber
3

Tentu saja berpindah perangkat dengan menggunakan Applet juga berfungsi dengan baik. Tetapi hal yang paling keren tentang penulisan skrip adalah bahwa ia sangat cepat. Saya menempatkan milik saya misalnya di alt + s pintasan keyboard. jadi ketika saya ingin beralih dari headphone ke speaker, saya hanya perlu menekan alt + s.

Bagaimanapun. Andrew berkata:

Jika Anda memiliki lebih dari dua perangkat audio dan ingin bertukar ke perangkat lain, Anda harus mengganti logika on line 7 dengan beberapa persyaratan.

Itu yang saya lakukan. Saya membagikannya, kalau-kalau ada yang bermasalah:

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

Apa yang saya lakukan secara berbeda adalah a) menemukan wastafel aktif dalam for for loop. Dan b) beralih ke bak cuci berikutnya dengan menambah indeks dengan 1. Lalu saya modulo hasilnya dengan jumlah bak cuci. Itu meyakinkan bahwa misalnya ketika memiliki 3 tenggelam, (2 + 1)% 3 = 0. Jadi dari indeks sink 2 kita akan beralih ke indeks sink 0.

Dengan cara ini saklar memungkinkan untuk bergerak ke atas melalui bak cuci yang tersedia.

traumtaenzer
sumber
2

Terima kasih untuk skripnya! Saya menambahkan bagian untuk input (mikrofon) juga kalau-kalau ada yang ingin menggunakannya:

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)
Subbeh
sumber
2

Untuk menelusuri daftar perangkat suara Anda, gunakan skrip berikut:

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

Semua kredit diberikan ke tsvetan dari forum Ubuntu .

Guttermonk
sumber
1

Saya sedang mencari cara untuk melakukan ini untuk beralih antara speaker internal di laptop saya dan stasiun pangkalan bandara apple yang dicolokkan ke stereo saya. Saya memutuskan untuk menugaskan hotkey untuk berganti. Saya ingin jendela preferensi audio muncul sebentar untuk memberikan konfirmasi visual dari sakelar dan menggunakan wmctrl untuk menutup jendela sesudahnya.

(Saya menggunakan ctrl + F8 dan ctrl + F9 sebagai tombol pintas karena fungsi Fn dari tombol-tombol ini pada laptop saya adalah untuk menambah dan mengurangi volume sehingga tampak jelas memiliki fungsi ctrl mengubah output audio.)

Saya menggunakan 2 skrip (hampir identik) berikut:

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

Perubahan pertama ke stasiun basis apel (yang saya tetapkan untuk ctrl + F9) dan yang kedua beralih kembali ke pengeras suara internal (ctrl + F8). Ini mengasumsikan bahwa ini adalah satu-satunya 2 perangkat output yang diinstal.


sumber
1

Saya membuat skrip Andrews untuk membuatnya menggunakan notify-osd untuk mengumumkan apa yang baru saja dilakukan. Edit garis dengan nama sesuai kebutuhan Anda.

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