当前位置: 首页 > article >正文

windows蓝牙驱动开发-BLE音频(二)

详细设计

音频格式要求

音频帧持续时间

蓝牙 LE 音频配置文件允许实现支持音频帧持续时间为 7.5 毫秒或 10 毫秒的音频流式处理。 Windows 要求 IHV 提供的编解码器支持这两个帧持续时间,以确保与蓝牙 LE 音频配件设备的互操作性,并与连接到系统的其他蓝牙 LE 设备保持质量共存。

信号处理模式定义

蓝牙 LE 音频支持各种流式处理格式,从而支持不同的用户场景。 BAP 和 TMAP 规范定义了认证必须强制支持的格式。 Windows 会应用 音频信号处理模式,将要使用的格式与系统正在执行的方案相关联。 支持蓝牙 LE 音频的音频驱动程序应指示对下表中的信号处理模式和格式的支持。 此外,蓝牙 LE 音频不支持原始信号处理模式,因此音频驱动程序不应为此模式播发任何受支持的格式。

呈现流音频信号处理模式

蓝牙 LE 音频要求为以下信号处理模式声明呈现音频格式:

默认 (AUDIO_SIGNALPROCESSINGMODE_DEFAULT)
此模式用于单向呈现场景,例如音乐播放、通知和视频游戏音频。
通信 (AUDIO_SIGNALPROCESSINGMODE_COMMUNICATIONS)
此模式用于双向场景,例如语音呼叫。

以下各表列出了每种用例的格式和信号处理模式。 音频格式按优先顺序从高到低排列。

连接到立体声设备或设备协调集时的系统声音、音乐播放和视频游戏音频

信号处理模式:默认

0cdbcfd242d44cbaa06d1858a99bba75.png

连接到协调集的单个成员(单个耳塞或助听器)时的系统声音、音乐播放和视频游戏音频

信号处理模式:默认

da165be306ae4882bdf680bb511cae4d.png

具有语音聊天的呈现语音录制器、VOIP 呼叫或视频游戏音频

信号处理模式:通信

0dfca96aebf74320ba3214c584afeb36.png

捕获流音频信号处理模式

蓝牙 LE 音频要求为默认 (AUDIO_SIGNALPROCESSINGMODE_DEFAULT) 信号处理模式声明捕获音频格式。 支持的捕获格式列表如下表所示。

音频格式按优先顺序从高到低排列。

具有语音聊天的捕获语音录制器、VOIP 呼叫或视频游戏音频

信号处理模式:默认

e54a0f7ddd7d445fac5220f5f28dcae9.png

接口

音频终结点模板绑定 ID

音频驱动程序的 ACX 线路工厂使用此 ID 来了解何时创建了配对蓝牙设备的 ACX 线路。

以下组件 ID 用于创建蓝牙 LE 音频线路:

// {5C52FDB5-722A-4AB7-A342-70163B7E9B5C}
DEFINE_GUID(GUID_BLUETOOTH_LEAUDIO_RENDER_COMPONENT_ID,
0x5c52fdb5, 0x722a, 0x4ab7, 0xa3, 0x42, 0x70, 0x16, 0x3b, 0x7e, 0x9b, 0x5c);

// {1DFF2EE3-AE89-441C-BDE3-24F885C55DF8}
DEFINE_GUID(GUID_BLUETOOTH_LEAUDIO_CAPTURE_COMPONENT_ID,
0x1dff2ee3, 0xae89, 0x441c, 0xbd, 0xe3, 0x24, 0xf8, 0x85, 0xc5, 0x5d, 0xf8);

蓝牙 LE 音频支持接口

音频驱动程序堆栈使用该接口来指示它可用于流式处理蓝牙 LE 音频。 Windows 蓝牙音频服务级别会监视此接口,并等到发布后再启用蓝牙 LE 音频支持。

以下接口 ID 用于发布蓝牙 LE 音频支持接口:

// {BA02FA1B-0FD0-4A0F-A748-4FAE2E2D2F67}
DEFINE_GUID(GUID_BLUETOOTH_LEAUDIO_SUPPORT_INTERFACE, 
0xba02fa1b, 0x0fd0, 0x4a0f, 0xa7, 0x48, 0x4f, 0xae, 0x2e, 0x2d, 0x2f, 0x67);

音量和静音

如果流式处理驱动程序需要音频引擎,IHV ACX 流式处理线路应仅包含音量和静音元素。 使用音频引擎时,必须设置配置标志,如下所示:

ACX_AUDIOENGINE_CONFIG audioEngineCfg;
ACX_AUDIOENGINE_CONFIG_INIT(&audioEngineCfg);
…

audioEngineCfg.Flags |= AcxAudioEngineConfigVolumeSecondary; // Use this control only if endpoint doesn't have one.

audioEngineCfg.MuteElement = muteElement;

audioEngineCfg.Flags |= AcxAudioEngineConfigMuteSecondary; // Use this control only if endpoint doesn't have one.

audioEngineCfg.PeakMeterElement = peakmeterElement;
    
audioEngineCfg.Flags |= AcxAudioEngineConfigPeakMeterSecondary; // Use this control only if endpoint doesn't have one.

只有这样,蓝牙 LE 音频终结点才能使用蓝牙 SIG 定义的音量和麦克风控制配置文件更改单播音频终结点的音量和静音。

如果远程蓝牙 LE 音频设备不支持音量或麦克风控制服务,或者为广播音频创建了终结点,则音频引擎中的音量和静音元素应充当回退来处理来自音频系统的更改请求。 Windows 音频系统会处理对音量和静音的更改。 如果没有音频引擎,则要么远程设备不支持音量或麦克风服务,要么音频终结点用于广播音频。

蓝牙 LE 和经典音频共存

Windows 应确保只有经典音频或 LE 音频适用于支持这两种技术的配对蓝牙音频设备。 如果 LE 音频处于活动状态,则禁用远程设备的 A2DP 和 HFP 的边带 DDI,并为 LE 音频终结点创建配置文件线路。 如果经典音频处于活动状态,则启用远程设备的 A2DP 和 HFP 的边带 DDI,并且不会为 LE 音频终结点创建配置文件线路。

 


http://www.kler.cn/a/511016.html

相关文章:

  • 【2024年华为OD机试】 (B卷,100分)- 路灯照明问题(Java JS PythonC/C++)
  • MySQL 与 Redis 数据一致性 2
  • 【大数据2025】Yarn 总结
  • 八大排序--冒泡排序
  • 第十一章 图论
  • 【人工智能】:搭建本地AI服务——Ollama、LobeChat和Go语言的全方位实践指南
  • ROS2 与机器人视觉入门教程(ROS2 OpenCV)
  • 高通8255 Android STR 启动失败要因分析调查
  • Linux 常用命令——文件目录篇(保姆级说明)
  • MySQL中的GROUP_CONCAT函数将分组后的多个行值合并成一个字符串,并用指定分隔符连接
  • 《论文阅读》通过思维链微调产生原因感知的同理心反应 2024
  • 规避路由冲突
  • 【Vim Masterclass 笔记21】S09L39:Vim 设置与 vimrc 文件的用法示例(二)
  • AI守护煤矿安全生产:基于视频智能的煤矿管理系统架构解析
  • Python在DevOps中的应用:自动化CI/CD管道的实现
  • 从C到C++:嵌入式开发中两者的差异与过渡技巧
  • C# 声明废弃特性
  • 使用 Go 语言生成样式美观的 PDF 文件
  • LeetCode - #187 Swift 实现重复的DNA序列
  • 事务处理系统 (Transaction Processing System, TPS)
  • TCP报文格式与核心机制
  • Pycharm报错:libpng warning: iCCP: known incorrect sRGB profile
  • [手机Linux] 七,NextCloud优化设置
  • 生成模型:生成对抗网络-GAN
  • 数据库高可用方案-07-一致性校验
  • Linux-day06