KT25-0812_82A-UART/cpu/br25/audio_effect/eq_config.c

557 lines
25 KiB
C
Raw Normal View History

2025-08-12 10:09:23 +00:00
#include "system/includes.h"
#include "media/includes.h"
#include "app_config.h"
#include "app_online_cfg.h"
#include "online_db/online_db_deal.h"
#include "application/audio_eq_drc_apply.h"
/* #define LOG_TAG "[APP-EQ]" */
/* #define LOG_ERROR_ENABLE */
/* #define LOG_INFO_ENABLE */
/* #define LOG_DUMP_ENABLE */
/* #include "debug.h" */
const u8 audio_eq_sdk_name[16] = "AC696N";
const u8 audio_eq_ver[4] = {0, 7, 2, 0};
#if (TCFG_EQ_ENABLE != 0)
#if !TCFG_USE_EQ_FILE
const struct eq_seg_info eq_tab_normal[] = {
#if TCFG_USER_EQ_MODE_NUM > 0
{0, EQ_IIR_TYPE_BAND_PASS, 31, 0 << 20, (int)(0.7f * (1 << 24))},
{1, EQ_IIR_TYPE_BAND_PASS, 62, 0 << 20, (int)(0.7f * (1 << 24))},
{2, EQ_IIR_TYPE_BAND_PASS, 125, 0 << 20, (int)(0.7f * (1 << 24))},
{3, EQ_IIR_TYPE_BAND_PASS, 250, 0 << 20, (int)(0.7f * (1 << 24))},
{4, EQ_IIR_TYPE_BAND_PASS, 500, 0 << 20, (int)(0.7f * (1 << 24))},
{5, EQ_IIR_TYPE_BAND_PASS, 1000, 0 << 20, (int)(0.7f * (1 << 24))},
{6, EQ_IIR_TYPE_BAND_PASS, 2000, 0 << 20, (int)(0.7f * (1 << 24))},
{7, EQ_IIR_TYPE_BAND_PASS, 4000, 0 << 20, (int)(0.7f * (1 << 24))},
{8, EQ_IIR_TYPE_BAND_PASS, 8000, 0 << 20, (int)(0.7f * (1 << 24))},
{9, EQ_IIR_TYPE_BAND_PASS, 16000, 0 << 20, (int)(0.7f * (1 << 24))},
#if (EQ_SECTION_MAX > 10)
//10段之后频率值设置96k,目的是让10段之后的eq走直通
{10, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{11, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{12, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{13, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{14, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{15, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{16, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{17, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{18, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{19, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
#endif
#if (EQ_SECTION_MAX > 20)
{20, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{21, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{22, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{23, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{24, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{25, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{26, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{27, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{28, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{29, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{30, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{31, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
#endif
#endif
};
const struct eq_seg_info eq_tab_rock[] = {
#if TCFG_USER_EQ_MODE_NUM > 1
{0, EQ_IIR_TYPE_BAND_PASS, 31, -2 << 20, (int)(0.7f * (1 << 24))},
{1, EQ_IIR_TYPE_BAND_PASS, 62, 0 << 20, (int)(0.7f * (1 << 24))},
{2, EQ_IIR_TYPE_BAND_PASS, 125, 2 << 20, (int)(0.7f * (1 << 24))},
{3, EQ_IIR_TYPE_BAND_PASS, 250, 4 << 20, (int)(0.7f * (1 << 24))},
{4, EQ_IIR_TYPE_BAND_PASS, 500, -2 << 20, (int)(0.7f * (1 << 24))},
{5, EQ_IIR_TYPE_BAND_PASS, 1000, -2 << 20, (int)(0.7f * (1 << 24))},
{6, EQ_IIR_TYPE_BAND_PASS, 2000, 0 << 20, (int)(0.7f * (1 << 24))},
{7, EQ_IIR_TYPE_BAND_PASS, 4000, 0 << 20, (int)(0.7f * (1 << 24))},
{8, EQ_IIR_TYPE_BAND_PASS, 8000, 4 << 20, (int)(0.7f * (1 << 24))},
{9, EQ_IIR_TYPE_BAND_PASS, 16000, 4 << 20, (int)(0.7f * (1 << 24))},
#if (EQ_SECTION_MAX > 10)
//10段之后频率值设置96k,目的是让10段之后的eq走直通
{10, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{11, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{12, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{13, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{14, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{15, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{16, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{17, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{18, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{19, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
#endif
#if (EQ_SECTION_MAX > 20)
{20, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{21, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{22, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{23, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{24, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{25, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{26, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{27, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{28, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{29, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{30, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{31, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
#endif
#endif
};
const struct eq_seg_info eq_tab_pop[] = {
#if TCFG_USER_EQ_MODE_NUM > 2
{0, EQ_IIR_TYPE_BAND_PASS, 31, 3 << 20, (int)(0.7f * (1 << 24))},
{1, EQ_IIR_TYPE_BAND_PASS, 62, 1 << 20, (int)(0.7f * (1 << 24))},
{2, EQ_IIR_TYPE_BAND_PASS, 125, 0 << 20, (int)(0.7f * (1 << 24))},
{3, EQ_IIR_TYPE_BAND_PASS, 250, -2 << 20, (int)(0.7f * (1 << 24))},
{4, EQ_IIR_TYPE_BAND_PASS, 500, -4 << 20, (int)(0.7f * (1 << 24))},
{5, EQ_IIR_TYPE_BAND_PASS, 1000, -4 << 20, (int)(0.7f * (1 << 24))},
{6, EQ_IIR_TYPE_BAND_PASS, 2000, -2 << 20, (int)(0.7f * (1 << 24))},
{7, EQ_IIR_TYPE_BAND_PASS, 4000, 0 << 20, (int)(0.7f * (1 << 24))},
{8, EQ_IIR_TYPE_BAND_PASS, 8000, 1 << 20, (int)(0.7f * (1 << 24))},
{9, EQ_IIR_TYPE_BAND_PASS, 16000, 2 << 20, (int)(0.7f * (1 << 24))},
#if (EQ_SECTION_MAX > 10)
//10段之后频率值设置96k,目的是让10段之后的eq走直通
{10, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{11, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{12, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{13, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{14, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{15, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{16, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{17, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{18, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{19, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
#endif
#if (EQ_SECTION_MAX > 20)
{20, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{21, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{22, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{23, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{24, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{25, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{26, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{27, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{28, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{29, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{30, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{31, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
#endif
#endif
};
const struct eq_seg_info eq_tab_classic[] = {
#if TCFG_USER_EQ_MODE_NUM > 3
{0, EQ_IIR_TYPE_BAND_PASS, 31, 0 << 20, (int)(0.7f * (1 << 24))},
{1, EQ_IIR_TYPE_BAND_PASS, 62, 8 << 20, (int)(0.7f * (1 << 24))},
{2, EQ_IIR_TYPE_BAND_PASS, 125, 8 << 20, (int)(0.7f * (1 << 24))},
{3, EQ_IIR_TYPE_BAND_PASS, 250, 4 << 20, (int)(0.7f * (1 << 24))},
{4, EQ_IIR_TYPE_BAND_PASS, 500, 0 << 20, (int)(0.7f * (1 << 24))},
{5, EQ_IIR_TYPE_BAND_PASS, 1000, 0 << 20, (int)(0.7f * (1 << 24))},
{6, EQ_IIR_TYPE_BAND_PASS, 2000, 0 << 20, (int)(0.7f * (1 << 24))},
{7, EQ_IIR_TYPE_BAND_PASS, 4000, 0 << 20, (int)(0.7f * (1 << 24))},
{8, EQ_IIR_TYPE_BAND_PASS, 8000, 2 << 20, (int)(0.7f * (1 << 24))},
{9, EQ_IIR_TYPE_BAND_PASS, 16000, 2 << 20, (int)(0.7f * (1 << 24))},
#if (EQ_SECTION_MAX > 10)
//10段之后频率值设置96k,目的是让10段之后的eq走直通
{10, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{11, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{12, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{13, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{14, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{15, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{16, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{17, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{18, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{19, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
#endif
#if (EQ_SECTION_MAX > 20)
{20, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{21, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{22, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{23, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{24, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{25, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{26, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{27, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{28, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{29, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{30, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{31, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
#endif
#endif
};
const struct eq_seg_info eq_tab_country[] = {
#if TCFG_USER_EQ_MODE_NUM > 5
{0, EQ_IIR_TYPE_BAND_PASS, 31, -2 << 20, (int)(0.7f * (1 << 24))},
{1, EQ_IIR_TYPE_BAND_PASS, 62, 0 << 20, (int)(0.7f * (1 << 24))},
{2, EQ_IIR_TYPE_BAND_PASS, 125, 0 << 20, (int)(0.7f * (1 << 24))},
{3, EQ_IIR_TYPE_BAND_PASS, 250, 2 << 20, (int)(0.7f * (1 << 24))},
{4, EQ_IIR_TYPE_BAND_PASS, 500, 2 << 20, (int)(0.7f * (1 << 24))},
{5, EQ_IIR_TYPE_BAND_PASS, 1000, 0 << 20, (int)(0.7f * (1 << 24))},
{6, EQ_IIR_TYPE_BAND_PASS, 2000, 0 << 20, (int)(0.7f * (1 << 24))},
{7, EQ_IIR_TYPE_BAND_PASS, 4000, 0 << 20, (int)(0.7f * (1 << 24))},
{8, EQ_IIR_TYPE_BAND_PASS, 8000, 4 << 20, (int)(0.7f * (1 << 24))},
{9, EQ_IIR_TYPE_BAND_PASS, 16000, 4 << 20, (int)(0.7f * (1 << 24))},
#if (EQ_SECTION_MAX > 10)
//10段之后频率值设置96k,目的是让10段之后的eq走直通
{10, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{11, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{12, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{13, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{14, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{15, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{16, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{17, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{18, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{19, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
#endif
#if (EQ_SECTION_MAX > 20)
{20, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{21, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{22, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{23, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{24, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{25, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{26, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{27, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{28, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{29, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{30, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{31, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
#endif
#endif
};
const struct eq_seg_info eq_tab_jazz[] = {
#if TCFG_USER_EQ_MODE_NUM > 4
{0, EQ_IIR_TYPE_BAND_PASS, 31, 0 << 20, (int)(0.7f * (1 << 24))},
{1, EQ_IIR_TYPE_BAND_PASS, 62, 0 << 20, (int)(0.7f * (1 << 24))},
{2, EQ_IIR_TYPE_BAND_PASS, 125, 0 << 20, (int)(0.7f * (1 << 24))},
{3, EQ_IIR_TYPE_BAND_PASS, 250, 4 << 20, (int)(0.7f * (1 << 24))},
{4, EQ_IIR_TYPE_BAND_PASS, 500, 4 << 20, (int)(0.7f * (1 << 24))},
{5, EQ_IIR_TYPE_BAND_PASS, 1000, 4 << 20, (int)(0.7f * (1 << 24))},
{6, EQ_IIR_TYPE_BAND_PASS, 2000, 0 << 20, (int)(0.7f * (1 << 24))},
{7, EQ_IIR_TYPE_BAND_PASS, 4000, 2 << 20, (int)(0.7f * (1 << 24))},
{8, EQ_IIR_TYPE_BAND_PASS, 8000, 3 << 20, (int)(0.7f * (1 << 24))},
{9, EQ_IIR_TYPE_BAND_PASS, 16000, 4 << 20, (int)(0.7f * (1 << 24))},
#if (EQ_SECTION_MAX > 10)
//10段之后频率值设置96k,目的是让10段之后的eq走直通
{10, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{11, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{12, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{13, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{14, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{15, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{16, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{17, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{18, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{19, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
#endif
#if (EQ_SECTION_MAX > 20)
{20, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{21, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{22, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{23, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{24, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{25, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{26, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{27, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{28, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{29, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{30, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{31, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
#endif
#endif
};
struct eq_seg_info eq_tab_custom[] = {
#if TCFG_USER_EQ_MODE_NUM > 6
{0, EQ_IIR_TYPE_BAND_PASS, 31, 0 << 20, (int)(0.7f * (1 << 24))},
{1, EQ_IIR_TYPE_BAND_PASS, 62, 0 << 20, (int)(0.7f * (1 << 24))},
{2, EQ_IIR_TYPE_BAND_PASS, 125, 0 << 20, (int)(0.7f * (1 << 24))},
{3, EQ_IIR_TYPE_BAND_PASS, 250, 0 << 20, (int)(0.7f * (1 << 24))},
{4, EQ_IIR_TYPE_BAND_PASS, 500, 0 << 20, (int)(0.7f * (1 << 24))},
{5, EQ_IIR_TYPE_BAND_PASS, 1000, 0 << 20, (int)(0.7f * (1 << 24))},
{6, EQ_IIR_TYPE_BAND_PASS, 2000, 0 << 20, (int)(0.7f * (1 << 24))},
{7, EQ_IIR_TYPE_BAND_PASS, 4000, 0 << 20, (int)(0.7f * (1 << 24))},
{8, EQ_IIR_TYPE_BAND_PASS, 8000, 0 << 20, (int)(0.7f * (1 << 24))},
{9, EQ_IIR_TYPE_BAND_PASS, 16000, 0 << 20, (int)(0.7f * (1 << 24))},
#if (EQ_SECTION_MAX > 10)
//10段之后频率值设置96k,目的是让10段之后的eq走直通
{10, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{11, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{12, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{13, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{14, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{15, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{16, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{17, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{18, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{19, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
#endif
#if (EQ_SECTION_MAX > 20)
{20, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{21, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{22, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{23, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{24, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{25, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{26, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{27, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{28, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{29, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{30, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
{31, EQ_IIR_TYPE_BAND_PASS, 96000, 0 << 20, (int)(0.7f * (1 << 24))},
#endif
#endif
};
const EQ_CFG_SEG *eq_type_tab[EQ_MODE_MAX] = {
eq_tab_normal, eq_tab_rock, eq_tab_pop, eq_tab_classic, eq_tab_jazz, eq_tab_country, eq_tab_custom
};
#endif
__attribute__((weak)) u32 get_eq_mode_tab(void)
{
#if !TCFG_USE_EQ_FILE
return (u32)eq_type_tab;
#else
return 0;
#endif
}
#if (EQ_SECTION_MAX==9)
static const u8 eq_mode_use_idx[] = {
0, 1, 2, 3, 4, 5, /*6,*/ 7, 8, 9
};
#elif (EQ_SECTION_MAX==8)
static const u8 eq_mode_use_idx[] = {
0, /*1,*/ 2, 3, 4, 5, 6, 7, /*8,*/ 9
};
#elif (EQ_SECTION_MAX==7)
static const u8 eq_mode_use_idx[] = {
0, /*1,*/ 2, 3, 4, 5, /*6,*/ 7, /*8,*/ 9
};
#elif (EQ_SECTION_MAX==6)
static const u8 eq_mode_use_idx[] = {
0, /*1,*/ 2, 3, 4, /*5,*/ /*6,*/ 7, /*8,*/ 9
};
#elif (EQ_SECTION_MAX==5)
static const u8 eq_mode_use_idx[] = {
/*0,*/ 1, /*2,*/ 3, /*4,*/ 5, /*6,*/ 7, /*8,*/ 9
};
#else
static const u8 eq_mode_use_idx[] = {
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31
};
#endif
/*
*eq系数表
* */
#if TCFG_EQ_ENABLE && TCFG_PHONE_EQ_ENABLE
#if !TCFG_USE_EQ_FILE
const struct eq_seg_info phone_eq_tab_normal[] = {
{0, EQ_IIR_TYPE_HIGH_PASS, 200, 0 << 20, (int)(0.7f * (1 << 24))},
{1, EQ_IIR_TYPE_BAND_PASS, 300, 0 << 20, (int)(0.7f * (1 << 24))},
{2, EQ_IIR_TYPE_BAND_PASS, 400, 0 << 20, (int)(0.7f * (1 << 24))},
{3, EQ_IIR_TYPE_BAND_PASS, 450, 0 << 20, (int)(0.7f * (1 << 24))},
{4, EQ_IIR_TYPE_BAND_PASS, 500, 0 << 20, (int)(0.7f * (1 << 24))},
{5, EQ_IIR_TYPE_BAND_PASS, 1000, 0 << 20, (int)(0.7f * (1 << 24))},
{6, EQ_IIR_TYPE_BAND_PASS, 2000, 0 << 20, (int)(0.7f * (1 << 24))},
{7, EQ_IIR_TYPE_BAND_PASS, 4000, 0 << 20, (int)(0.7f * (1 << 24))},
{8, EQ_IIR_TYPE_BAND_PASS, 8000, 0 << 20, (int)(0.7f * (1 << 24))},
{9, EQ_IIR_TYPE_BAND_PASS, 16000, 0 << 20, (int)(0.7f * (1 << 24))},
};
#endif
#endif
/*
*eq系数表
* */
#if !TCFG_USE_EQ_FILE
const struct eq_seg_info ul_eq_tab_normal[] = {
{0, EQ_IIR_TYPE_HIGH_PASS, 200, 0 << 20, (int)(0.7f * (1 << 24))},
{1, EQ_IIR_TYPE_BAND_PASS, 300, 0 << 20, (int)(0.7f * (1 << 24))},
{2, EQ_IIR_TYPE_BAND_PASS, 400, 0 << 20, (int)(0.7f * (1 << 24))},
{3, EQ_IIR_TYPE_BAND_PASS, 450, 0 << 20, (int)(0.7f * (1 << 24))},
{4, EQ_IIR_TYPE_BAND_PASS, 500, 0 << 20, (int)(0.7f * (1 << 24))},
{5, EQ_IIR_TYPE_BAND_PASS, 1000, 0 << 20, (int)(0.7f * (1 << 24))},
{6, EQ_IIR_TYPE_BAND_PASS, 2000, 0 << 20, (int)(0.7f * (1 << 24))},
{7, EQ_IIR_TYPE_BAND_PASS, 4000, 0 << 20, (int)(0.7f * (1 << 24))},
{8, EQ_IIR_TYPE_BAND_PASS, 8000, 0 << 20, (int)(0.7f * (1 << 24))},
{9, EQ_IIR_TYPE_BAND_PASS, 16000, 0 << 20, (int)(0.7f * (1 << 24))},
};
#endif
#define SONG_SECTION EQ_SECTION_MAX
#define CALL_SECTION 3//下行段数,小于等于SONG_SECTION
#define UL_SECTION 3//上行段数,小于等于SONG_SECTION
/*
*
*
* */
eq_tool_cfg eq_tool_tab[] = {
{call_eq_mode, (u8 *)"通话宽频下行EQ", 0x3000, CALL_SECTION, 1, {EQ_ONLINE_CMD_CALL_EQ_SEG, 0}},
{call_narrow_eq_mode, (u8 *)"通话窄频下行EQ", 0x3001, CALL_SECTION, 1, {EQ_ONLINE_CMD_CALL_EQ_SEG, 0}},
{aec_eq_mode, (u8 *)"通话宽频上行EQ", 0x3002, UL_SECTION, 1, {EQ_ONLINE_CMD_AEC_EQ_SEG, 0}},
{aec_narrow_eq_mode, (u8 *)"通话窄频上行EQ", 0x3003, UL_SECTION, 1, {EQ_ONLINE_CMD_AEC_EQ_SEG, 0}},
{song_eq_mode, (u8 *)"普通音频EQ", 0x3004, SONG_SECTION, 2, {EQ_ONLINE_CMD_SONG_EQ_SEG, EQ_ONLINE_CMD_SONG_DRC}},
#ifdef DAC_OUTPUT_FRONT_LR_REAR_LR
#if (TCFG_AUDIO_DAC_CONNECT_MODE == DAC_OUTPUT_FRONT_LR_REAR_LR)
{fr_eq_mode, (u8 *)"FR_EQ", 0x3005, SONG_SECTION, 2, {EQ_ONLINE_CMD_SONG_EQ_SEG, EQ_ONLINE_CMD_SONG_DRC}},
#if TCFG_EQ_DIVIDE_ENABLE
{rl_eq_mode, (u8 *)"RL_EQ", 0x3006, SONG_SECTION, 2, {EQ_ONLINE_CMD_SONG_EQ_SEG, EQ_ONLINE_CMD_SONG_DRC}},
{rr_eq_mode, (u8 *)"RR_EQ", 0x3007, SONG_SECTION, 2, {EQ_ONLINE_CMD_SONG_EQ_SEG, EQ_ONLINE_CMD_SONG_DRC}},
#endif
#endif
#endif
};
/*----------------------------------------------------------------------------*/
/**@brief eq 段数更新,需要在eq_init前就准备好
@param mode:call_eq_mode\call_narrow_eq_section等模式
@param section:EQ_SECTION_MAX
@return
@note
*/
/*----------------------------------------------------------------------------*/
void set_eq_tool_tab_section(u8 mode, u8 section)
{
#if TCFG_EQ_ONLINE_ENABLE
eq_tool_tab[mode].section = section;
#endif
}
void drc_default_init(EQ_CFG *eq_cfg, u8 mode)
{
#if TCFG_DRC_ENABLE
int i = mode;
if (eq_cfg && eq_cfg->drc) {
//限幅器的初始值
int th = 0;//db -60db~0db
int threshold = round(pow(10.0, th / 20.0) * 32768); // 0db:32768, -60db:33
eq_cfg->cfg_parm[i].drc_parm.parm.drc.nband = 1;
eq_cfg->cfg_parm[i].drc_parm.parm.drc.type = 1;
eq_cfg->cfg_parm[i].drc_parm.parm.drc._p.limiter[0].attacktime = 5;
eq_cfg->cfg_parm[i].drc_parm.parm.drc._p.limiter[0].releasetime = 500;
eq_cfg->cfg_parm[i].drc_parm.parm.drc._p.limiter[0].threshold[0] = threshold;
eq_cfg->cfg_parm[i].drc_parm.parm.drc._p.limiter[0].threshold[1] = 32768;
}
#endif
}
int eq_init(void)
{
audio_eq_init();
eq_adjust_parm parm = {0};
#if TCFG_EQ_ONLINE_ENABLE
parm.online_en = 1;
#endif
if (config_filter_coeff_fade_en) {
parm.fade_en = 1;
}
#if TCFG_USE_EQ_FILE
parm.file_en = 1;
#endif
#if TCFG_DRC_ENABLE
parm.drc = 1;
#endif
#if TCFG_USER_TWS_ENABLE
parm.tws = 1;
#endif
#if APP_ONLINE_DEBUG
parm.app = 1;
#endif
#if (RCSP_ADV_EN)&&(JL_EARPHONE_APP_EN)&&(TCFG_DRC_ENABLE == 0)
parm.limit_zero = 1;
#endif
#if TCFG_EQ_DIVIDE_ENABLE
parm.stero = 1;
parm.mode_num = 8;
#endif
if (!parm.stero) {
parm.mode_num = 5;// 一共有多少个模式
/* #ifdef DAC_OUTPUT_FRONT_LR_REAR_LR */
/* #if (TCFG_AUDIO_DAC_CONNECT_MODE == DAC_OUTPUT_FRONT_LR_REAR_LR) */
/* parm.mode_num = 6; */
/* #endif */
/* #endif */
}
#if !TCFG_USE_EQ_FILE
#if TCFG_PHONE_EQ_ENABLE
parm.phone_eq_tab = phone_eq_tab_normal;
parm.phone_eq_tab_size = ARRAY_SIZE(phone_eq_tab_normal);
#endif
parm.ul_eq_tab = ul_eq_tab_normal;
parm.ul_eq_tab_size = ARRAY_SIZE(ul_eq_tab_normal);
#endif
parm.eq_tool_tab = eq_tool_tab;
parm.eq_mode_use_idx = eq_mode_use_idx;
parm.eq_type_tab = (void *)get_eq_mode_tab();;
#if TCFG_USER_EQ_MODE_NUM
parm.type_num = TCFG_USER_EQ_MODE_NUM;//EQ_MODE_MAX;
#endif
parm.section_max = EQ_SECTION_MAX;
EQ_CFG *eq_cfg = eq_cfg_open(&parm);
if (eq_cfg) {
#if APP_ONLINE_DEBUG
if (eq_cfg->app) {
app_online_db_register_handle(DB_PKT_TYPE_EQ, eq_app_online_parse);
}
#endif
for (int i = 0; i < eq_cfg->mode_num; i++) {
if (eq_cfg->eq_type == EQ_TYPE_MODE_TAB) {
set_global_gain(eq_cfg, i, 0);
drc_default_init(eq_cfg, i);
}
}
}
return 0;
}
__initcall(eq_init);
#endif