it-swarm.cn

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

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

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

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

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

20
andol

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

好了,您可以安装pavucontrol,它会在第一个选项卡上显示带有声音设备选择的应用程序,这样可以节省您一些精力。但是,我真正想要的是将USB耳机标记为默认设备,然后每次插入它时,所有声音都会重定向到该设备上,并且当您将其拔出时-它会重新回到扬声器上。毫不费力地,真的。

7
vava

当然,使用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。

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

4
traumtaenzer

这个问题已经很老了,但我的回答可能仍然对GNOME 2用户有用。我将 PulseAudio Mixer Applet 用于这里描述的确切问题。您可以直接在面板菜单中更改输入和输出设备。这是我发现的最方便的方法。

3
dAnjou

感谢您的脚本!我还添加了一个输入部分(麦克风),以防有人使用它:

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
Subbeh

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

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

所有荣誉归功于 buntu论坛 的tsvetan。

2
guttermonk

我以安德鲁斯脚本为基础,使其使用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
1
Kveras

我一直在寻找一种方法来切换 笔记本电脑上的内置扬声器和插入立体声的Apple机场基站 。我想让音频首选项窗口弹出一秒钟,以便对切换进行可视化确认,然后使用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

第一个更改为Apple)基站(我将其分配给ctrl + F9),第二个更改回内部扬声器(ctrl + F8)。假定这些是唯一的2个输出设备已安装。

1
retrokid

这是一个循环当前聚焦窗口的音频接收器的小脚本: https://Gist.github.com/rif/01ffb5e3eb45d2e4e6ebb4652b3b19ce

需要pacmd和xdotool

0
rif

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

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

http://www.capslockblog.com/images/misc/Screenshot.png

0
Lukas