使用具有立体声(仅输出)、单声道(输入/输出)和扬声器的蓝牙耳机。在这 3 种模式之间切换需要多次点击。我想要做的是:- 在扬声器或耳机上运行立体声 - 当我拨打或接听 voip 电话(Skype、gTalk 等)时:切换到启用输入的蓝牙配置文件 - 通话结束后切换回来
或者有一个简单的菜单(指示器?),允许我在预设的输入/输出组合之间切换
我怎么做?
答案1
我认为我发现了这个解决方案的一个错误。在我的例子中,只有 1 被设置为索引,所以我得到了这个错误 >>> 没有找到这个名称或索引对应的卡。
$ pacmd list-cards | grep -B 1 bluez
index: 10
name: <bluez_card.00_0D_44_A6_7D_85>
--
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)) }' )
答案2
据我所知,没有一个简单的一键式解决方案可以让我们从内部音频快速切换到蓝牙 A2DP 音频配置文件和蓝牙 HSP 耳机配置文件。
但是,我们可以从命令行更改声音输出,这使我们能够创建脚本来切换音频输出。我们需要的命令如下:
pacmd list-cards
将列出可用的卡。一旦耳机连接,我们就可以访问蓝牙音频属性。此外,我们现在可以找到 pulseaudio 卡索引,以及以下命令的可能配置文件。pacmd set-card-profile <index> <profile>
更改卡号的配置文件<index>
。对于蓝牙卡,相关配置文件将a2dp
用于音频配置文件和hsp
耳机电话配置文件。pacmd set-default-sink
和pacmd set-default-source
将更改 pulseaudio 使用的输出或输入。播放期间无法执行此操作。请参阅这个答案了解有关如何执行此操作的详细信息。
下面是一个可用于切换蓝牙耳机声音输出的示例脚本:
#!/bin/bash
# CLI options: `a2dp': Audio Profile
# `hsp': Telephony Profile
# <Index> 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 <index> # switches to sink <index>, e.g. 0 depending on our default
从键盘快捷键或 .desktop 文件(用于桌面或启动器)执行时,提供脚本的完整路径。
关于声卡INDEX的补充说明:
如果在 pulseaudio 中注册的声卡超过 99 个,则此脚本将不起作用。这可能会成为一个问题,因为每次打开电源或重新连接蓝牙设备时,卡索引都会增加。作为一种解决方法,我们可以更改最后一个else
条件以重置 pulseaudio 服务器(然后它也会加载我们的默认音频接收器):
else
pulseaudio -k
fi