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

根据具体情况,我可以使用扬声器或耳机进行音频输出。 鉴于我的耳机是USB耳机,它就像它自己的音频设备一样。

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

我想知道是否有更简单/更快捷的方式来回切换到我的USB耳机? 也许是一个专用的托盘图标,一个键映射,还是这样?

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

要从命令行更改默认音频输出设备,可以使用pacmd Pulse 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行)。

好吧,您可以安装pavucontrol ,它会在第一个选项卡上显示具有声音设备选择的应用程序,它将为您节省一些精力。 但你真正想要的是将USB耳机标记为默认设备,然后每次插入所有声音时都会重定向到它,当你将其插入时 – 它将返回扬声器。 真的很轻松。

问题很老,但我的回答可能仍然对GNOME 2用户有用。 我使用PulseAudio Mixer Applet来解决这里描述的确切问题。 您可以在面板菜单中更改输入和输出设备。 这是我发现的最方便的方式。

当然,使用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。 因此,从sink索引2,我们将切换到sink索引0。

通过这种方式,开关允许向上移动通过可用的接收器。

谢谢你的脚本! 我添加了一个输入(麦克风)的部分,以防任何人想要使用它:

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

要循环浏览声音设备列表,请使用以下脚本:

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

我正在寻找一种方法来切换我的笔记本电脑上的内置扬声器和插入我的立体声音响的苹果机场基站 。 我决定分配热键来切换。 我希望音频首选项窗口弹出一秒钟,以便对开关进行视觉确认,然后使用wmctrl关闭窗口。

(我使用ctrl + F8和ctrl + F9作为热键,因为我的笔记本电脑上的这些键的Fnfunction是增加和减小音量所以让ctrlfunction改变音频输出似乎很明显。)

我使用了以下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 

第一次更改为Apple基站(我指定为ctrl + F9),第二次切换回内置扬声器(ctrl + F8)。 这假设这些是安装的唯一2个输出设备。

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

我遇到了同样的问题,并为Ubuntu Unity桌面编写了一个小指示器小程序:

https://github.com/lkettenb/sound-output-switcher

http://ubuntu.miximages.com/10.04/Screenshot.png

这是一个循环音频接收器的小脚本,用于当前关注的窗口: https : //gist.github.com/rif/01ffb5e3eb45d2e4e6ebb4652b3b19ce

需要pacmd和xdotool