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

111 lines
3.4 KiB
C

#ifndef SPECTRUM_FFT_API_H
#define SPECTRUM_FFT_API_H
#include "effects/spectrum/SpectrumShow_api.h"
#include "media/audio_stream.h"
typedef struct _spectrumEffect_TOOL_SET {
int mode;
float attackFactor;
float releaseFactor;
} spectrum_effect_param_tool_set;
struct spectrum_parm {
u16 db_num;//频点个数
s16 *db_data;//频点相对的能量值
float *center_freq;//频点相对应的中心截止频率
};
//该模块 mips 消耗5M
//RAM 单声道时:4.4Kbyte
//RAM 双声道时:5.4Kbyte
typedef struct _spectrum_fft_open_parm {
SpectrumShowParam param;
} spectrum_fft_open_parm;
typedef struct _spectrum_fft_hdl {
void *work_buf;
u32 run_en: 1;
s16 *out_buf;
u32 out_buf_size;
u32 offset;
spectrum_fft_open_parm parm;
u8 quad;
u8 update;
} spectrum_fft_hdl;
/*----------------------------------------------------------------------------*/
/**@brief 打开
@param *_parm: 始化参数,详见结构体spectrum_fft_open_parm
@return 句柄
@note
*/
/*----------------------------------------------------------------------------*/
spectrum_fft_hdl *audio_spectrum_fft_open(spectrum_fft_open_parm *parm);
/*----------------------------------------------------------------------------*/
/**@brief audio_spectrum_fft_close 关闭处理
@param _hdl:句柄
@return 0:成功 -1:失败
@note
*/
/*----------------------------------------------------------------------------*/
int audio_spectrum_fft_close(spectrum_fft_hdl *hdl);
/*----------------------------------------------------------------------------*/
/**@brief audio_spectrum_fft_run 同步处理,每次run都会把输入buf消耗完,才会往下走
@param _hdl:句柄
@param data:输入数据
@param len:输入数据长度
@return len
@note 频谱计算处理,只获取输入的数据,不改变输入的数据
*/
/*----------------------------------------------------------------------------*/
int audio_spectrum_fft_run(spectrum_fft_hdl *hdl, s16 *data, int len);
/*----------------------------------------------------------------------------*/
/**@brief audio_spectrum_fft_switch 运行过程做开关处理
@param hdl:句柄
@param en:0 关闭频响运算 1 打开频响运算 (通话模式,不支持频谱计算.通话模式已经使用fft, 需关闭频谱计算)
@return
@note
*/
/*----------------------------------------------------------------------------*/
void audio_spectrum_fft_switch(spectrum_fft_hdl *hdl, u8 en);
/*
* 频谱计算参数更新
*/
void audio_spectrum_update_parm(spectrum_fft_hdl *hdl, spectrum_effect_param_tool_set *parm);
/*----------------------------------------------------------------------------*/
/**@brief audio_spectrum_fft_get_num 获取频谱个数
@param _hdl:句柄
@return 返回频谱的个数
@note
*/
/*----------------------------------------------------------------------------*/
int audio_spectrum_fft_get_num(spectrum_fft_hdl *hdl);
/*----------------------------------------------------------------------------*/
/**@brief audio_spectrum_fft_get_val 获取频谱值
@param _hdl:句柄
@return 返回存储频谱值的地址
@note
*/
/*----------------------------------------------------------------------------*/
short *audio_spectrum_fft_get_val(spectrum_fft_hdl *hdl);
/*
*获取频点对应的中心截止频率
* */
float *audio_spectrum_get_centerfreq(spectrum_fft_hdl *hdl);
#endif