切换扬声器,蓝牙立体声,蓝牙单声道

使用可以进行立体声(仅限),单声道(输入/输出)和扬声器的蓝牙耳机。 在3之间切换是很多点击。 我想做的事情: – 在扬声器或耳机上运行立体声 – 当我拨打或接受拨打电话(Skype,gTalk等)时:切换到启用输入的蓝牙配置文件 – 在通话后切换回来

。要么。 有一个简单的菜单(指示灯?),允许我在输入/输出的预设组合之间切换

我怎么做?

据我所知,没有简单的一键式解决方案可以让我们快速从内部音频切换到蓝牙A2DP音频配置文件和蓝牙HSP耳机配置文件。

但是,我们可以更改命令行的声音输出,使我们有机会创建一个脚本来切换音频输出。 我们需要的命令如下:

  • pacmd list-cards
    将列出可用的卡。 只要连接了耳机,我们就可以访问蓝牙音频属性。 此外,我们现在可以找到pulseaudio卡索引,以及以下命令的可能配置文件。

  • pacmd set-card-profile
    更改卡号的配置文件。 对于蓝牙卡,有问题的配置文件将是音频配置文件的a2dp ,以及耳机电话配置文件的hsp

  • pacmd set-default-sinkpacmd set-default-source
    将改变输出resp。 pulseaudio使用的输入。 在播放期间无法完成此操作。 有关如何执行此操作的详细信息,请参阅此答案 。

下面是一个示例脚本,可用于切换蓝牙耳机的声音输出:

 #!/bin/bash # CLI options: `a2dp': Audio Profile # `hsp': Telephony Profile #  Default Sink (try `0' or `1') SINK=$( pacmd list-cards | grep -B 1 bluez ) INDEX=${SINK:10:2} SINK=$( pacmd list-cards | grep bluez ) MAC=${SINK:19:17} BT_SINK="bluez_sink.$MAC" BT_SOURCE="bluez_source.$MAC" if [ $1 = a2dp ]; then echo Setting A2DP audio sink $BT_SINK pacmd set-card-profile $INDEX a2dp pacmd set-default-sink $BT_SINK elif [ $1 = hsp ]; then echo Setting HSP headset sink $BT_SOURCE pacmd set-card-profile $INDEX hsp pacmd set-default-sink $BT_SINK pacmd set-default-source $BT_SOURCE else echo Resetting to internal audio pacmd set-default-sink $1 pacmd set-default-source $1 fi 

复制脚本,将其另存为switch-sink ,并授予其可执行权限。 在终端更改脚本目录并使用以下选项发出脚本:

 switch-sink a2dp # switches to audio profile switch-sink hsp # switches to headset/telephony profile switch-sink  # switches to sink , eg 0 depending on our default 

从键盘快捷键或.desktop文件(对于桌面或启动器)执行时,提供脚本的完整路径。


有关声卡INDEX的附加说明:

如果使用pulseaudio注册的声卡超过99张,此脚本将不起作用。 这可能成为问题,因为随着蓝牙设备的每次通电或重新连接,卡INDEX将增加。 作为一种解决方法,我们可能会改变最后的else条件来重置pulseaudio服务器(这将加载我们的默认音频接收器):

 else pulseaudio -k fi 

我想我发现了这个解决方案的一个错误。 在我的情况下只有1被设置为索引所以我有这个错误>>>没有找到这个名称或索引卡。

 $ pacmd list-cards | grep -B 1 bluez index: 10 name:  -- device.string = "00:0D:44:A6:7D:85" device.api = "bluez" -- device.form_factor = "headset" bluez.path = "/org/bluez/1085/hci0/dev_00_0D_44_A6_7D_85" bluez.class = "0x240404" bluez.name = "Logitech Wireless Headset" -- sinks: bluez_sink.00_0D_44_A6_7D_85/#11: Logitech Wireless Headset sources: bluez_sink.00_0D_44_A6_7D_85.monitor/#22: Monitor of Logitech Wireless Headset 

我已经改变了你的脚本,现在它运行良好。 (这不是最好的解决方案)

这就是我改变的

 #SINK=$( pacmd list-cards | grep -B 1 bluez | head -1 ) INDEX=$( pacmd list-cards | grep -B 1 bluez | head -1 | awk ' { print $2 } ' ) #SINK=$( pacmd list-cards | grep bluez ) MAC=$( pacmd list-cards | grep bluez | head -1 | awk -F . ' { print substr($2,0,length($2)) }' )