9.18. 音频FFT频谱显示
概述
提供音频FFT频谱显示的使用流程
9.18.1. 使用流程
1.打开解码服务后,在调用cmd
AUDIO_DEC_OPEN
时候传递参数(解码服务打开流程详情查看音频解码
章节)
/*中间省略其他参数*/
req.dec.cmd = AUDIO_DEC_OPEN;
req.dec.effect = AUDIO_EFFECT_SPECTRUM_FFT;
err = server_request(__this->dec_server, AUDIO_REQ_DEC, &req);
获取音效处理句柄,调用cmd
AUDIO_DEC_GET_EFFECT_HANDLE
,返回的req.dec.get_hdl
就是音效处理句柄,可用一个全局变量暂时缓存起来供后续使用
req.dec.cmd = AUDIO_DEC_GET_EFFECT_HANDLE;
req.dec.effect = AUDIO_EFFECT_SPECTRUM_FFT;
err = server_request(__this->dec_server, AUDIO_REQ_DEC, &req);
获取频谱个数
audio_spectrum_fft_get_num(req.dec.get_hdl);
获取频谱值
short *db_data = audio_spectrum_fft_get_val(req.dec.get_hdl);//获取存储频谱值的地址
if (db_data) {
for (int i = 0; i < audio_spectrum_fft_get_num(req.dec.get_hdl); i++) {
//输出db_num个 db值
/* printf("db_data db[%d] %d\n", i, db_data[i]); */
}
}
Note
获取音效处理句柄后,如果是异步调用api获取频谱值,要避免在调用AUDIO_DEC_STOP停止解码释放句柄后还继续访问,否则会出现内存越界访问的情况,请用户自行做好互斥处理
需要打开宏
CONFIG_SPECTRUM_FFT_EFFECT_ENABLE
,外部库依赖lib_spectrum_show.a和硬件FFT模块
9.18.2. API参考
Functions
-
void *audio_spectrum_fft_open(void *priv, void *parm)
打开频谱运算
- Parameters
priv – 私有指针
parm – 始化参数,详见结构体spectrum_fft_open_parm
- Returns
句柄
-
int audio_spectrum_fft_close(void *priv)
关闭频谱计算处理
- Parameters
priv – 句柄
- Returns
0:成功 -1:失败
-
int audio_spectrum_fft_run(void *priv, short *data, int len, int sample_rate)
频谱计算同步处理,每次run都会把输入buf消耗完,才会往下走
Note
频谱计算处理,只获取输入的数据,不改变输入的数据
- Parameters
priv – 句柄
data – 输入数据
len – 输入数据长度
sample_rate – 采样率
- Returns
len
-
void audio_spectrum_fft_switch(void *priv, unsigned char en)
频谱计算运行过程做开关处理
- Parameters
priv – 句柄
en – 0 关闭频响运算 1 打开频响运算
-
int audio_spectrum_fft_get_num(void *priv)
获取频谱个数
- Parameters
priv – 句柄
- Returns
返回频谱的个数
-
short *audio_spectrum_fft_get_val(void *priv)
获取频谱值
- Parameters
priv – 句柄
- Returns
返回存储频谱值的地址
-
struct spectrum_fft_open_parm
- #include <spectrum_fft.h>
频谱运算参数结构体