新闻详情

新闻详情

首页 / 资讯中心 / 详情

中科蓝讯SDK开发-BT897X、BT891X、AB573X、AB572X 系列 触摸按键提示音功能实现

发布时间:2026/9/28 20:40:16来源:尧图网络
中科蓝讯SDK开发-BT897X、BT891X、AB573X、AB572X 系列 触摸按键提示音功能实现
前言到现在为止也开发了许多杰理TWS蓝牙耳机项目SDK的案子在调试案子时不断的向前辈们学习到了很多关于蓝牙TWS耳机专业的知识。想在这里做一个学习汇总方便各位同行和对杰理芯片SDK感兴趣的小伙伴们学习本章详细讲解中科蓝讯SDK开发-BT897X、BT891X、AB573X、AB572X 系列 触摸按键提示音功能实现在调试一个TWS蓝牙耳机案子时按键通常是我们必须要添加的功能通过按键我们可以实现音量的增大/减少歌曲的播放/暂停曲目的切换 开机/关机等特定功能所有我们必须在按键按下是添加提示音有提示音的存在方便我们更好的感知按键的状态在中科蓝讯SDK中有非常多可以实现按键提示音的方法。这里出一个常用稳定实现按键提示音的方法本章实现步骤为1、按键触摸音功能开关config.h2、按键触摸音消息定义key_scan.h3、按键触摸音触发key_scan.c— 核心触发点4、消息分发处理func.c5、音频资源映射资源索引res_tbl.h6、 资源地址表multi_lang.c7、编译时资源拷贝copy_tone.xm8、SDK 还提供了另一种纯 Tone 方式步骤1按键触摸音功能开关config.h本人实现某个功能时一般都喜欢使用宏去控制这个功能方便我排查问题和控制功能的实现实现触摸按键音功能开关设置为1开启按键音功能设置为0则关闭。整个实现链路上的所有代码都用#if LYF_USER_KEY_TONE_EN包裹编译时条件决定是否参与编译零开销。步骤2按键触摸音消息定义key_scan.h在消息枚举中定义了一个专属消息MSG_LYF_USER_KEY_TONE这是按键音在整个系统中的消息标识符。设计思路SDK 采用消息驱动架构——所有事件按键、蓝牙状态变化等都以消息的方式入队然后在主循环中统一分发处理。按键音作为一个独立的消息类型遵循了相同的架构模式。步骤3按键触摸音触发key_scan.c— 核心触发点在按键扫描函数中获取按键刚按下时就发送按键触摸音消息触发时机按键事件类型含义是否触发按键音KEY_SHORT按键刚按下下降沿检测✅ 是KEY_SHORT_UP按键抬起短按❌ 否KEY_LONG长按到达阈值❌ 否KEY_LONG_UP长按后抬起❌ 否KEY_HOLD连按按住不放❌ 否KEY_DOUBLE/KEY_THREE等双击/三击等❌ 否关键设计精髓按键音只在按键按下瞬间触发KEY_SHORT而不是在按键抬起或长按触发时。这意味着✅ 按下就响给用户即时反馈✅ 无论后续是短按/长按/双击按下就有声音步骤4消息分发出处理func.c所有的msg消息都是通过一个先进先出的队列进行存储的用msg_enqueue()接口添加消息然后在主程序的消息处理函数中调用msg_dequeue()取出消息处理不同模式下都会有自己的一个消息处理函数。该消息处理函数只是一个简单的switch判断根据取出的不同消息值去执行case对应的代码。需要注意的是SDK中有一个公共的消息处理函数都在default中执行。使用msg_enqueue()接口添加按键消息在蓝牙模式下按键的单击、双击事件会在这个函数中处理按键事件但是我不在这里进行触摸音播放处理。我在SDK公共的消息处理函数中处理步骤5音频资源映射资源索引res_tbl.h在提示音资源索引枚举中添加RES_IDX_KEY_TONE作为按键音资源的唯一 ID。步骤6资源地址表multi_lang.c将RES_IDX_KEY_TONE映射到一个 WAV 格式的音频资源KEY。宏展开后大致相当于RES_BUF_WAV(KEY)→ 编译时生成的 WAV 数据首地址例如RES_BUF_KEY_WAVRES_LEN_WAV(KEY)→ 编译时生成的 WAV 数据长度例如RES_LEN_KEY_WAV这里的底层宏定义在res_tbl.h末尾所以RES_BUF_WAV(KEY)最终拼接为(RES_BUF_KEY_WAV)指向 flash 中存储的 WAV 二进制数据。步骤7编译时资源拷贝copy_tone.xm在编译流程的预处理阶段GCC 用-E -P预处理此.xm文件生成.bat批处理脚本将key.wav从res_tone目录拷贝到res目录然后编译链接器将 WAV 文件嵌入 firmware 镜像。在res_tone提示音资源仓库中放入key.wac提示音音源文件编译流程的预处理阶段会自动把key.wav从res_tone目录拷贝到res目录这样我们按键触摸音功能就顺利实现了SDK 还提供了另一种纯 Tone 方式从 api_music.h 可以看到SDK 还提供了一个不依赖 WAV 资源文件的纯 tone 生成接口这是用DSP 直接生成正弦波/方波的方式播放按键音不需要预先准备 WAV 文件。当前项目选择的是 WAV 资源方式是因为可以播放更丰富的音效如自定义的音乐按键音而不是单调的单频 嘀 声。制作不易喜欢的小伙伴给个小赞赞喜欢我的小伙伴点个关注有不懂的地方和需要的资源随时问我哟
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

手写数字识别系统Python课设:CNN模型训练与部署指南 2026/9/28 21:28:21

手写数字识别系统Python课设:CNN模型训练与部署指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
ARTEMIS 视觉驱动移动端自动化:从架构到实战的完整指南 2026/9/28 21:28:14

ARTEMIS 视觉驱动移动端自动化:从架构到实战的完整指南

移动端自动化这个方向,过去几年一直有个尴尬的瓶颈:脚本能点、能滑、能截图,但一旦界面稍有变化,整套流程就崩了。传统方案靠的是控件树和固定坐标,本质上是在"背答案",而不是"理解题目&quo…

阅读更多 →
FPGA以太网硬件设计:RTL8211F与RGMII接口实战避坑指南 2026/9/28 21:28:14

FPGA以太网硬件设计:RTL8211F与RGMII接口实战避坑指南

1. 为什么RTL8211F在FPGA以太网项目里出镜率这么高搞FPGA以太网通信的兄弟,大概率都绕不开RTL8211F这颗PHY芯片。我第一次用它是在一个图像采集项目里,FPGA端需要把采集到的数据实时传到上位机,千兆带宽是硬指标,选型的时候翻了一…

阅读更多 →
CUDA版本匹配原理:驱动、Toolkit与PyTorch/TensorFlow的ABI兼容性 2026/9/28 21:28:14

CUDA版本匹配原理:驱动、Toolkit与PyTorch/TensorFlow的ABI兼容性

1. 为什么CUDA版本不匹配会直接让PyTorch/TensorFlow“装死”——从GPU驱动到框架ABI的完整断层链你刚配好一台RTX 4060 Laptop GPU的笔记本,兴冲冲跑通了nvidia-smi,显卡状态绿油油,驱动版本显示535.104.05,一切看起来都对。可一…

阅读更多 →
JavaWeb宿舍管理系统实战:从JSP+Servlet+MySQL到部署排错全攻略 2026/9/28 21:28:07

JavaWeb宿舍管理系统实战:从JSP+Servlet+MySQL到部署排错全攻略

简介:基于JSP与Servlet实现的宿舍管理系统,是一份适合JavaWeb课程设计、毕业设计及初学者实战练习的完整项目源码包。系统涵盖用户管理、宿舍分配、资源预订等常见模块,通过典型的MVC分层展示JSP页面、Servlet控制器与后台JavaBean的协作方式…

阅读更多 →
STM32驱动TMC2209 UART通信实战:CRC校验与寄存器读写详解 2026/9/28 21:28:07

STM32驱动TMC2209 UART通信实战:CRC校验与寄存器读写详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉