123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- #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
|