KDocs 研发资料库
  • 音频技术应用文档入口汇总
  • 杰理WINDOWS环境安装及其他事项
  • LINUX安装和编译
  • Linux环境编译SDK教程(ubuntu18.04)
  • 音频类补丁汇总表
  • 认证资料获取汇总(最新资料后台会更新)
  • 《Hi-Res申请指南v1.0》
  • FreeRTOS 开源协议版本
  • uCOS 开源协议版本信息
  • 各个模块关键资料汇总
  • 软件调试方法
  • Makefile编译
  • 提bug的规范
  • 常规设备使用指导
  • 对外特别发布开发注意点信息汇总
  • AD697X软件问题整理
  • AC700N软件问题整理
  • AC701X耳机软件问题整理
  • 951&961软件问题整理
  • AC104X软件问题整理
  • AC128N问题整理文档
  • 可视化工具调试问题整理
  • 耳机资料汇总
  • AC704N、 AC705N相关应用
  • AC695N&AC696N&AC608N音箱问题整理
  • JL701N音箱问题整理
  • AC692X软件问题整理
  • AC706N音箱问题整理
  • JL701N音箱问题整理(可视化工具SDK)
  • JL703N音箱问题整理
  • JL709N(JL689N)音箱问题整理
  • JL7094系列-入门到进阶开发指导
  • AC210N音箱问题整理
  • 无线麦系列版本支持指南
  • AW32N无线麦问题整理
  • lAD697X&JL701X 无线麦软件共性问题整理
  • AC706N无线麦问题整理
  • AW36N无线麦问题整理
  • AC710X无线麦问题整理
  • 唤醒源获取及唤醒IO设置
  • 电源
  • LVD
  • 长按复位配置方法
  • 低功耗应用
  • TIMER
  • UART
  • SPI
  • 内部FLASH空间添加用户自定义区域
  • IIC
  • GPIO
  • MCPWM
  • SD&U盘
  • 时钟&晶振
  • GPCNT
  • IO口crossbar映射功能
  • 文件系统使用总结
  • 复用应用
  • LINEIN_AUX相关应用
  • IIS音频接口应用
  • SPDIF模式相关(HDMI_ARC、光纤、同轴)
  • PDM LINK
  • 外设相关应用
  • 蓝牙相关
  • 杰理蓝牙距离调试文档
  • TWS耳机配对方式使用及生产把控指南
  • GFP谷歌快连及其认证流程指引
  • 蓝牙发射器(bt_emitter)相关
  • BLE应用
  • 关于提升BLE传输速率说明
  • BLE测试数据
  • MUSIC 模式相关应用
  • MIDI音乐实现
  • PC相关应用
  • FM相关应用
  • AC695N_AC696N FM天线ESD静电防护措施说明V2.0_20250107
  • fm应用详细设计说明书
  • 杰理FM硬件指南-20230315
  • ADC模块
  • AUDIO相关应用
  • 新Tools的音效调试使用
  • 混响应用使用说明
  • 音效调式
  • 音箱耳机低音小音量增强实现方法
  • DAC输出功率调试
  • DAC性能测试指南
  • 针对各类底噪、电流声分析流程
  • 录音相关应用
  • OPUS编解码相关
  • RTC相关应用
  • 升级相关
  • UI相关应用
  • 通话调试流程指南
  • 通话相关应用
  • 省电容mic使用手册
  • 如何测试验证手表通话系统的语音失真 V1.0
  • AC695X_AC696X_AD697X 常见通话问题处理参考资料
  • 通话调试问题确定步骤
  • 内置触摸调试指南
  • 低功耗内置触摸介绍V2.2
  • 触摸相关文档
  • AC697X、AC698X内置触摸调试及整改方法V1.0
  • 产测相关应用
  • AC63X BLE DUT测试介绍
  • 兆华序列使用简易说明
  • JL_1T2蓝牙测试盒音频文件更换说明
  • ENC相关应用入口汇总
  • ANC相关应用入口汇总
  • JL DMS通话调试手册-V3.9.4
  • ANC-ENC结构设计要点-20240407
  • 半入耳式ANC耳机器件选型与结构设计指南V1.0
  • JL 耳道自适应调试指南
  • ANC相关问题处理
  • ANC调试文档
  • 评估蓝牙耳机通话上行降噪性能的方法 V1.0 (2)
  • FCC 或者 BQB 认证相关应用
  • BQB profile 测试中常遇到的问题点汇总
  • 蓝牙参数整理20210811
  • 杰理科技认证问题参考
  • 无线音频产品开发指南
  • 无线麦系列从入门到进阶开发指导
  • 量产烧录相关说明
  • 一拖八烧录器远程过程调用说明
  • 量产相关建议
  • EffectTool(eq)调试工具说明文档
  • AC897AD697系列的EQ调试方法-V3
  • 杰理调音指南-20220622
  • 音效模块总结
  • 简要调音步骤指引(可视化)
  • 耳机充电与通信调试指南
  • 充电仓硬件调试指南
  • 充电仓软件问题整理
  • AC951常用说明
  • AC951_AC961_开发板使用说明V1.0
  • 彩屏仓AC982 入门指导及FAQ
  • 蓝牙音频APP相关应用
  • 手机APP的简介和开发流程
  • 蓝牙音频系列-硬件设计指南
  • 静电测试及整改方法-20220706
  • TWS耳机底噪整改指南V1.2
  • 杰理蓝牙距离调试文档
  • 蓝牙RF硬件设计与调试V1.1-20250219
  • AC695N_AC696N FM天线ESD静电防护措施说明V2.0_20241228
  • 音效调试指南
  • 无线话筒K歌音箱标准开发流程
  • 杰理科技 700N TWS耳机产品标准-202303
  • 杰理科技 701N 广播产品标准-202303
  • JL-HAT ANC高效产测自适应
  • 无线话筒测试板使用介绍
  • 一拖八频偏校准使用说明
  • 领夹麦产测工具使用介绍
  • Dongle量产测试说明
  • Dongle+Tws或头戴式 SDK通过工具绑定配对功能说明文档
  • 双麦ENC产测宏配置验证方法 V1.0
  • JL耳机方案麦克风声学测试指令_V1.0
  • JL耳机方案麦克风声学测试指令_V2.0
  • JL_ENC自动测试命令_V0.0.1
  • JL蓝牙测试盒用例说明
  • LDAC自测环境搭建_ubuntu
  • 延迟小板使用手册
  • 杰理库文件的制作及添加实现过程
  • 关于 AC635N&AC636N系列免晶振兼容性补丁 说明
  • 关于 AC63系列VM兼容性修复补丁_20250224 说明
  • 关于 AC632N &AE632N_ 蓝牙& 低功耗兼容性修复补丁 说明
  • AD698N和AC638N电压优化补丁V3说明
  • 关于 AC635N&AC636N漏电和E&G版兼容联合补丁 说明
  • AD698N和AC638N电压优化补丁V2说明
  • 702相关应用
  • 2024-4-30 发布歌词显示SDK开发注意事项
  • BQB RF & FCC 认证测试固件问题汇总及源码
  • BQB profile 测试中常遇到的问题点汇总
  • 进dut测试模式方法及固件
  • 704-频偏修改bin文件合集
  • 701手表BQB PROFILE认证注意事项
  • 认证的干扰规避整改
  • 海外CRA认证报告生成说明
  • JL700N可视化工具问题处理文档
  • JL701X可视化工具问题处理文档
  • JL701N_earphone_release_v1.6.0_ANC 低功耗问题补丁
  • JL708X可视化工具问题处理文档
  • JL709N可视化工具问题处理文档
  • JLstudio可视化工具使用说明
  • 一拖二-串口_蓝牙_app在线EQ、通话参数及调试方式和内置触摸调试
  • 可视化JL701M_DONGLE_SDK添加MIC为发射源
  • 可视化JL701M_DONGLE_SDK添加按键切换usb audio与MIC发射源
  • JL701M_DONGLE_SDK_1.0.0_dongle输入linein输出dac
  • 701可视化_a2dp_to_le_demo说明
  • 耳机系列demo汇总
  • JL7018F&JL7006F_7003F AUX IIS
  • 一键连接应用
  • 普通SDK动态开关一拖二功能
  • 蓝牙分析仪(EllisysBluetoothAnalyzer)抓包例程
  • TWS配对常见应用
  • APP自定义按键的demo
  • AC700N 播歌双EQ DEMO示例及说明
  • AC698V164 MIC与蓝牙音乐共同输出DAC demo
  • 添加第三方算法以及多算法授权流程
  • 空间音频配置方法
  • 普通高低电平TWS耳机控制通讯
  • 入耳检测状态更新demo解析
  • 资源优化(非可视化的SDK)
  • 资源优化(可视化SDK)
  • 翻译耳机、语音识别应用demo
  • 耳机抗干扰问题排查和优化
  • AC698D2 抗干扰优化
  • AC696X软件问题整理
  • AC695X软件问题整理
  • AC695X软件问题整理_1722249702
  • AC608X软件问题整理
  • JL701N_2T1_DUPLEX 应用软件问题汇总
  • le_audio_1.0.0_patch05 以及之前的版本IRkey 功能异常修改
  • AC706N-le_audio-200SDK有线_无线麦录音demo
  • jl701n_le_audio_v200patch02 IO串口升级修改串口单次发送字节长度的修改办法
  • 703创建IIS 输入dac输出音频流demo
  • 703将媒体流音频同时上传PC_mic录音demo实现
  • 703四路IIS输入输出demo
  • 底噪调试
  • AW328A烧录说明
  • 文档合集
  • AC706N_wireless_mic_release_PATCH_20240712 补丁 说明
  • AC706N_wireless_mic_release_PATCH_20240726 补丁 说明
  • AC706N_wireless_mic_release_V1.0.0、1.0.1、1.0.2 补丁 说明
  • AC706N_wireless_mic_release_V1.1.2 中的2T1应用 RX端不绑定配对,TX端实现绑定配对的修改方法
  • 各系列省晶振实现方法
  • iis tx rx说明文档
  • spdif信号
  • 蓝牙电话本
  • 安卓手机同步时间补丁
  • CDC配置
  • PC模式下增加Teams唤起功能
  • 杰理HDMIARC开发实现过程
  • AC701N patch06之前的版本用第三方算法节点实现新版本的pcm delay节点功能
  • (K歌音箱)各SDK音效配置相关说明
  • 长文件录音
  • 点阵屏歌词字库相关(蓝牙歌词,普通歌词)
  • 字模提取工具说明
  • 音箱可视化彩屏-入门到进阶开发指导
  • 彩屏LVGL UI设计及工具使用
  • 使用内部UI框架进行UI调试的系列步骤
  • AD101C使用强制升级工具spi 烧录不了问题处理(测试版本)
  • AD161扩展灯板说明文档
  • 歌词显示器开发注意项
  • 使用硬件数字增益控制通话下行音量(可视化)
  • 杰理小牛产测资料
  • ENC配置说明
  • 通话调试流程指引
  • ANC相关功能demo
  • 无线麦硬件资料汇总
  • 无线麦相关应用
  • 无线麦复杂功能补丁包汇总
  • 无线话筒形态SDK程序&开发经验&问题点分享
  • 双模式结合应用问题汇总
  • 无线麦距离优化案例
  • 无线麦系列中的双工形态(duplex)演变开发对讲机方案开发资料
  • 音箱入门到进阶指导文档(编写中)
  • 蓝牙耳机品控和生产技巧
  • 982过_欠压标志获取异常
  • 如何获取最新涂鸦SDK及库文件
  • 无线话筒K歌音响-调音标准流程
  • 无线话筒产测流程

第三方音效算法接入介绍_20230712.01

📎 原始文档:https://www.kdocs.cn/l/cgY8QYajeaWGimage

第三方音效算法接入介绍

珠海市杰理科技股份有限公司

Zhuhai Jieli Technology Co.,LTD

版权所有,未经许可,禁止外传
imagehttp://www.zh-jieli.com/
image

修改记录

版本更新日期描述
V1 .02023/7/6SDK第三方音效算法接入介绍
更新:● 建立初始版本

image 目录
Chapter 1 使用说明.........................................................................................................................4

  1. 1编写目的.............................................................................................................................. 4
    Chapter2 第三方算法接入介绍........................................................................................................5
  2. 1 earphone SDK 音乐播放音效算法.................................................................................... 5
    2.2 soundbox SDK音乐播放音效算法.................................................................................... 7
    2.3 算法移植FAQ ................................................................................................................... 13
    2.3. 1 log输出配置........................................................................................................... 13
    2.3.2 资源跟踪................................................................................................................ 13
    2.3.3 硬件加速模块........................................................................................................ 14
    2.3.4 动态操作音效bypass/enable 问题....................................................................... 14
    2.3.5 运行开销问题........................................................................................................ 15
    2.3.6 算法运行时间估算................................................................................................ 15
    2.3.7 代码异常(exception) .........................................................................................15

Chapter 1 使用说明

1. 1编写目的

该文档主要描述了杰理现有的 AC897N/AD697N 系列 earphone SDK、 AC700N 系列 earphone SDK、 AC701N系列 earphone SDK 以及AC695N系列 soundbox SDK、 AC701N系列 soundbox SDK上由于第三方音效算法接入的说明。

系列SDK类型备注
AC695Nsoundbox
AC897N/AD697Nearphone
AC700Nearphone
AC701Nearphone
soundbox

介绍说明了表述了如何第三方算法如何接入到杰理平台的代码路径以及具体接口代码,以及常见问题排查与常用硬件加速模块的使用介绍。

Chapter2 第三方算法接入介绍

2. 1 earphone SDK 音乐播放音效算法

音乐播放,主要是蓝牙高级音频(A2DP)的音效算法接入到SDK流程分三步处理。

1、 使能第三方音效算法开发

宏定义主要用于控制音效算法接入的代码块打开与裁剪,通常将宏定义设置在板级头文件中,例如:board_ac700n_demo_cfg.h
image

2、 音效算法实现接口

AC700N、 AC897N/AD697N系列蓝牙高级音频(A2DP)的主流程打开(初始化)、关闭以及效果处理代码位于 cpu/br36/audio/audio_dec.c、 cpu/br30/audio_dec.c 文件中, AC701N 1.5.0版本后的蓝牙高级音频(A2DP)的主流程代码位于cpu/br28/a2dp_dec.c 文件中。
AC700N 系 列 第 三 方 音 效 算 法 位 于 cpu/br36/audio/audio_effect_develop.c, AC897N/AD697N 系列存放于 cpu/br30/audio_effect_develop.c, AC701N 系列存放于 cpu/br28/audio_effect_develop.c。

系列开发路径
AC897N/AD697Ncpu/br30/audio_effect_develop.c
AC700Ncpu/br36/audio/audio_effect_develop.c
AC701Ncpu/br28/audio_effect_develop.c

高级音频的a2dp_dec_start()函数集成解码初始化/打开和音效模块初始化/打开,第三方音效算法在其中的调用示例为:

(1)算法初始化

image 8. a2dp_effect_develop_setup(dec) ;
9.
10. a2dp_drop_frame_stop();
11. dec->remain = 0 ;
12. a2dp_decoder_match_system_clock (dec) ;
13. /* dec->state = A2DP_STREAM_START; */
14. err = audio_decoder_start(&dec->decoder) ; 15.
16. ​}

(2)音效关闭
  1. static int a2dp_audio_ res_close (void)
    image
(3)音效算法处理函数

音效算法的主流程通常在a2dp_dec_output_handler()函数中处理,数据同步进出的添加示例为(仅截取上下文部分参考):
image

(4)A2DP 中关于第三方算法的调用
  1. static int a2dp_effect_develop_setup( struct a2dp_dec_hdl *dec)
  2. {​
  3. #if ((defined TCFG_EFFECT_DEVELOP_ENABLE) && TCFG_EFFECT_DEVELOP_ENABLE)
  4. dec->effect_develop = audio_effect_develop_open(dec->sample_rate, dec- > c h, 16) ;
  5. #endif
  6. return 0 ;
  7. ​} 8.
  8. static void a2dp_effect_develop_close( struct a2dp_dec_hdl *dec)
  9. {​
  10. #if ((defined TCFG_EFFECT_DEVELOP_ENABLE) && TCFG_EFFECT_DEVELOP_ENABLE)
  11. if (dec->effect_develop) {​
    [13.](13. audio_effect_develop_close)[ audio_effect_develop_close](13. audio_effect_develop_close)(dec->effect_develop);
  12. dec->effect_develop = NULL;
  13. ​}
    image
  14. #endif 17. ​}
    AC701N 系列 1.5.0 版本及之后的版本与 AC700N 调用方法稍有不同,无需要将 audio_effect_develop_data_handler()放到解码输出的流程显式调用,仅需要在打开音效位置配置其加入到stream 的节点即可,其调用方法为:
    image
  15. static int a2dp_effect_develop_setup( struct a2dp_dec_hdl *dec)
  16. {​
  17. #if ((defined TCFG_EFFECT_DEVELOP_ENABLE) && TCFG_EFFECT_DEVELOP_ENABLE)
  18. dec->effect_develop = audio_effect_develop_open(dec->sample_rate, dec- > ch, 16) ;
  19. a2dp_stream_node_add(dec, dec->effect_develop, audio_effect_develop_data_handler, NULL, NULL, 0);
  20. #endif

2.2 soundbox SDK音乐播放音效算法

1、 使能第三方音效算法开发

与 earphone 系列 SDK 添加方法类似,宏定义仍然放在板级的头文件中,例如: board_jl701n_demo_cfg.h
imageimage

2、 音乐播放通路的音效接口添加
系列开发路径
AC695Ncpu/br23/audio_effect/audio_effect_develop.c
JL701Ncpu/br28/audio_effect/audio_effect_develop.c

audio_effect_develop 中通过audio_effect_develop_open()、 audio_effect_develop_close()函数抽象了播放流程的调用方法,仅需要在此实现具体的算法接入即可。以下提供了音乐播放通路添加对于第三方音效算法接口调用的实例。

(1)蓝牙音频播放调用示例:

蓝牙音频的调用添加需要在 audio_dec_bt.c 增加几项调用处理, 首先 include audio_effect_develop.h头文件:
image

  1. #include "audio_effect_develop .h "
    a2dp_dec_hdl 中需要添加如下成员:
    image audio_effect_develop 的打开应在a2dp_dec_start()中调用,示例如下:
    image
  2. static int a2dp_dec_start(void)
  3. {​
  4. #if AUDIO_VBASS_CONFIG
  5. if (dec->vbass_prev_gain ) {​
  6. entries [entry_cnt++] = &dec->vbass_prev_gain->entry; 7. ​}
  7. if (dec->ns_gate) {​
  8. entries [entry_cnt++] = &dec->ns_gate->entry;
  9. ​}
  10. if (dec->vbass) {​
  11. entries [entry_cnt++] = &dec->vbass->entry; 13. ​}
  12. #endif
  13. #if ((defined TCFG_EFFECT_DEVELOP_ENABLE) && TCFG_EFFECT_DEVELOP_ENABLE)
  14. dec->effect_develop_entry = audio_effect_develop_open(fmt->sample_rate, ch_num, global_bit_wide ) ;
  15. if (dec->effect_develop_entry) {​
  16. entries [entry_cnt++] = dec->effect_develop_entry;
  17. ​}
  18. #endif
    image
  19. #if defined (TCFG_MUSIC_HARMONIC_EXCITER_ENABLE) &&TCFG_MUSIC_HARMONIC_EXCITE R ENABLE
  20. if (dec->harmonic_exciter) {​
  21. entries [entry_cnt++] = &dec->harmonic_exciter->entry; 25. ​}
  22. #endif 27.
  23. ​}
    audio_effect_develop 的关闭应在a2dp_audio_res_close()中调用,示例如下:
1.
2.
3.
4.
stat
{​
ic
.
void a2dp_audio_ res_close(void)
DIO_VBASS_CONFIG
#ifAU
5.audio_gain_close_demo(bt_a2dp_dec->v bass_prev_gain ) ;
6.imageaudio_noisegate_close_demo(bt_a2dp_dec->ns_gate) ;
7.audio_v bass_close_demo(bt_a2dp_dec->vbass) ;
8.#endifimage
9.convet_data_close(bt_a2dp_dec->convert_16_to_ 32) ;
10.imageconvet_data_close(bt_a2dp_dec->convert_32_to_16) ;
11.
12.image
#if ((defined TCFG_EFFECT_DEVELOP_ENABLE) && TCFG_EFFECT_DEVELOP_ENABLE)
13.audio_effect_develop_close(dec->effect_develop_entry) ;
14.image
#endif
15. #if defined (TCFG_MUSIC_HARMONIC_EXCITER_ENABLE) R ENABLE&&TCFG_MUSIC_HARMONIC_EXCITE
16.image
audio_harmonic_exciter_close_api (bt_a2dp_dec->harmonic_exciter) ;
17.#endif
18.image
. . . . . .
19. ​}

imageimageimageimageimageimageimageimage

(2)文件音频播放调用示例:

文件音频播放的调用在audio_dec_file.c 中增加,第三方算法 entry 成员变量添加及 include头文件需要在 audio_dec_file.h 中添加,其中成员变量需要添加在struct file_dec_hdl 中:
image audio_effect_develop的打开应在audio_dec_file.c 中的file_dec_start()中调用,示例如下:
image

  1. static int file_dec_start(v。id)
  2. {​ 3.
  3. #if AUDIO_VBASS_CONFIG
  4. if (dec->vbass_prev_gain ) {​
  5. entries [entry_cnt++] = &dec->vbass_prev_gain->entry;
  6. ​}
  7. if (dec->ns_gate) {​
  8. entries [entry_cnt++] = &dec->ns_gate->entry;
  9. ​}
  10. if (dec->vbass) {​
  11. entries [entry_cnt++] = &dec->vbass->entry;
  12. ​}
  13. #endif 16.
  14. #if ((defined TCFG_EFFECT_DEVELOP_ENABLE) && TCFG_EFFECT_DEVELOP_ENABLE)
  15. dec->effect_devel。p_entry = audi。effect_devel。p。pen(dec->file_dec . sample_rate, dec->file_dec .。utput_ch_num, gl。bal_bit_wide ) ;
  16. if (dec->effect_devel。p_entry) {​
  17. entries [entry_cnt++] = dec->effect_develop_entry;
  18. ​}
  19. #endif
  20. #if defined (TCFG_MUSIC_HARMONIC_EXCITER_ENABLE) &&TCFG_MUSIC_HARMONIC_EXCITE R_ENABLE
  21. if (dec->harmonic_exciter) {​
  22. entries [entry_cnt++] = &dec->harmonic_exciter->entry;
  23. ​}
  24. #endif
  25. ​}
    audio_effect_develop的打开应在audio_dec_file.c中的file_dec_close()中调用,示例如下:
  26. void file_dec_close (void)
    image
  27. {​ 3.
  28. #if AUDIO_VBASS_CONFIG
    [5.](5. audio_gain_close_demo)[ audio_gain_close_demo](5. audio_gain_close_demo)(file_dec->vbass_prev_gain);
    [6.](6. audio_noisegate_close_demo)[ audio_noisegate_close_demo](6. audio_noisegate_close_demo)(file_dec->ns_gate);
    [7.](7. audio_vbass_close_demo)[ audio_vbass_close_demo](7. audio_vbass_close_demo)(file_dec->vbass);
  29. #endif
  30. convet_data_close(file_dec->convert_16_to_32) ;
  31. convet_data_close(file_dec->convert_ 32_to_16) ;
  32. #if ((defined TCFG_EFFECT_DEVELOP_ENABLE) && TCFG_EFFECT_DEVELOP_ENABLE)
    [13.](13. audio_effect_develop_close)[ audio_effect_develop_close](13. audio_effect_develop_close)(file_dec->effect_develop_entry);
  33. #endif
  34. #if defined (TCFG_MUSIC_HARMONIC_EXCITER_ENABLE) &&TCFG_MUSIC_HARMONIC_EXCITE R_ENABLE
    [17.](17. audio_harmonic_exciter_close_api)[ audio_harmonic_exciter_close_api](17. audio_harmonic_exciter_close_api)(file_dec->harmonic_exciter);
  35. #endif
  36. ​}
(3)在混合通道之后调用示例:

如果有将音效处理集成在多个音源混合之后处理的需求,则需要在 audio_dec.c 的 audio_dec_init()函数集中处理,需要注意的是相同音效集成在混合通道之后,无需在其他音乐播放中调用,否则会引入二次处理和不必要的听感问题。音效算法在audio_dec_init()中调用示例如下:
[1.](1. int)[ int](1. int) audio_dec_init()
2. {​
3.
4. #if AUDIO_SPECTRUM_CONFIG
5. if ( spec_hdl) {​
6. entries [entry_cnt++] = &spec_hdl->entry; 7. ​}
8. #endif
9.
10. #if ((defined TCFG_EFFECT_DEVELOP_ENABLE) && TCFG_EFFECT_DEVELOP_ENABLE)
11. entries[entry_cnt++] = audio_effect_develop_open( sr, channel_num, global_bit_wide ) ;
12. #endif
13.
14. #if AUDIO_VOCAL_REMOVE_EN
15. if (vocal_remove_mix_ch_switch) {​
image 16. entries [entry_cnt++] = &vocal_remove_mix_ch_switch->entry; 17. ​}
18. #endif 19.
20. ​}

2.3 算法移植FAQ

2.3. 1 log输出配置

备注:这里以jl701n_soundbox_release_v1 .4.0为例

(1)通过board_config.h确认使用的板级
  1. /*
    image
    • 板级配置选择
  2. */
    image
  3. #define CONFIG_BOARD_JL701N_DEMO
    image
  4. // #define CONFIG_BOARD_JL701N_SOUNDCARD
  5. // #define CONFIG_BOARD_JL701N_A90
    image
  6. // #define CONFIG_BOARD_JL701N_BTEMITTER //该板级暂不支持
  7. // #define CONFIG_BOARD_JL701N_SMARTBOX
  8. // #define CONFIG_BOARD_JL701N_TWS_BOX
  9. // #define CONFIG_BOARD_JL701N_UNISOUND_BOX
  10. // #define CONFIG_BOARD_JL701N_WIRELESS_ 1TN
  11. // #define CONFIG_BOARD_JL701N_WIRELESS_ 2T1_DUPLEX
  12. // #define CONFIG_BOARD_JL701N_TEST
(2)通过board_jl701n_demo_cfg.h确认uart IO配置
1.
2.
3.
////// UART配置 // //*//
4.#define TCFG_UART0_ENABLEENABLE THIS MOUDLEimage
//串口打印模块使能
5.#define TCFG UART0 RX PORT
印可以选择NO_CONFIG_PORT)
NO CONFIG PORT//串口接收脚配置(用于打
6.#define TCFG UART0 TX PORTIO PORTA 04image
//串口发送脚配置
7.#define TCFG_UART0_BAUDRATE1000000//串口波特率配置

imageimageimageimageimageimage

2.3.2 资源跟踪
(1)内存跟踪接口

1 . mem_ stats ();

(2)CPU运行频率跟踪接口
  1. printf ( "clk_freq : %d\n " , clk_get ( " sys " ) ) ;
2.3.3 硬件加速模块

(1)FFT加速器

系列使用范例路径
AC897N/AD697Ncpu\br30\audio\audio_demo\audio_fft_demo .c
AC700Ncpu\br36\audio\audio_demo\audio_fft_demo .c
AC701N earphone
JL701N soundbox
cpu\br28\audio_demo\audio_fft_demo .c
AC695N soundboxcpu\br23\audio_demo\audio_fft_demo .c

注意1:如果对应系列SDK找不到对应的文件,请使用最新版本的SDK

注意2:不支持浮点,仅支持定点运算

(2)数学函数加速

系列引用路径
AC897N/AD697Ninclude_lib/media/media_new/media/MathFunc_fix .h
include_lib/media/media_new/media/MathFunc_float .h 备注:如遇提示重复定义,请将函数定义成static
AC700Ninclude_lib\system\math\cpu\br36\asm\math_fast_function .h
AC701N earphone
JL701N soundbox
include_lib\system\math\cpu\br28\asm\math_fast_function .h
AC695N soundboxinclude_lib/media/media_develop/media/cpu/br23/asm/hw_math . h

注意:如果引用路径里面包含asm 目录,引用示例如下:
1 . # include "asm/math_fast_function .h "

2.3.4 动态操作音效bypass/enable 问题

使用APP层的按键或其他命令方式对效果进行bypass或enable, 由音效算法接口模块内部提供enable/disable接口的,无需在播歌流程中增加其他处理,防止引入歧义; 由外部变量控制enable/disable 的,仅需在effect_develop_data_handler()中处理即可,例如:

  1. if (dec->effect_develop_enable ) {​
  2. effect_develop_run();
  3. ​}
2.3.5 运行开销问题

当音效算法运行时,CPU在当前时钟满载或超载后,音频播放通路必然会发生欠载,即数据流速达不到DAC播放速度,通常会报underrun错误或蓝牙buffer接收满的错误,打印信息为 uuuu (即under run, DAC欠载)、 FFFF(即full,输入溢出)。
此时需要检查算法的运行效率,是否CPU算力满足,当检查算法消耗mips未超过CPU 设计标准负荷,且CPU满载,则有可能为播歌+算法的运行开销处于当前系统时钟(频率)的边界值,那么需要提高系统时钟以确保正常运行。提升系统时钟可以在a2dp_dec_start()函数中的如下位置进行设置:
image

2.3.6 算法运行时间估算

image

2.3.7 代码异常(exception)

音效算法运行出现CPU异常,有几种情况需要注意:
1)watch_dog异常:通常由于算法执行了CPU设计标志之外的mips开销导致CPU超载导致异常;
2)cpu read/write mmu异常:通常为算法内部中对数据处理读/写越界