BES2700--锤骨音乐算法集成
·
在开发OWS开放式耳机时,往往需要加入音乐算法来提升低频的音乐表现。本篇文章演示了使用BES2700芯片,在SDK中集成加入Malleus锤骨音频算法的过程。
前言
近期出现了一种比较热门的耳机种类OWS(Open Wearable Stereo)耳机,相比于传统TWS(True Wireless Stereo)耳机,OWS耳机采用的是空气传导声音的方式设计的开放式耳机。佩戴方式主要有耳挂式和耳夹式等设计方式,它可以轻轻地搭在或夹在我们耳廓上,可以很好的解决安全性和佩戴舒适性的问题。但是这种开放式的设计完全破坏了密封性,喇叭离耳道比较远,声音在传播过程中会有一定的损失。即便采用了较大单元大冲程的喇叭,在低频的表现上还是感觉会稍弱一些,不够厚实,缺乏冲击感,整体音质的层次感和沉浸感相对较差。
最近我们在开发这种OWS耳机时,在耳机中加入了Malleus锤骨音频算法,通过算法的复杂计算对播放的音频进行补偿,从而在开放式OWS耳机中实现了更多的低频量感,解决了开放式耳机在低频信号漏音听感单薄的问题,使得音乐听起来更加饱满和动感。
准备工作
-
获取到锤骨算法库文件,可以从锤骨算法销售代理商或锤骨原厂处获取

-
算法集成需要占用芯片部分资源,包括FLASH占用及运行内存占用等,以下为移植锤骨算法资源需求,集成算法前应初步评估计算剩余的资源是否满足算法需求,以确保算法集成可行性和系统的稳定性。

算法集成过程
- 引用函数库
将算法资料中的 Lib\malleus放入BES的SDK中,这里我们根据锤骨官方推荐操作直接复制到SDK的根目录下。并修改malleus\secp路径下的makefile文件,修改对应的lib名来使SDK引用锤骨算法库,各版本说明可参考secp路径下的Readme.txt文件。

- target.mk文件修改
在target.mk文件的修改主要是加入一些锤骨算法功能的宏定义开关,如下图。
以下为锤骨算法相关宏定义开关简要说明:
MALLEUS_SECP_ENABLE:为锤骨算法总开关。总开关开启后,SDK项目会包含malleus/secp/路径下的源码文件进入项目工程中,Malleus锤骨算法开启。
MALLEUS_SECP_LICENSE_MODE:锤骨算法授权模式的开关,打开后则为正式模式,需要算法授权后才能使用(需要向锤骨原厂或销售代理商购买授权);为0时为demo模式,一般用于前期没有购买授权时开发或体验,只开放少量地址码用于体验。
MALLEUS_SECP_TUNE:锤骨算法在线调试功能开关。可支持蓝牙无线调音的方式或通过串口在线调音的方式。
MALLEUS_SECP_OTA_EFFECT:这个宏开关用于配置锤骨算法的音效文件是否支持无线OTA升级方式。默认关闭,音效effect文件放在指定特定区域,不支持OTA升级。若打开这个功能,则音效effect文件存放在代码区,可以跟随代码OTA升级。
MALLEUS_SECP_OVERLAY_ENABLE:将算法放入OVERLAY区域的宏开关。芯片支持OVERLAY的话打开可以将算法放入OVERLAY区域可以节省一些内存。

- common.mk文件修改
打开SDK中的config\common.mk文件,如下图修改,为锤骨算法音效文件和授权文件开辟一块存储区域,默认开辟各为4KB空间大小,若一个项目中有多组音效,则音效区域EFFECT_SECTION需要开辟更大空间。这里所开辟空间的单位是0x1000的大小(即4KB)。

- 链接脚本文件lds.S修改
链接脚本文件主要修改SDK目录下的scripts\link\tail_section.lds.S文件,这个文件主要规定和控制输出文件内各部分在程序地址空间内的布局。
如下图修改,为上一步算法开辟的SECTION开辟FLASH空间
若开启了MALLEUS_SECP_OVERLAY_ENABLE,还需要修改SDK目录下的scripts\link\ best1000_1306.lds.S文件,用于将算法放入OVERLAY区域。

- audio_process.c文件修改
audio_process.c文件是SDK中处理音频数据的地方。在这个文件中锤骨算法需要加入以下部分。
音频处理流程启动时,加入锤骨算法初始化函数

音频处理流程工作时,加入锤骨算法处理函数。

音频处理流程结束时,关闭锤骨算法。

- app_bt_stream.cpp文件修改
SDK中的app_bt_stream.cpp文件主要用于负责蓝牙音频播放器的控制和处理,这里主要修改bt_sbc_player()函数中将音频通道数据配置成双通道立体声数据,和调整系统时钟104M,以满足算法的需求。

- audioflinger.c和audioflinger.h文件修改
添加af_codec_dac1_get_algo_gain()函数及声明,以便于算法调用,获取系统音量

- app_spp_tota.cpp文件修改
锤骨算法可以使用BES自带的TOTA来进行无线调音。需要用户自行打开BES默认的TOTA功能,打开TOTA功能后,锤骨算法会通过tota_spp_handle_data_event_func()回调函数处理无线调音的数据并进行在线调试处理。如下图,添加锤骨算法无线调音的处理部分,用户也可以自行修改移到用户自定义的无线数据处理函数中。

算法集成验证
通过以上步骤,锤骨算法的移植集成就完成了。可以通过以下步骤验证算法移植是否存在问题:
- 打开宏MALLEUS_SECP_ENABLE总开关,使能Malleus锤骨算法。将BES的HW_EQ或SW_EQ,并将gain值设置为0,关闭BES原厂自带算法以及其他第三方音乐算法。
- 烧录对应的音效文件effect.bin和授权文件license.bin。
- 蓝牙耳机开机连接手机,播放音乐,听喇叭播放声音有无音乐输出;查看log看算法初始化返回值是否正确。正常返回值为0x00000001或0x00000010

- 听播放的音频有没有异常,有无噪音卡顿,切换音量是否正常。
更多推荐


所有评论(0)