Ses çıkış cihazı, hızlı geçiş?


19

Duruma bağlı olarak ses çıkışı için hoparlörlerimi veya kulaklığımı kullanıyorum. Kulaklığımın bir USB kulaklık olduğu göz önüne alındığında, kendi ses cihazı gibi davranır.

Şu anda, ses ayarlarını seçtiğim sağ üst tepsideki hoparlör simgesine tıklayarak ses çıkış aygıtları arasında geçiş yapıyorum, Çıkış sekmesine gidiyor ve istediğim aygıtı seçiyorum.

USB kulaklığım arasında geçiş yapmanın daha kolay / hızlı bir yolu olup olmadığını merak ediyorum. Belki de özel bir tepsi simgesi, bir anahtar haritalama, vb.?

Ubuntu 10.04'ü varsayılan Gnome masaüstüyle çalıştırıyorum.

Yanıtlar:


11

Varsayılan ses çıkış aygıtını komut satırından değiştirmek için, pacmdDarbeli Ses komut satırı yardımcı programını kullanabilirsiniz.

Her ikisi de ayrı ses kartlarına takılı kulaklıklar ve hoparlörler arasında geçiş yapmak isteyen bugün de benzer şekilde yapma ihtiyacını buldum. İşte bunu yapmak için yazdım kabuk komut dosyası:

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

Notlar:

  • Bu, pacmdyardımcı programın listelediği ilk iki ses çıkış cihazı arasında geçiş yapar . İkiden fazla ses cihazınız varsa ve farklı bir cihazla değiştirmek istiyorsanız, 7. satırdaki mantığı bazı koşullarla değiştirmeniz gerekir.
  • Sadece varsayılan lavabo cihazını değiştirmek şu anda çalışan uygulamalar için hiçbir şey yapmaz - önceki cihaza çıktı vermeye devam ederler. Bu komut dosyası, varolan tüm girdiler için havuz hedefini de taşır. Yani, bu komut dosyasını bir cihazda çalan müzikle çalıştırırsanız, anında diğerine değişecektir. Mevcut uygulamaların bir önceki cihazda devam etmesini istiyorsanız, son satırı (ve isterseniz 5. satırı) yorumlayın.

7

Yükleyebilirsiniz, pavucontrolilk sekmede ses cihazı seçimi olan uygulamaları gösterir, size biraz çaba kazandıracaktır. Ama gerçekten istediğin şey, USB kulaklığı varsayılan cihaz olarak işaretlemektir, o zaman her ses taktığınızda ona yeniden yönlendirilir ve taktığınızda - hoparlörlere geri döner. Zahmetsiz, gerçekten.


2
Ubuntu Precise'da varsayılan cihazı nasıl ayarlarsınız?
blueyed

3

Soru oldukça eski ama cevabım hala GNOME 2 kullanıcıları için faydalı olabilir. Burada açıklanan sorun için PulseAudio Mikser Uygulamasını kullandım . Giriş ve çıkış aygıtlarını doğrudan panel menüsünden değiştirebilirsiniz. Bulduğum en uygun yol.


3

Tabii ki Applet kullanarak cihazları değiştirmek de iyi çalışıyor. Ama senaryo yazmanın en güzel yanı, süper hızlı olmasıdır. Benimkini alt + s klavye kısayoluna koydum. bu yüzden kulaklıktan hoparlöre geçmek istediğimde, sadece alt + s tuşlarına basmam gerekiyor.

Neyse. Andrew şöyle dedi:

İkiden fazla ses cihazınız varsa ve farklı bir cihazla değiştirmek istiyorsanız, 7. satırdaki mantığı bazı koşullarla değiştirmeniz gerekir.

Ben de öyle yaptım. Birisi onunla sorun yaşıyorsa, paylaşıyorum:

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

Farklı yaptığım şey bir) for-döngüsünde aktif lavabo bulmak. Ve b) indeksi 1 artırarak bir sonraki lavaboya geçin. Sonra sonucu lavabo sayısı ile modüle ediyorum. Bu, örneğin 3 lavabo olduğunda (2 + 1)% 3 = 0 olmasını sağlar. Böylece, lavabo indeksi 2'den, lavabo indeksi 0'a geçeceğiz.

Bu şekilde anahtar mevcut lavabolar arasında yukarı doğru hareket etmeyi sağlar.


2

Senaryolar için teşekkürler! Herkes kullanmak isterse de giriş (mikrofon) için bir parça ekledim:

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

Ses aygıtları listeniz arasında geçiş yapmak için aşağıdaki komut dosyasını kullanın:

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

Tüm kredi Ubuntu forumundan tsvetan'a gider .


1

Dizüstü bilgisayarımdaki dahili hoparlörler ile stereoma takılı bir elma havaalanı baz istasyonu arasında geçiş yapmak için bunu yapmanın bir yolunu arıyordum . Geçiş yapmak için kısayol tuşları atamaya karar verdim. Ses tercihleri ​​penceresinin, anahtarın görsel bir onayını vermek için bir saniyeliğine açılmasını istedim ve daha sonra pencereyi kapatmak için wmctrl'yi kullandım.

(Dizüstü bilgisayarımdaki bu tuşların Fn işlevi ses seviyesini artırmak ve azaltmak olduğundan ctrl + F8 ve ctrl + F9 kısayol tuşları olarak kullandım, böylece ctrl işlevlerinin ses çıkışını değiştirdiği açık görünüyordu.)

Aşağıdaki 2 (neredeyse aynı) komut dosyasını kullandım:

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

Birincisi elma baz istasyonunda (ctrl + F9'a atadığım) değişir ve ikincisi dahili hoparlörlere (ctrl + F8) geri döner. Bu, bunların sadece kurulu 2 çıkış cihazı olduğunu varsayar.


1

Andrews senaryosunu, ne yaptığını duyurmak için notify-osd kullanmasını sağlamak için inşa ettim. İhtiyaçlarınızdan sonra isimleri içeren satırları düzenleyin.

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


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.