spectrum_fft.h 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #ifndef SPECTRUM_FFT_API_H
  2. #define SPECTRUM_FFT_API_H
  3. #include "media/spectrum/SpectrumShow_api.h"
  4. #include "media/audio_stream.h"
  5. //该模块 mips 消耗5M
  6. //RAM 单声道时:4.4Kbyte
  7. //RAM 双声道时:5.4Kbyte
  8. typedef struct _spectrum_fft_open_parm {
  9. u32 sr; //采样率
  10. u32 channel: 4; //通道数
  11. u32 mode: 4; //模式,双声道起作用,0 计算的是第一声道的频谱值,
  12. //1计算的是第二声道频谱值,2为第一声道与第二声道相加除2的频谱值
  13. float attackFactor;//下降因子[0,1)
  14. float releaseFactor;//上升因子[0,1)
  15. } spectrum_fft_open_parm;
  16. typedef struct _spectrum_fft_hdl {
  17. void *work_buf;
  18. u32 run_en: 1;
  19. s16 *out_buf;
  20. u32 out_buf_size;
  21. u32 offset;
  22. spectrum_fft_open_parm parm;
  23. struct audio_stream_entry entry; // 音频流入口
  24. } spectrum_fft_hdl;
  25. /*----------------------------------------------------------------------------*/
  26. /**@brief 打开
  27. @param *_parm: 始化参数,详见结构体spectrum_fft_open_parm
  28. @return 句柄
  29. @note
  30. */
  31. /*----------------------------------------------------------------------------*/
  32. spectrum_fft_hdl *audio_spectrum_fft_open(spectrum_fft_open_parm *parm);
  33. /*----------------------------------------------------------------------------*/
  34. /**@brief audio_spectrum_fft_close 关闭处理
  35. @param _hdl:句柄
  36. @return 0:成功 -1:失败
  37. @note
  38. */
  39. /*----------------------------------------------------------------------------*/
  40. int audio_spectrum_fft_close(spectrum_fft_hdl *hdl);
  41. /*----------------------------------------------------------------------------*/
  42. /**@brief audio_spectrum_fft_run 同步处理,每次run都会把输入buf消耗完,才会往下走
  43. @param _hdl:句柄
  44. @param data:输入数据
  45. @param len:输入数据长度
  46. @return len
  47. @note 频谱计算处理,只获取输入的数据,不改变输入的数据
  48. */
  49. /*----------------------------------------------------------------------------*/
  50. int audio_spectrum_fft_run(spectrum_fft_hdl *hdl, s16 *data, int len);
  51. /*----------------------------------------------------------------------------*/
  52. /**@brief audio_spectrum_fft_switch 运行过程做开关处理
  53. @param hdl:句柄
  54. @param en:0 关闭频响运算 1 打开频响运算 (通话模式,不支持频谱计算.通话模式已经使用fft, 需关闭频谱计算)
  55. @return
  56. @note
  57. */
  58. /*----------------------------------------------------------------------------*/
  59. void audio_spectrum_fft_switch(spectrum_fft_hdl *hdl, u8 en);
  60. /*----------------------------------------------------------------------------*/
  61. /**@brief audio_spectrum_fft_get_num 获取频谱个数
  62. @param _hdl:句柄
  63. @return 返回频谱的个数
  64. @note
  65. */
  66. /*----------------------------------------------------------------------------*/
  67. int audio_spectrum_fft_get_num(spectrum_fft_hdl *hdl);
  68. /*----------------------------------------------------------------------------*/
  69. /**@brief audio_spectrum_fft_get_val 获取频谱值
  70. @param _hdl:句柄
  71. @return 返回存储频谱值的地址
  72. @note
  73. */
  74. /*----------------------------------------------------------------------------*/
  75. short *audio_spectrum_fft_get_val(spectrum_fft_hdl *hdl);
  76. #endif