在扬声器、蓝牙立体声、蓝牙单声道之间切换

在扬声器、蓝牙立体声、蓝牙单声道之间切换

使用具有立体声(仅输出)、单声道(输入/输出)和扬声器的蓝牙耳机。在这 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-sinkpacmd 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

相关内容