Linux蓝牙之宽带语音(WBS)
Linux蓝牙之宽带语音WBS | DDNotesLinux蓝牙之宽带语音WBS1. 概述1.1 什么是WBSWBSWideband Speech宽带语音是蓝牙技术联盟SIG定义的一种高质量语音传输技术也称为蓝牙宽带语音或HD Voice。它使用 mSBC 编码 在 eSCO增强同步连接链路上提供16kHz采样率的语音传输相比传统的窄带语音NBS8kHz采样率显著提升了通话质量。 1.2 技术背景 特性 窄带语音https://notes.z-dd.online/2026/06/15/Linux%E8%93%9D%E7%89%99%E4%B9%8B%E5%AE%BD%E5%B8%A6%E8%AF%AD%E9%9F%B3%EF%BC%88WBS%EF%BC%89/Linux蓝牙之宽带语音WBS1. 概述1.1 什么是WBSWBSWideband Speech宽带语音是蓝牙技术联盟SIG定义的一种高质量语音传输技术也称为蓝牙宽带语音或HD Voice。它使用 mSBC 编码 在 eSCO增强同步连接链路上提供16kHz采样率的语音传输相比传统的窄带语音NBS8kHz采样率显著提升了通话质量。1.2 技术背景特性 窄带语音NBS 宽带语音WBS采样率 8kHz 16kHz频率范围 300Hz-3400Hz 50Hz-7000Hz编码算法 CVSD mSBC语音质量 MOS 3.0-3.5 MOS 3.5-4.0蓝牙版本 Bluetooth 1.x Bluetooth 2.1HFP 1.61.3 应用场景蓝牙免提通话HFP车载蓝牙、蓝牙耳机VoIP通话通过蓝牙设备进行网络语音通话语音助手Siri、Google Assistant、Alexa等助听设备高质量音频传输2. 技术原理2.1 mSBC编码mSBCmodified Sub-Band Coding是WBS的核心编码算法CODE输入PCM音频16kHz, 16bit↓子带分解4个子带↓自适应量化↓比特分配↓输出mSBC比特流60字节/帧2.2 SCO/eSCO传输WBS使用透明模式Transparent Mode的eSCO链路传输CODE┌─────────────────────────────────────────────────────────┐│ eSCO链路参数 │├─────────────────────────────────────────────────────────┤│ 参数 │ T1配置 │ T2配置 │├─────────────────────────────────────────────────────────┤│ 包类型 │ EV3 │ 2EV3 ││ 最大延迟 │ 8ms │ 13ms ││ 重传次数 │ 2次 │ 2次 ││ 空中传输速率 │ 64kbps │ 64kbps ││ 带宽需求 │ 80kbps │ 80kbps │└─────────────────────────────────────────────────────────┘2.3 USB Alternate Settings对于USB蓝牙适配器WBS需要选择合适的 Alternate Settings不重新枚举设备的情况下动态切换不同的配置方案例如改变端点的数量、类型、数据包大小或带宽需求CODE┌─────────────────────────────────────────────────────────┐│ USB Alternate Settings │├─────────────────────────────────────────────────────────┤│ ALT │ 包大小 │ 间隔 │ 用途 │├─────────────────────────────────────────────────────────┤│ ALT1 │ 17字节 │ 1ms │ NB语音/兼容 ││ ALT3 │ 25字节 │ 7.5ms │ WBS备选 ││ ALT6 │ 63字节 │ 7.5ms │ WBS首选 │└─────────────────────────────────────────────────────────┘3. Linux内核实现下面我们来看看在linux中关于 WBS 的实现。基于内核v7.1.0-rc63.1 代码架构CODE┌─────────────────────────────────────────────────────────┐│ 用户空间 ││ ┌─────────────────────────────────────────────────────┐││ │ BlueZ / PulseAudio / PipeWire │││ └─────────────────────────────────────────────────────┘│└────────────────────────┬────────────────────────────────┘│ MGMT API┌────────────────────────┴────────────────────────────────┐│ 内核空间 ││ ┌─────────────────────────────────────────────────────┐││ │ net/bluetooth/mgmt.c │││ │ - set_wideband_speech() │││ └─────────────────────────────────────────────────────┘││ ┌─────────────────────────────────────────────────────┐││ │ net/bluetooth/hci_conn.c │││ │ - hci_setup_sync() / esco_param_msbc[] │││ └─────────────────────────────────────────────────────┘││ ┌─────────────────────────────────────────────────────┐││ │ net/bluetooth/sco.c │││ │ - SCO连接管理 │││ └─────────────────────────────────────────────────────┘││ ┌─────────────────────────────────────────────────────┐││ │ drivers/bluetooth/ │││ │ - btintel.c / btusb.c / btrtl.c / hci_qca.c │││ └─────────────────────────────────────────────────────┘│└─────────────────────────────────────────────────────────┘3.2 关键数据结构C/* WBS eSCO参数定义 - net/bluetooth/hci_conn.c:65-68 */static const struct sco_param esco_param_msbc[] {{ EDR_ESCO_MASK ~ESCO_2EV3, 0x000d, 0x02 }, /* T2 */{ EDR_ESCO_MASK | ESCO_EV3, 0x0008, 0x02 }, /* T1 */};/* 空中模式定义 - include/net/bluetooth/hci_core.h:2508 */#define SCO_AIRMODE_TRANSP 0x0003 /* 透明模式用于mSBC */#define SCO_AIRMODE_CVSD 0x0000 /* CVSD模式用于NB语音 */4. 支持流程分析4.1 硬件支持检测驱动程序在初始化时检测硬件是否支持WBS并设置相应的quirk标志C/* Intel设备 - drivers/bluetooth/btintel.c:3556-3559 */if (!btintel_test_flag(hdev, INTEL_ROM_LEGACY_NO_WBS_SUPPORT))hci_set_quirk(hdev, HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED);/* USB设备 - drivers/bluetooth/btusb.c:4341-4342 */if (id-driver_info BTUSB_WIDEBAND_SPEECH)hci_set_quirk(hdev, HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED);/* Realtek设备 - drivers/bluetooth/btrtl.c:1310-1320 */switch (btrtl_dev-project_id) {case CHIP_ID_8822C:case CHIP_ID_8852A:case CHIP_ID_8852B:case CHIP_ID_8852C:case CHIP_ID_8851B:case CHIP_ID_8922A:case CHIP_ID_8852BT:case CHIP_ID_8761C:hci_set_quirk(hdev, HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED);break;}/* Qualcomm设备 - drivers/bluetooth/hci_qca.c:2553-2555 */if (data-capabilities QCA_CAP_WIDEBAND_SPEECH)hci_set_quirk(hdev, HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED);4.2 用户空间配置用户空间通过MGMT API控制WBS功能作者: Shell链接: https://notes.z-dd.online/2026/06/15/Linux%E8%93%9D%E7%89%99%E4%B9%8B%E5%AE%BD%E5%B8%A6%E8%AF%AD%E9%9F%B3%EF%BC%88WBS%EF%BC%89/来源: DDNotes著作权归作者所有。商业转载请联系作者获得授权非商业转载请注明出处。。。。 。。。更多请关注我的博客https://notes.z-dd.online/或我的