我有一个 CEL-TEC F5A 耳机。规范说:
蓝牙 4.0,配置文件:耳机、免提、A2DP、AVRCP/HSP/HFP
它与高保真播放(A2DP 接收器)配置文件配合得很好。
当我想将音频输入切换到耳机麦克风时,输出配置文件会自动更改为Headset Head Unit (HFS/HFP)并且质量很差——比如 8bit 声音或其他东西。当我将它切换回 A2DP 时,输入又回到桌面麦克风。
我读过一些其他问题,似乎 A2DP 不支持输入,对吧?但我猜 HFS/HFP 中的 HFP 部分是高保真播放?听起来它可以作为耳机使用,但听起来仍然不像 1950 年的手机。
如何简化配置文件之间的切换,以便在我说话时是 HFS/HFP,在我听时是 A2DP?例如,作为一键通。
Ubuntu 17.10,没有声音定制 IIRC,一切都是最新的。
https://www.kabelmanie.cz/cel-tec-f5a-active-noise-bluetooth-stereo-sluchatka-s-mikrofonem/
我的输出:
$ pactl list cards
Card #0
Name: alsa_card.pci-0000_00_03.0
...
Card #4
Name: bluez_card.00_19_5D_25_6F_6C
Driver: module-bluez5-device.c
Owner Module: 30
Properties:
device.description = "F5A"
device.string = "00:19:5D:25:6F:6C"
device.api = "bluez"
device.class = "sound"
device.bus = "bluetooth"
device.form_factor = "headset"
bluez.path = "/org/bluez/hci0/dev_00_19_5D_25_6F_6C"
bluez.class = "0x240404"
bluez.alias = "F5A"
device.icon_name = "audio-headset-bluetooth"
device.intended_roles = "phone"
Profiles:
a2dp_sink: High Fidelity Playback (A2DP Sink) (sinks: 1, sources: 0, priority: 10, available: yes)
headset_head_unit: Headset Head Unit (HSP/HFP) (sinks: 1, sources: 1, priority: 20, available: yes)
off: Off (sinks: 0, sources: 0, priority: 0, available: yes)
Active Profile: a2dp_sink
Ports:
headset-output: Headset (priority: 0, latency offset: 0 usec, available)
Part of profile(s): a2dp_sink, headset_head_unit
headset-input: Headset (priority: 0, latency offset: 0 usec)
Part of profile(s): headset_head_unit
这里的问题不是麦克风不起作用,而是激活时音频质量变差。
Ondra,有一个很长的脉冲音频合并请求讨论,其中包含大部分信息。
tl;博士; 为了让脉冲音频、bluez 和内核工作正常,需要更新(不是微不足道的)。同样
hsphfpd
需要一个单独的守护进程。内核更新没有进展,用户对维护者的输入将有助于推动事情的发展。考虑提供这样的。见这里。
如果没有内核补丁,使用耳机的麦克风会导致糟糕的音频质量(HSP/HFP 操作模式)。
但是有可能只有 Pulse 补丁(以及耳机的支持)可以启用 A2DP 双向音频,这对于大多数用途来说应该没问题。
目前该补丁进展顺利。更多关于它的反馈不应该受到伤害。
更新:上面提到的拉取请求中的事情升级得非常快,看起来 PulseAudio 可能永远不会实现适当的蓝牙支持。让我们希望Pipewire已经有了一些补丁。
我正要退回耳机并等待蓝牙 5.0 耳机,但后来意识到,这是我的 BT 4.0 笔记本电脑可以获得的最佳功能。所以我保留了它们。
尽管如此,用 16 位 8000 Hz 的音频听一个法国人的声音并不是开会的正确方式。几天来,我一直在使用 Ubuntu 的声音设置对话框在两种模式之间切换,但这真的很烦人,你可以想象。
所以我写了这个脚本,利用
pacmd
它在两种模式之间切换:它没有经过打磨,有一些死代码,而且我使用自己的手机 ID,但它可能是您自己脚本的灵感来源。最新版本在这里。
希望这可以帮助某人:)
根据这篇文章,我担心蓝牙不会让我在听到高质量声音的同时通过耳机说话。:/
虽然不接受这个答案,但我仍然希望有人能想出一些方法来做到这一点。
我建议使用一个简单的脚本来切换按钮https://gist.github.com/weslleyspereira/e8feeb9f1b7008ae1ffad2777e39d0dd以及来自 Ondra Žižka 的脚本:
在使用或作为会话管理器时,您正在寻找的功能在PipeWire(PulseAudio 的替代品)中可用。第一个是默认的,启用自动配置文件切换是通过设置来实现的
pipewire-media-session
wireplumber
在
~/.config/pipewire/media-session.d/bluez-monitor.conf
重启后
pipewire-media-session
,默认使用A2DP配置文件。只有当检测到声音输入时,Pipewire 才会切换到 HSP/HFP 并在结束时切换回 A2DP。Arch Wiki和这篇博客文章对此进行了解释。
我的 Poly Voyager Focus UC 也遇到了同样的问题。太糟糕了(还没有)蓝牙堆栈中的支持。Voyager Focus 还配备了一个 USB 加密狗,可用于连接它。有了加密狗,Linux把耳机看成是声卡,所以不涉及Linux BT栈,双向音质不错。唯一的小问题是,如果我关闭耳机,Linux 不会看到这一点,也不会将音频播放切换回扬声器,所以我需要手动选择声音输出设备。
在互联网的其他地方,我读到人们也通过使用第三方 USB 蓝牙音频适配器并将他们的耳机连接到该适配器而不是系统蓝牙来成功解决这种问题。根据我的发现,耳机和蓝牙音频适配器都需要在其 HSP(耳机配置文件)中支持“宽带语音”,这是可选的。宽带语音只有 16 kHz / 16 位,但这仍然比 8 kHz 标准 HSP 通道有很大改进。Linux 蓝牙堆栈尚不支持宽带音频。我不知道我的 Voyager Focus 加密狗是使用标准蓝牙和宽带语音,还是使用一些专有的无线协议扩展。
许多蓝牙耳机显示为 2 个独立的设备,一个作为耳机/扬声器(无麦克风),一个作为耳机(带麦克风)。禁用耳机设备将强制使用 A2DP。这也可以以比该线程中的其他示例更简单的方式编写脚本。