2025-02-18 15:40:42 +08:00

109 lines
2.8 KiB
C
Raw Permalink 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 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