蓝牙音频传输协议(A2DP)-绝对音量笔记

2023-12-23 09:20

本文主要是介绍蓝牙音频传输协议(A2DP)-绝对音量笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 一、A2DP中的角色介绍
  • 二、绝对音量机制原理
    • 1.判断对端设备是否支持绝对音量
    • 2.音量等级介绍
    • 3.绝对音量交互流程
  • 三、绝对音量机制应用-BES2500IU原生代码示例
  • 总结

前言

绝对音量是什么意思?

绝对音量(Absolute volume)是指在蓝牙音频传输中,设备之间通过协议来协商音量控制的方式。传统上,音量控制是由音频源设备(如手机、电脑等)来控制,音频接收设备(如耳机、扬声器等)只是根据音频源设备发送的音量指令来调整音量大小。但是,这种方式存在一些问题,例如不同的设备音量范围不同,无法实现设备之间的统一音量控制等。

为了解决这些问题,蓝牙SIG(Bluetooth Special Interest Group)提出了绝对音量协议,通过该协议,音频源设备和音频接收设备可以互相通信,协商并同步音量控制,从而实现设备之间的统一音量控制。绝对音量协议可以确保不同设备的音量控制方式相同,使得用户可以在不同设备之间无缝切换,同时也提高了音频传输的质量和稳定性


一、A2DP中的角色介绍

在A2DP(Advanced Audio Distribution Profile)协议中,有两个重要的角色:CT端和TG端,分别代表连接的主设备和从设备。

CT端(Source):CT端是指连接蓝牙音频源设备(如手机、电脑等)的主设备。CT端主要负责音频数据的传输和控制,包括音频数据的编码、传输和解码等。

TG端(Sink):TG端是指连接蓝牙音频接收设备(如耳机、扬声器等)的从设备。TG端主要负责音频数据的接收和播放,包括音频数据的解码和输出等。
在这里插入图片描述

在A2DP协议中,CT端和TG端通过蓝牙进行连接,并通过协议进行音频数据的传输和控制。CT端可以向TG端发送音频数据和控制指令,如音量控制、播放控制等。TG端则接收音频数据并进行解码和播放。通过A2DP协议,用户可以通过蓝牙连接手机、电脑等音频源设备和耳机、扬声器等音频接收设备,实现无线音频传输和控制。

二、绝对音量机制原理

1.判断对端设备是否支持绝对音量

以手机为例:
1.手机端先看AVDTP协议是否支持,从空中包看
如下图:与耳机建立连接时,手机端会通过SDP服务查询当前耳机是否支持绝对音量功能
在这里插入图片描述
Category 2: 官方解释是用于定义视频监视器或音频放大器的基本操作。
简单来讲,设备的基本操作,包括设备的开关、音量控制、亮度调节等都是由它决定是否支持
在这里插入图片描述

在这里插入图片描述
2.手机端看有无指令(set Absolute volume)交互来判断是否支持,从空中包看

注:不支持绝对音量设备 不会有指令下发
在这里插入图片描述

2.音量等级介绍

绝对音量用一个八位字节表示。顶部位(第7位)是为将来添加(RFD)保留的。
在这里插入图片描述

绝对音量的值以最大值的百分比指定。0x0表示0%。0x7F对应100%。对应蓝牙等级设置会以x%通知给到TG端设备。但是在实际的项目运用中,例如手机和耳机设备,一般都是只支持16or15个音量等级,这里就会涉及到一个音量换算的问题,原理都是把127个音量等级划分成对应的16阶or15阶音量百分比,以耳机项目示例(这里是将音量等级划分成16阶):
这里是将音量等级划分成16阶

3.绝对音量交互流程

SetAbsoluteVolume:SetAbsoluteVolume指令用于设置蓝牙设备的绝对音量。在A2DP协议中,传统的音量控制是由音频源设备(如手机、电脑等)来控制,音频接收设备(如耳机、扬声器等)只是根据音频源设备发送的音量指令来调整音量大小。而通过SetAbsoluteVolume指令,音频源设备可以向音频接收设备发送音量值,并要求设备将其设置为绝对音量。这样就可以实现设备之间的统一音量控制。

RegisterNotification:RegisterNotification指令用于注册事件通知。在A2DP协议中,音频源设备和音频接收设备可以通过RegisterNotification指令来注册一些事件,如音量变化、播放状态变化等。当这些事件发生时,音频接收设备会向音频源设备发送通知消息,以便音频源设备可以及时地做出相应的处理。

CT端与TG端消息交互如下:
在这里插入图片描述

三、绝对音量机制应用-BES2500IU原生代码示例

a.收到AVRCP CMD — EVENT_VOLUME_CHANGED
在这里插入图片描述
b.耳机端更新音量等级参数
在这里插入图片描述
根据CT端下发音量等级参数换算成对应的15阶或16阶耳机本地音量等级
在这里插入图片描述
c.根据本地音量等级 耳机更新本地音量衰减参数
在这里插入图片描述
HFP和A2DP使用不同音量衰减参数
在这里插入图片描述

在这里插入图片描述

总结

具体的绝对音量指令对应的功能显示,大家可以使用ellisys或者frontline等hci_log分析工具自行对应查看。对没有提及到的一些feature,有兴趣的兄弟可以去A2DP协议中自行查找,这一篇文章只是我在项目中碰到的绝对音量问题时的一些理解,希望对大家会有一些帮助,也欢迎大家指出问题。
————————————————
版权声明:本文为CSDN博主「无敌幸运七」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42176891/article/details/127284000

这篇关于蓝牙音频传输协议(A2DP)-绝对音量笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/527534

相关文章

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

电脑蓝牙连不上怎么办? 5 招教你轻松修复Mac蓝牙连接问题的技巧

《电脑蓝牙连不上怎么办?5招教你轻松修复Mac蓝牙连接问题的技巧》蓝牙连接问题是一些Mac用户经常遇到的常见问题之一,在本文章中,我们将提供一些有用的提示和技巧,帮助您解决可能出现的蓝牙连接问... 蓝牙作为一种流行的无线技术,已经成为我们连接各种设备的重要工具。在 MAC 上,你可以根据自己的需求,轻松地

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优

关于WebSocket协议状态码解析

《关于WebSocket协议状态码解析》:本文主要介绍关于WebSocket协议状态码的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录WebSocket协议状态码解析1. 引言2. WebSocket协议状态码概述3. WebSocket协议状态码详解3

使用Python实现文本转语音(TTS)并播放音频

《使用Python实现文本转语音(TTS)并播放音频》在开发涉及语音交互或需要语音提示的应用时,文本转语音(TTS)技术是一个非常实用的工具,下面我们来看看如何使用gTTS和playsound库将文本... 目录什么是 gTTS 和 playsound安装依赖库实现步骤 1. 导入库2. 定义文本和语言 3

详解如何使用Python提取视频文件中的音频

《详解如何使用Python提取视频文件中的音频》在多媒体处理中,有时我们需要从视频文件中提取音频,本文为大家整理了几种使用Python编程语言提取视频文件中的音频的方法,大家可以根据需要进行选择... 目录引言代码部分方法扩展引言在多媒体处理中,有时我们需要从视频文件中提取音频,以便进一步处理或分析。本文