109 lines
2.8 KiB
C
109 lines
2.8 KiB
C
#ifndef SPECTRUM_API_H
|
||
#define SPECTRUM_API_H
|
||
|
||
#include "media/spectrum/coeff_calculate_api.h"
|
||
#include "media/spectrum/rms_api.h"
|
||
#include "application/audio_eq.h"
|
||
#include "media/audio_stream.h"
|
||
|
||
|
||
typedef struct _spectrum_open_parm {
|
||
u32 sr;
|
||
u32 channel: 4;
|
||
u32 section: 6;
|
||
|
||
u32 rms_en: 1;
|
||
u32 time_ms: 4;
|
||
u32 d_time: 16; //50ms~500ms
|
||
float alpha;//(0~1)
|
||
float attackFactor;
|
||
float releaseFactor;
|
||
|
||
int *freq_center;
|
||
int *quality_factor;
|
||
|
||
void *priv;
|
||
int (*output)(void *priv, float *db, u32 len);//user define
|
||
} spectrum_open_parm;
|
||
|
||
|
||
typedef struct _spectrum_hdl {
|
||
void *rms_hdl;//算db值
|
||
int *coeff; //存放系数的地址
|
||
struct audio_eq *eq[10];
|
||
u32 data_len;
|
||
s16 *data;//输出数据地址
|
||
|
||
spectrum_open_parm parm;
|
||
struct audio_stream_entry entry; // 音频流入口
|
||
} spectrum_hdl;
|
||
|
||
|
||
spectrum_hdl *audio_spectrum_open(spectrum_open_parm *parm);
|
||
int audio_spectrum_close(spectrum_hdl *hdl);
|
||
#if 0
|
||
//例子
|
||
|
||
|
||
/*----------------------------------------------------------------------------*/
|
||
/**@brief 频响输出回调
|
||
@param data:db值存放的首地址,连续存放 len 个 float型的db值
|
||
@return len
|
||
@note
|
||
*/
|
||
/*----------------------------------------------------------------------------*/
|
||
int spectrum_output(void *priv, float *data, u32 len)
|
||
{
|
||
u8 db_num = len;
|
||
float *tar_data = data;
|
||
for (int i = 0; i < db_num; i++) {
|
||
//输出10个 浮点db值
|
||
/* printf("tar_data db 0x%x\n", *(int *)&tar_data[i]); */
|
||
//printf("tar_data db %d.%d\n", (int )tar_data[i],(int)((int)(tar_data[i]*100)%100));
|
||
}
|
||
return len;
|
||
}
|
||
|
||
static u32 freq[] = {31, 62, 125, 250, 500, 1000, 2000, 4000, 8000, 16000};
|
||
static u32 quality[] = {
|
||
(int)(0.7f * (1 << 24)), (int)(0.7f * (1 << 24)),
|
||
(int)(0.7f * (1 << 24)), (int)(0.7f * (1 << 24)),
|
||
(int)(0.7f * (1 << 24)), (int)(0.7f * (1 << 24)),
|
||
(int)(0.7f * (1 << 24)), (int)(0.7f * (1 << 24)),
|
||
(int)(0.7f * (1 << 24)), (int)(0.7f * (1 << 24))
|
||
};
|
||
/*----------------------------------------------------------------------------*/
|
||
/**@brief 打开频响统计
|
||
@param sr:采样率
|
||
@return hdl:句柄
|
||
@note
|
||
*/
|
||
/*----------------------------------------------------------------------------*/
|
||
spectrum_hdl *spectrum_open_demo(u32 sr)
|
||
{
|
||
#if TCFG_EQ_ENABLE
|
||
spectrum_hdl *hdl = NULL;
|
||
spectrum_open_parm parm = {0};
|
||
parm.sr = sr;
|
||
parm.channel = 1;
|
||
parm.section = EQ_SECTION_MAX;
|
||
parm.rms_en = 1;
|
||
parm.time_ms = 5;
|
||
parm.attackFactor = 0.9;
|
||
parm.releaseFactor = 0.9;
|
||
parm.freq_center = freq;
|
||
parm.quality_factor = quality;
|
||
parm.d_time = 100;
|
||
parm.alpha = 0.9;
|
||
parm.priv = NULL;
|
||
parm.output = spectrum_output;
|
||
hdl = audio_spectrum_open(&parm);
|
||
return hdl;
|
||
#else
|
||
return NULL;
|
||
#endif
|
||
}
|
||
|
||
#endif
|
||
#endif
|