KT25-0812_82A-UART/cpu/br25/audio_mic/effect_cfg.h
2025-08-12 18:09:23 +08:00

242 lines
6.5 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef __EFFECT_CFG_H__
#define __EFFECT_CFG_H__
#include "generic/typedef.h"
#include "system/includes.h"
// #include "reverb/reverb_api.h"
#include "audio_mic/mic_stream.h"
// #include "pitchshifter/pitchshifter_api.h"
// #include "asm/noisegate.h"
#include "application/audio_noisegate.h"
// #include "audio_mic/digital_vol.h"
#include "application/audio_eq.h"
#include "application/audio_howling.h"
#include "application/audio_pitch.h"
#include "application/audio_echo_reverb.h"
#include "app_config.h"
#define MODE_SEQ_TO_INDEX(SEQ) (SEQ-0x2000)
#define MODE_INDEX_TO_SEQ(index) (index+0x2000)
#define EFFECT_EQ_SECTION_MAX 5
#ifdef EQ_SECTION_MAX
#if EFFECT_EQ_SECTION_MAX > EQ_SECTION_MAX
#undef EFFECT_EQ_SECTION_MAX
#define EFFECT_EQ_SECTION_MAX EQ_SECTION_MAX
#endif
#endif
typedef struct {
/* unsigned short crc; */
unsigned short id;
unsigned short len;
} EFFECTS_FILE_HEAD;
struct __effect_mode_attr {
u8 num;
u16 *cmd_tab;
char *name;
};
struct __effect_mode_cfg {
u8 debug_en: 1;
u8 revert: 7;
u8 mode_max;
u16 sample_rate;
struct __effect_mode_attr *attr;
const char *file_path;
};
typedef struct {
float global_gain;
int seg_num;
int enable_section;
#if (TCFG_EQ_ENABLE)
struct eq_seg_info seg[EFFECT_EQ_SECTION_MAX];
#endif
} EFFECTS_EQ_PARM_SET;
typedef struct {
int gain;
} EFFECTS_MIC_GAIN_PARM;
typedef struct PITCH_PARM_SET2 {
u32 effect_v;//变声模式:变调/变声0/变声1/变声2/机器音
u32 pitch; //变音时 pitch 对饮shiftv, effectv 填 EFFECT_VOICECHANGE_KIN0
u32 formant_shift;//变音对应formant
} PITCH_PARM_SET2;
typedef struct NOISE_PARM {
int attacktime;// 0 - 15000ms
int releasetime;// 0 - 300ms
int threadhold;// -92 - 0 db 传下时转化为mdb,(thr * 1000)
int gain;// 0 - 1 (传下来时扩大30bit(int)(gain * 1 <<30))
} NOISE_PARM_SET;
// 高音:
typedef struct HIGH_SOUND {
int cutoff_frequency;//:截止频率: 1800
int highest_gain;//最高增益0
int lowest_gain;// 最低增益:-12000
} HIGH_SOUND_PARM_SET;
// 低音:
typedef struct LOW_SOUND {
int cutoff_frequency;//截止频率600
int highest_gain;//最高增益0
int lowest_gain;//最低增益: -12000
} LOW_SOUND_PARM_SET;
// 喊麦滤波器:
typedef struct SHOUT_WHEAT {
int center_frequency;//中心频率: 800
int bandwidth;//带宽: 4000
int occupy;//占比: 100%
} SHOUT_WHEAT_PARM_SET;
typedef struct {
volatile u8 flag: 1;
volatile u8 update: 1;
volatile u8 revert: 6;
REVERBN_PARM_SET val;
} EFFECTS_REVERB;
typedef struct {
volatile u8 flag: 1;
volatile u8 update: 1;
volatile u8 revert: 6;
PITCH_PARM_SET2 val;
} EFFECTS_PARM2;
typedef struct {
volatile u8 flag: 1;
volatile u8 update: 1;
volatile u8 revert: 6;
ECHO_PARM_SET val;
} EFFECTS_ECHO;
typedef struct {
volatile u8 flag: 1;
volatile u8 update: 1;
volatile u8 revert: 6;
NOISE_PARM_SET val;
} EFFECTS_NOISE;
typedef struct {
volatile u8 flag: 1;
volatile u8 update: 1;
volatile u8 revert: 6;
SHOUT_WHEAT_PARM_SET val;
} EFFECTS_SHOUT_WHEAT;
typedef struct {
volatile u8 flag: 1;
volatile u8 update: 1;
volatile u8 revert: 6;
LOW_SOUND_PARM_SET val;
} EFFECTS_LOW_SOUND;
typedef struct {
volatile u8 flag: 1;
volatile u8 update: 1;
volatile u8 revert: 6;
HIGH_SOUND_PARM_SET val;
} EFFECTS_HIGH_SOUND;
typedef struct {
volatile u8 flag: 1;
volatile u8 update: 1;
volatile u8 revert: 6;
EFFECTS_MIC_GAIN_PARM val;
} EFFECTS_MIC_GAIN;
typedef struct {
volatile u8 flag: 1;
volatile u8 update: 1;
volatile u8 revert: 6;
EFFECTS_EQ_PARM_SET val;
} EFFECTS_EQ_PARM;
struct __effect_mode_parm {
EFFECTS_REVERB reverb;
EFFECTS_PARM2 pitch;
EFFECTS_ECHO ehco;
EFFECTS_NOISE noise;
EFFECTS_SHOUT_WHEAT shout_wheat;
EFFECTS_LOW_SOUND low_sound;
EFFECTS_HIGH_SOUND high_sound;
EFFECTS_MIC_GAIN mic_gain;
EFFECTS_EQ_PARM eq;
};
struct __effect_mode {
u32 seg_num;
u32 eq_design_mask;
float global_gain;
struct __effect_mode_parm parm;
};
struct __tool_callback {
void *priv;
int (*cmd_func)(void *priv, u16 mode_index, u16 cmd_index, u8 *data, u32 len, u8 online);
void (*change_mode)(u16 mode);
};
/*effetcs type*/
typedef enum {
EFFECTS_TYPE_FILE = 0x01,
EFFECTS_TYPE_ONLINE,
EFFECTS_TYPE_MODE_TAB,
} EFFECTS_TYPE;
// 0x09 查询是否有密码
// 0x0A 密码是否正确
// 0x0B 查询文件大小
// 0x0C 读取文件内容
/*effects online cmd*/
typedef enum {
EFFECTS_ONLINE_CMD_INQUIRE = 0x4,
EFFECTS_ONLINE_CMD_GETVER = 0x5,
EFFECTS_ONLINE_CMD_PASSWORD = 0x9,
EFFECTS_ONLINE_CMD_VERIFY_PASSWORD = 0xA,
EFFECTS_ONLINE_CMD_FILE_SIZE = 0xB,
EFFECTS_ONLINE_CMD_FILE = 0xC,
EFFECTS_EQ_ONLINE_CMD_GET_SECTION_NUM = 0xD,//工具查询 小机需要的eq段数
EFFECTS_EQ_ONLINE_CMD_CHANGE_MODE = 0xE,//切换变声模式
EFFECTS_ONLINE_CMD_MODE_COUNT = 0x100,//模式个数
EFFECTS_ONLINE_CMD_MODE_NAME = 0x101,//模式的名字
EFFECTS_ONLINE_CMD_MODE_GROUP_COUNT = 0x102,//模式下组的个数,4个字节
EFFECTS_ONLINE_CMD_MODE_GROUP_RANGE = 0x103,//模式下组的id内容
EFFECTS_ONLINE_CMD_EQ_GROUP_COUNT = 0x104,//eq组的id个数
EFFECTS_ONLINE_CMD_EQ_GROUP_RANGE = 0x105,//eq组的id内容
EFFECTS_ONLINE_CMD_MODE_SEQ_NUMBER = 0x106,//mode的编号
EFFECTS_CMD_REVERB = 0x1001,
EFFECTS_CMD_PITCH1 = 0x1002, //无用
EFFECTS_CMD_PITCH2 = 0x1003,
EFFECTS_CMD_ECHO = 0x1004,
EFFECTS_CMD_NOISE = 0x1005,
//高音、低音、喊麦
EFFECTS_CMD_HIGH_SOUND = 0x1006,
EFFECTS_CMD_LOW_SOUND = 0x1007,
EFFECTS_CMD_SHOUT_WHEAT = 0x1008,
//混响eq
EFFECTS_EQ_ONLINE_CMD_PARAMETER_SEG = 0x1009,
EFFECTS_EQ_ONLINE_CMD_PARAMETER_TOTAL_GAIN = 0x100A,//无用
EFFECTS_CMD_MIC_ANALOG_GAIN = 0x100B,
//add xx
EFFECTS_CMD_MAX,
} EQ_ONLINE_CMD;
int mic_eq_get_filter_info(struct audio_eq *eq, int sr, struct audio_eq_filter_info *info);
u16 effect_cfg_get_cur_mode(void);
void effect_cfg_change_mode(u16 mode);
#endif//__EFFECT_CFG_H__