蓝牙音频设备报告错误类别,如何覆盖?

蓝牙音频设备报告错误类别,如何覆盖?

通过蓝牙连接并使用我的 HiFi 系统一切顺利,但是...它在我的音频设备列表中被列为“耳机”。这是一个完全小问题,但有点令人困惑。

我发现这种“误解”背后的(可能......)原因是设备将其类别报告为 0x240404(可穿戴耳机装置)而不是更合适的 0x240428(HiFi 音频设备)。

不幸的是,简单地编辑/var/lib/bluetooth/[MAC address]/[another MAC address]/info文件是行不通的,因为每次服务重启时文件都会被重写,并且每次都会返回报告的类。

我如何覆盖设备的报告类别?(它无法从 HiFi 设备本身进行更改,至少根据手册,没有我可以操作的 BT“高级选项”...)

答案1

我假设您使用 Gnome 作为桌面环境。其他环境中可能存在或不存在类似的选项。

几周前,我在 Ubuntu 20.04.5 LTS 上解决了您描述的问题,但尚未升级到 22.04.1 LTs - 但检查了更新日志。

您的HiFi 音频设备支持多个蓝牙配置文件 - 大多数最新的蓝牙耳机也如此。

关于双向蓝牙连接的一般说明:没有“非专有通用”方法(至少我不知道有任何方法)可以通过蓝牙实现双向高质量音频连接。设备制造商可能会提供专有的设备专用软件来实现这一点。在大多数情况下,这些软件不会针对 Linux 进行编译。

一种可能的解决方法是将蓝牙 USB 适配器识别为计算机的 (双向) 声卡。但这超出了您最初的问题。

使用 HiFi 音频设备播放来自计算机的声音

通过蓝牙连接 HiFi 音频设备后,转到gnome-control-center sound(通过点击“设置”或按 F2 或 Ctrl+Alt+T(同时按 3 个)后运行该命令)。

首先向下滚动到“输入”,并将其设置为其他内容,但不是通过蓝牙连接的 HiFi 音频设备 - 或者将其静音。两者都可以。

其次,进入“输出”,选择你的输出设备(很明显)和你选择的蓝牙配置文件配置(A2DP 接收器与其中一个提供的编解码器)

在 Ubuntu 20.04.5 LTS 上,我必须执行额外的步骤这成为可能:

不幸的是,上述包装的“活动”看起来像一次性包装https://github.com/EHfive/pulseaudio-modules-bt适用于 Ubuntu 20.04 LTS。

根据我读过的变更日志(没有使用实时 ubuntu 22.04.1 进行测试),在 Ubuntu 22.04 上找到的版本pulseaudio应该能够“开箱即用”地支持此功能。如果不行,请为 22.04 找到合适的 ppa,成功率pulseaudio-modules-bt很高。

答案2

由于找不到更好的解决方案,我只能破解蓝牙守护进程代码。为了防止其他人需要它或类似的东西,我在 bluez src/device.c 中添加了一行设备集_类功能。这是一个糟糕的解决方案(任何耳机设备都会被错误地归类为 HiFi),但它满足了我的目的。

void device_set_class(struct btd_device *device, uint32_t class)
{
    if (device->class == class)
        return;

    DBG("%s 0x%06X", device->path, class);

  if ((class & 0xffffff)==0x240404)   class=0x240428;    // BT speaker fix!

    device->class = class;

    store_device_info(device);

    g_dbus_emit_property_changed(dbus_conn, device->path,
                        DEVICE_INTERFACE, "Class");
    g_dbus_emit_property_changed(dbus_conn, device->path,
                        DEVICE_INTERFACE, "Icon");
}

但我认为应该有更好的方法。有人知道吗?

相关内容