ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

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

中科蓝讯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 资源方式是因为可以播放更丰富的音效如自定义的音乐按键音而不是单调的单频 嘀 声。制作不易喜欢的小伙伴给个小赞赞喜欢我的小伙伴点个关注有不懂的地方和需要的资源随时问我哟
返回列表