AC700N 播歌双EQ DEMO示例及说明
📎 原始文档:https://www.kdocs.cn/l/cuHiZKofzKiO AC700N 播歌双EQ DEMO示例及说明
概述
双EQ的做法,是基于耳机本地存在EQ文件的基础上,再次叠加一个新的EQ系数上去,做到在原定的声学调音的基础上,做二次调整
应用场景
- APP调节EQ,包括用户自定义EQ或用户切换预设音效
- 其他等需要在本地EQ文件效果的基础上叠加音效的场景
流程说明
流程框架
播歌初始化EQ参数->初始化本地EQ文件相关流程(默认自带)->初始化APP EQ->run 本地EQ->run APP EQ->播歌停止->关闭本地EQ文件相关流程(默认自带)-->关闭APP EQ相关流程
代码解析
此处仅针对几个关键的函数进行说明,具体实现见demo的audio_app_mix_eq.c文件
//app eq系数更新入口,传入10bytes的eq data
//demo示例中按键单击已有默认两个EQ数据buf做示例
void app_eq_setting(float *eq_data)
{
for (u8 i = 0; i < EQ_SECTION_MAX; i++){
g_printf("data[%d]: ", i);
//更新APP eq系数表
app_mix_eq_tab_eq[i].gain = eq_data[i];
#ifdef CONFIG_DEBUG_ENABLE
put_float(app_mix_eq_tab_eq[i].gain);
#endif
}
fade_ctrl.use_global_gain = 0;
//生效APP eq系数表
user_eq_mode_set(0);
}
static void user_eq_mode_set(u8 game_mode_en)
{
//不做解释的流程部分进行..省略
//..
//fade_ctrl结构体中为每次更新eq实际跑的参数,因此此处需要赋值总增益和eq系数表指针
fade_ctrl.use_global_gain = app_mix_global_gain;
fade_ctrl.use_seg = app_mix_eq_tab_eq;
//如果当前音频解码器正在运行,通过定时器达到淡入淡出的效果
if (bt_media_is_running() && !game_mode_en) {
puts("-----------------start \n");
if (!fade_ctrl.timer) { //上一次EQ调整完毕
fade_ctrl.timer = sys_hi_timer_add(NULL, audio_eq_seg_fade_run, USER_EQ_FADE_TIME);
}
} else { //不在播歌中,直接设置
if (fade_ctrl.timer) {
sys_hi_timer_del(fade_ctrl.timer);
fade_ctrl.timer = 0;
}
audio_eq_seg_set_direct(fade_ctrl.use_seg, USER_EQ_NSECIONT_NUM, fade_ctrl.use_global_gain);
user_eq_set_update();
}
//..
}
void app_eq_init(void)
{
//该函数必须开机跑一次,不然由于fade_ctrl中的eq系数表指针未能初始化会异常
//初始化的东西,可以自行添加读VM之类的操作
fade_ctrl.use_global_gain = 0;
user_eq_mode_set(0);
}