Files
2025-12-03 11:12:34 +08:00

94 lines
2.7 KiB
C

#ifndef _audio_echo_h__
#define _audio_echo_h__
#include "effects/AudioEffect_DataType.h"
typedef struct _EF_ECHO__PARM_ {
unsigned int delay; //回声的延时时间 0-300ms
unsigned int decayval; // 0-70%
unsigned int filt_enable; //滤波器使能标志
unsigned int lpf_cutoff; //0-20k
unsigned int wetgain; //0-200%
unsigned int drygain; //0-100%
af_DataType dataTypeobj;
} ECHO_PARM_SET;
struct echo_update_parm {
unsigned int delay; //回声的延时时间 0-300ms
unsigned int decayval; // 0-70%
unsigned int filt_enable; //滤波器使能标志
unsigned int lpf_cutoff; //0-20k
unsigned int wetgain; //0-200%
unsigned int drygain; //0-100%
} ;
typedef struct _EF_REVERB_FIX_PARM {
unsigned int sr;
unsigned int max_ms;
} EF_REVERB_FIX_PARM;
/*open 跟 run 都是 成功 返回 RET_OK,错误返回 RET_ERR*/
/*魔音结构体*/
typedef struct __ECHO_FUNC_API_ {
unsigned int (*need_buf)(unsigned int *ptr, ECHO_PARM_SET *echo_parm, EF_REVERB_FIX_PARM *echo_fix_parm);
int (*open)(unsigned int *ptr, ECHO_PARM_SET *echo_parm, EF_REVERB_FIX_PARM *echo_fix_parm);
int (*init)(unsigned int *ptr, ECHO_PARM_SET *echo_parm);
int (*run)(unsigned int *ptr, short *inbuf, short *outdata, int len);
void (*reset_wetdry)(unsigned int *ptr, int wetgain, int drygain); //新增
} ECHO_FUNC_API;
typedef struct __EF_ECHO_TOOL_SET_ {
int is_bypass; // 1-> byass 0 -> no bypass
struct echo_update_parm parm;
u32 wet_bit_wide;
} echo_param_tool_set;
struct audio_echo_parm {
ECHO_PARM_SET echo_parm;
EF_REVERB_FIX_PARM fixparm;
u16 in_channel;
u16 wet_bit_wide;
};
struct audio_echo {
void *workbuf;
ECHO_FUNC_API *ops; //函数指针
struct audio_echo_parm parm;
u8 status;
u8 update;
};
extern ECHO_FUNC_API *get_echo24r16_func_api();
extern ECHO_FUNC_API *get_echo_func_api();
extern ECHO_FUNC_API *get_echo_func_api_mask();
/*
* 打开echo声卡混响模块
*/
struct audio_echo *audio_echo_open(struct audio_echo_parm *parm);
/*
* echo声卡混响处理
*/
int audio_echo_run(struct audio_echo *hdl, short *in, short *out, int len);
/*
* 关闭echo声卡混响模块
*/
void audio_echo_close(struct audio_echo *hdl);
/*
* plate声卡混响参数更新
*/
void audio_echo_update_parm(struct audio_echo *hdl, struct echo_update_parm *parm);
void audio_echo_bypass(struct audio_echo *hdl, u8 bypass);
#endif // reverb_echo_h__