#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