音频输出设备,快速切换?


19

根据情况,我可以使用扬声器或耳机进行音频输出。由于我的耳机是USB耳机,因此它可以充当自己的音频设备。

当前,我通过单击右上角托盘中的扬声器图标在音频输出设备之间进行切换,在该图标中选择“声音设置”,进入“输出”选项卡,然后选择了我想要的设备。

我想知道是否可以通过某些更简便的方法来回切换到USB耳机?也许是专用的任务栏图标,按键映射等等?

我正在使用默认的Gnome桌面运行Ubuntu 10.04。

Answers:


11

为了从命令行更改默认音频输出设备,可以使用pacmdPulse Audio命令行实用程序。

我发现今天需要做类似的事情,想在耳机和扬声器之间切换,两者都插入了独立的声卡。这是我为此编写的shell脚本:

#!/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 Precise中设置默认设备?
2012年

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)在for循环中找到活动接收器。b)通过将索引增加1来切换到下一个接收器。然后根据接收器的数量对结果求模。这样可以确保例如,当有3个接收器时,(2 + 1)%3 = 0。因此,我们从接收器索引2切换到接收器索引0。

这样,开关允许通过可用的水槽向上移动。


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;

所有功劳归功于Ubuntu论坛上的tsvetan 。


1

我一直在寻找一种方法来在笔记本电脑的内置扬声器和插入立体声系统的Apple Airport基站之间切换。我决定分配热键进行切换。我希望音频偏好设置窗口弹出一秒钟,以便对开关进行视觉确认,然后使用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

我建立在安德鲁斯脚本的基础上,使其使用notify-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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.