257 lines
7.6 KiB
C
257 lines
7.6 KiB
C
#ifdef SUPPORT_MS_EXTENSIONS
|
||
#pragma bss_seg(".effects_default_param.data.bss")
|
||
#pragma data_seg(".effects_default_param.data")
|
||
#pragma const_seg(".effects_default_param.text.const")
|
||
#pragma code_seg(".effects_default_param.text")
|
||
#endif
|
||
#include "system/includes.h"
|
||
#include "media/includes.h"
|
||
#include "app_config.h"
|
||
#include "audio_config.h"
|
||
#include "jlstream.h"
|
||
#include "cfg_tool.h"
|
||
#include "effects/effects_adj.h"
|
||
#include "effects/audio_eq.h"
|
||
#include "effects/eq_config.h"
|
||
#include "effects/audio_wdrc.h"
|
||
#include "effects/audio_pitchspeed.h"
|
||
#include "effects/audio_spk_eq.h"
|
||
#include "media/audio_energy_detect.h"
|
||
#include "bass_treble.h"
|
||
#include "scene_switch.h"
|
||
#include "effects_default_param.h"
|
||
#include "ascii.h"
|
||
|
||
struct effect_default_hdl {
|
||
u16 pitchV;
|
||
};
|
||
|
||
struct effect_default_hdl effect_default = {
|
||
.pitchV = 32768,
|
||
};
|
||
|
||
static u32 effect_strcmp(const char *str1, const char *str2);
|
||
|
||
u8 __attribute__((weak)) get_current_scene()
|
||
{
|
||
return 0;
|
||
}
|
||
u8 __attribute__((weak)) get_mic_current_scene()
|
||
{
|
||
return 0;
|
||
}
|
||
u8 __attribute__((weak)) get_music_eq_preset_index(void)
|
||
{
|
||
return 0;
|
||
}
|
||
|
||
float powf(float x, float y);
|
||
static int get_pitchV(float pitch)
|
||
{
|
||
int pitchV = 32768 * powf(2.0f, pitch / 12);
|
||
pitchV = (pitchV >= 65536) ? 65534 : pitchV; //传入算法是u16类型,作特殊处理防止溢出
|
||
return pitchV;
|
||
}
|
||
|
||
u16 audio_pitch_default_parm_set(u8 pitch_mode)
|
||
{
|
||
float pitch_param_table[] = {-12, -10, -8, -6, -4, -2, 0, 2, 4, 6, 8, 10, 12};
|
||
effect_default.pitchV = get_pitchV(pitch_param_table[pitch_mode]);
|
||
return effect_default.pitchV;
|
||
}
|
||
|
||
static void audio_energy_det_handler(void *prive, u8 event, u8 ch, u8 ch_total)
|
||
{
|
||
char name[16];
|
||
memcpy(name, prive, strlen(prive));
|
||
//name 模块名称,唯一标识
|
||
// ch < ch_total 时:表示通道(ch)触发的事件
|
||
// ch = ch_total 时:表示全部通道都触发的事件
|
||
|
||
if (ch < ch_total) {
|
||
/*
|
||
*针对独立通道,比如立体声场景,这里就分别显示ch0和ch1的能量
|
||
*适用于独立控制声道mute的场景
|
||
*/
|
||
printf(">>>>name:%s ch:%d %s\n", name, ch, event ? ("MUTE") : ("UNMUTE"));
|
||
}
|
||
|
||
if (ch == ch_total) {
|
||
/*
|
||
*针对所有通道,比如立体声场景,只有ch0和ch1都是mute,all_ch才是mute
|
||
*适用于控制整体
|
||
*/
|
||
printf(">>>>name:%s ch_total %s\n", name, event ? ("MUTE") : ("UNMUTE"));
|
||
}
|
||
}
|
||
|
||
/*
|
||
*获取需要指定得默认配置
|
||
* */
|
||
int get_eff_default_param(int arg)
|
||
{
|
||
int ret = 0;
|
||
|
||
/* struct node_id *nodeid = (struct node_id *)arg; */
|
||
struct _name {
|
||
char name[16];
|
||
};
|
||
struct _name *name = (struct _name *)arg;
|
||
#if TCFG_SPEAKER_EQ_NODE_ENABLE
|
||
if (!strcmp(name->name, "spk_eq")) {
|
||
ret = spk_eq_read_from_vm((void *)arg);
|
||
}
|
||
#endif
|
||
|
||
#if TCFG_PITCH_SPEED_NODE_ENABLE
|
||
if (!strncmp(name->name, "PitchSpeed", strlen("PitchSpeed"))) { //音乐变速变调 默认参数获取
|
||
struct pitch_speed_update_parm *get_parm = (struct pitch_speed_update_parm *)arg;
|
||
get_parm->speedV = 80;
|
||
get_parm->pitchV = effect_default.pitchV;
|
||
ret = 1;
|
||
}
|
||
#endif
|
||
|
||
#if TCFG_EQ_ENABLE
|
||
if (!strncmp(name->name, "MusicEq", strlen("MusicEq"))) { //音乐eq命名默认: MusicEq + 类型,例如蓝牙音乐eq:MusicEqBt
|
||
struct eq_default_parm *get_eq_parm = (struct eq_default_parm *)arg;
|
||
/*
|
||
*默认系数使用eq文件内的哪个配置表
|
||
* */
|
||
char tar_cfg_index = 0;
|
||
get_cur_eq_num(&tar_cfg_index);//获取当前配置项序号
|
||
get_eq_parm->cfg_index = tar_cfg_index;
|
||
|
||
/*
|
||
*是否使用sdk内的默认系数表
|
||
* */
|
||
get_eq_parm->default_tab.seg_num = get_cur_eq_tab(&get_eq_parm->default_tab.global_gain, &get_eq_parm->default_tab.seg);
|
||
ret = 1;
|
||
}
|
||
#endif
|
||
|
||
#if TCFG_ENERGY_DETECT_NODE_ENABLE
|
||
if (!strncmp(name->name, "EnergyDet", strlen("EnergyDet"))) {//能量检查 回调接口配置
|
||
struct energy_detect_get_parm *get_parm = (struct energy_detect_get_parm *)arg;
|
||
if (get_parm->type == SET_ENERGY_DET_EVENT_HANDLER) {
|
||
get_parm->event_handler = audio_energy_det_handler;
|
||
ret = 1;
|
||
}
|
||
}
|
||
#endif
|
||
|
||
#if TCFG_WDRC_NODE_ENABLE
|
||
if (!strncmp(name->name, "MusicDrc", strlen("MusicDrc"))) {
|
||
struct eff_default_parm *get_parm = (struct eff_default_parm *)arg;
|
||
get_parm->cfg_index = 0;//目标配置项
|
||
ret = 1;
|
||
}
|
||
#endif
|
||
|
||
#if TCFG_BASS_TREBLE_NODE_ENABLE
|
||
if (!strncmp(name->name, "MusicBassTre", strlen("MusicBassTre")) || (!effect_strcmp(name->name, "BassMedia"))) {
|
||
ret = get_music_bass_treble_parm(arg);
|
||
}
|
||
#endif
|
||
|
||
#if TCFG_BASS_TREBLE_NODE_ENABLE
|
||
if (!strncmp(name->name, "MicBassTre", strlen("MicBassTre")) || (!effect_strcmp(name->name, "BassTreEff"))) {
|
||
ret = get_mic_bass_treble_parm(arg);
|
||
}
|
||
#endif
|
||
|
||
#if TCFG_SURROUND_NODE_ENABLE
|
||
if (!effect_strcmp(name->name, "SurMedia")) {
|
||
struct eff_default_parm *get_parm = (struct eff_default_parm *)arg;
|
||
get_parm->cfg_index = 0;
|
||
get_parm->mode_index = get_current_scene();
|
||
ret = 1;
|
||
}
|
||
#endif
|
||
|
||
#if TCFG_CROSSOVER_NODE_ENABLE
|
||
if (!effect_strcmp(name->name, "CrossMedia")) {
|
||
struct eff_default_parm *get_parm = (struct eff_default_parm *)arg;
|
||
get_parm->cfg_index = 0;
|
||
get_parm->mode_index = get_current_scene();
|
||
ret = 1;
|
||
}
|
||
#endif
|
||
|
||
#if (TCFG_3BAND_MERGE_ENABLE || TCFG_2BAND_MERGE_ENABLE)
|
||
if (!effect_strcmp(name->name, "BandMedia")) {
|
||
struct eff_default_parm *get_parm = (struct eff_default_parm *)arg;
|
||
get_parm->cfg_index = 0;
|
||
get_parm->mode_index = get_current_scene();
|
||
ret = 1;
|
||
}
|
||
#endif
|
||
|
||
#if TCFG_BASS_TREBLE_NODE_ENABLE
|
||
if (!effect_strcmp(name->name, "BassMedia")) {
|
||
struct bass_treble_default_parm *get_bass_parm = (struct bass_treble_default_parm *)arg;
|
||
get_bass_parm->cfg_index = 0;
|
||
get_bass_parm->mode_index = get_current_scene();
|
||
ret = 1;
|
||
}
|
||
#endif
|
||
|
||
#if TCFG_STEROMIX_NODE_ENABLE
|
||
if (!effect_strcmp(name->name, "Smix*Media")) {
|
||
struct eff_default_parm *get_parm = (struct eff_default_parm *)arg;
|
||
get_parm->cfg_index = 0;
|
||
get_parm->mode_index = get_current_scene();
|
||
ret = 1;
|
||
}
|
||
#endif
|
||
|
||
#if TCFG_WDRC_NODE_ENABLE
|
||
if (!effect_strcmp(name->name, "Drc*Media")) {
|
||
struct eff_default_parm *get_parm = (struct eff_default_parm *)arg;
|
||
get_parm->cfg_index = 0;
|
||
get_parm->mode_index = get_current_scene();
|
||
ret = 1;
|
||
}
|
||
#endif
|
||
|
||
#if TCFG_EQ_ENABLE
|
||
if (!effect_strcmp(name->name, "Eq*Media")) {
|
||
struct eq_default_parm *get_eq_parm = (struct eq_default_parm *)arg;
|
||
if (!effect_strcmp(name->name, "Eq0Media")) {
|
||
get_eq_parm->cfg_index = get_music_eq_preset_index();
|
||
} else {
|
||
get_eq_parm->cfg_index = 0;
|
||
}
|
||
get_eq_parm->mode_index = get_current_scene();
|
||
ret = 1;
|
||
}
|
||
#endif
|
||
|
||
#if TCFG_VOCAL_REMOVER_NODE_ENABLE
|
||
if (!effect_strcmp(name->name, "VocalRemovMedia")) {
|
||
}
|
||
#endif
|
||
|
||
#if TCFG_EQ_ENABLE
|
||
if (!effect_strcmp(name->name, "EscoDlEq") || !effect_strcmp(name->name, "EscoUlEq")) {
|
||
struct eq_default_parm *get_eq_parm = (struct eq_default_parm *)arg;
|
||
int type = lmp_private_get_esco_packet_type();
|
||
int media_type = type & 0xff;
|
||
if (media_type == 0) {//narrow band
|
||
get_eq_parm->cfg_index = 1;
|
||
} else {//wide band
|
||
get_eq_parm->cfg_index = 0;
|
||
}
|
||
ret = 1;
|
||
}
|
||
#endif
|
||
|
||
|
||
return ret;
|
||
}
|
||
|
||
static u32 effect_strcmp(const char *str1, const char *str2)
|
||
{
|
||
return ASCII_StrCmp(str1, str2, strlen(str1) + 1);
|
||
}
|