5. 完整的浮点EQ
AD16N内置硬件EQ,最大可以配置10段EQ参数。
OTP方案因存储空间限制,只支持单个简单EQ音效;
Flash方案可支持完整的浮点EQ音效,支持多路EQ同时工作;
本章简要介绍完整的浮点EQ音效及在最后小节简要说明新版本EQ使用流程。
5.1. 浮点EQ配置(Flash工程)
一个浮点EQ音效由EQ系数表和总增益组成,其中:
1、EQ系数表默认使用10段EQ参数,每一段可以单独配置滤波器(LOW_PASS、HIGH_PASS、BAND_PASS)、中心频点(20~20kHz)、增益(-18~18dB)以及Q值(0.3~30.0); 2、总增益默认配置范围为-90~20dB,影响每一段EQ系数。所有EQ模式统一由eq_type_tab[]数组管理,不同EQ之间可以任意切换。
![]()
图1 EQ系数表对应关系
浮点EQ可同时运行多路运算,运算多路EQ比运算单路EQ RAM资源开销大;
const变量config_hw_single_eq = 1时,仅运行单路EQ时,只消耗344字节RAM空间;
const变量config_hw_single_eq = 0时,可运行多路EQ,每一路EQ消耗984字节RAM空间;
![]()
图2 多路浮点EQ配置
(注意:浮点EQ在ad16n_flash-release_v1.3.0版本以及之后后管理模式发生改动,下面简单说明新旧版本EQ模式管理区别。)
5.1.1. 旧版本EQ模式管理
ad16n_flash-release_v1.2.1版本及往前版本,所有EQ模式统一由eq_type_tab[]数组管理,不同EQ之间可以任意切换。
![]()
图3 旧版本EQ模式由eq_type_tab[]数组管理
5.1.2. 新版本EQ模式管理
ad16n_flash-release_v1.3.0版本更新后,EQ模式管理方式发生改动,具体改动原理如下:
1、旧版本EQ模式切换是由SDK里的eq_type_tab[]数组管理; 2、新版本EQ模式切换是采用PC工具的在线EQ调试助手生成的eq_cfg.bin文件进行管理,方便客户调试EQ参数时听取效果;新版本EQ使用时,需要将工具生成的bin文件放置到下载目录里,并重命名为eq_cfg.bin,打包成dir_eq文件下载到小机当中。
(注意:SDK中默认识别EQ文件路径名为dir_eq/eq_cfg.bin,如果需要更改bin文件名可以修改CFG_EQ_FILE定义的路径。)
![]()
图4 小机识别bin文件路径
目前公版SDK里的eq_cfg.bin文件已内含6中EQ模式,分别为normal、country、jazz、rock、pop、classic模式。
具体使用示例可以阅读本章最后章节。
5.2. 浮点EQ相关接口(Flash工程)
5.2.1. 函数 void *link_eq_sound(void *p_sound_out, void *p_dac_cbuf, void **pp_effect, u32 sr, u8 ch)
此函数只适用于v1.3.0版本及往后版本更新的EQ初始化。
5.2.2. 函数 void *link_eq_sound(void *p_sound_out, void *p_dac_cbuf, void **pp_effect, u32 sr, u8 ch)
此函数实现EQ模块的初始化。此函数主要实现移频啸叫抑制算法的启动,将抑制器链接到音频链路中:
1、p_sound_out:当前算法前级的音频通道句柄; 2、p_dac_cbuf:输出到DAC的OBUF; 3、pp_effect:存放当前音效算法的控制句柄指针的指针; 4、sr:当前输入音频的采样率; 5、ch:声道数; 6、返回值:启动之后最新的音频通道句柄;
5.2.3. 函数 int eq_mode_sw(void *parm)
此函数实现切换下一个EQ模式,可在EQ运行中调用,其中参数:
1、parm:已启动的eq音效句柄; 2、返回值: -1, 切换失败,EQ未启动; 0, 切换成功;
5.2.4. 函数 u8 get_eq_mode_total_num(void *parm)
此函数只适用于获取v1.3.0版本及往后版本更新的eq_cfg.bin文件里的EQ模式总数:
1、返回值:eq_cfg.bin文件中保存的EQ模式总数
5.2.5. 函数 u8 get_eq_mode_total_num(void *parm)
此函数只适用于获取v1.3.0版本及往后版本更新的eq_cfg.bin文件里的EQ模式名字:
1、eq_mode:获取第几组EQ模式名字对应的序号; 2、返回值:对应序号的EQ模式名字指针;
5.3. 在线EQ调试助手使用一般流程
下面介绍新版本EQ使用在线EQ调试助手调试出目标效果后搭配小机使用一般流程。
5.3.1. SDK里开启PC模式和使用在线EQ调试工具宏定义
在app_config.h里使能TCFG_PC_ENABLE和TCFG_CFG_TOOL_ENABLE。
(注意:开启在线EQ调试助手后,PC模式下需要搭配CDC协议(CDC_CLASS)使用,此时与读卡器功能(MASSSTORAGE_CLASS)冲突)
![]()
图5 使用在线EQ调试助手前app_config.h配置
5.3.2. 小机进入PC模式后打开使用AD16N在线EQ调试助手
AD16N在线EQ调试助手工具放在了下载目录里的eq_tool文件夹里。
小机进入PC模式后,打开在线EQ调试工具,在设置界面中的端口选项找到并选中串行设备,打开后会自动跳入到音效调节界面。
常见问题和解决办法:
1、无法找到串行设备:检查是否打开上一小节图5中的TCFG_EQ_TOOL_ENABLE宏;![]()
图6 打开AD16N在线EQ调试助手工具
![]()
图7 小机与工具进行连接
![]()
图8 小机与工具成功连接后自动进入音效调节界面
5.3.3. 在音效调节界面双击点击musicEQ进入在线调节EQ曲线界面
在音效调节界面左上角有帮助文档选项,有具体文档方便用户理解使用该工具。
双击点击进入musicEQ后,可以通过拉曲线的方式实时听取小机EQ效果;当调试好具体效果后可以点击保存样例,保存当前曲线。
退出musicEQ后,在音效调节界面选中保存文件,会生成一个.bin,里面包含了在musicEQ里保存样例的各组EQ模式。
(注意:SDK固定最大支持10段EQ(即工具中的10个序号)!!!)
![]()
图9 工具在线调试EQ曲线并保存该EQ曲线参数
5.3.4. 把生成的.bin文件下载到小机上
把上一小节生成的.bin文件打包成dir_eq放在下载目录(即与download_bat.c同一目录下)当中,并把dir_eq加入到download_bat.c的资源文件下载当中,此时重新下载编译即可。
(注意:下载进入小机的.bin文件需要命名为eq_cfg.bin,打包文件需要命名为dir_eq)
![]()
图10 打包流程
![]()
图11 将dir_eq文件夹添加进下载目录中
5.3.5. SDK具体使用EQ样例
不再使用调试工具后,SDK里可以失能TCFG_CFG_TOOL_ENABLE,以免PC模式下无法使用读卡器功能(MASSSTORAGE_CLASS)。
在公版SDK里,音乐模式和PC模式都默认开启了EQ;如在音乐模式下,只需要调用eq_mode_sw()函数即可自动切换在图9里调试好的EQ模式,并打印出切换后EQ模式的序号和其名字。
![]()
图12 音乐模式下解码器添加BIT_EQ选项后解码会连接EQ
![]()
图13 音乐模式下切换EQ模式
![]()
图14 音乐模式下切换EQ模式打印