api_karaok.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #ifndef _API_KARAOK_H
  2. #define _API_KARAOK_H
  3. #define FIX_BIT(x) ((int)(x * (1 << 28)))
  4. typedef struct {
  5. u16 res[2];
  6. s16 *buf_1;
  7. s16 *buf_2;
  8. s16 *buf_3;
  9. s16 *buf_4;
  10. s16 *buf_5;
  11. s16 *buf_6;
  12. char *buf_7;
  13. } mav_cfg_t;
  14. typedef struct {
  15. const s32 (* lp_coef)[2][8]; //滤波器参数组
  16. s16 *echo_cache; //混响缓存
  17. s16 *echo_cache1; //混响缓存1
  18. u16 echo_cache_size;
  19. u16 echo_cache_size1;
  20. mav_cfg_t *mav; //魔音配置
  21. u8 res[4];
  22. u32 echo_en :1; //ECHO使能
  23. u32 hifi4_echo_en :1; //HIFI4 ECHO使能
  24. u32 reverb_en :1; //REVERB使能
  25. u32 mic_dnr :1; //MIC降噪使能
  26. u32 rec_en :1; //karaok录音使能
  27. u32 rec_no_echo_en :1; //录音是否不录混响
  28. u32 magic_voice :1; //魔音功能使能
  29. u32 howling_en :1; //是否打开防啸叫功能
  30. u32 hifi_howling_en :1; //是否打开HIFI4防啸叫功能
  31. u32 pitch_shift :1; //是否使用PITCH SHIFT方法实现魔音
  32. u32 bass_treble :1; //是否调MIC的bass/treble
  33. u32 drc_en :1; //是否打开DRC功能
  34. } kara_cfg_t;
  35. extern kara_cfg_t kara_cfg;
  36. void karaok_disable_mic_first(void);
  37. void karaok_set_mic_volume(u16 vol);
  38. void karaok_set_music_volume(u16 vol);
  39. void karaok_init(void *cfg);
  40. void karaok_bufmode(uint mode); //mode=1时使用降采样算法加大混响Buffer
  41. void karaok_var_init(void);
  42. void karaok_exit(void);
  43. void karaok_reset_buf(void *cfg);
  44. void karaok_mic_mute(void);
  45. void karaok_mic_unmute(void);
  46. void karaok_msc_mute(void);
  47. void karaok_msc_unmute(void);
  48. void karaok_process(void);
  49. void echo_set_level(const u16 *vol); //混响等级设置
  50. void echo_set_delay(u16 delay); //混响间隔
  51. void hifi4_pitch_shift2_init(u32 SampleRate, s32 shift, u32 idx);
  52. void hifi4_echo_set_level(void *arg, u32 ch_index);
  53. void hifi4_reverb_set_level(void *arg, u32 ch_index);
  54. void hifi4_bass_treble_set_gain(s8 bass_gain, s8 treble_gain, u32 ch_index); //gain: -12 ~ +12
  55. void hifi4_howling_init(u32 sample_rate, s32 shift_hz, u32 idx); //shift_hz: 移频HZ(例如:-15, -10, -5, 5, 10, 15)
  56. void karaok_voice_rm_enable(void); //开启消人声
  57. void karaok_voice_rm_disable(void); //关闭消人声
  58. void karaok_voice_rm_switch(void); //消人声切换
  59. bool karaok_get_voice_rm_sta(void); //获取消人声状态
  60. void karaok_rec_init(u8 nchannel);
  61. void karaok_rec_start(void);
  62. void karaok_rec_stop(void);
  63. void karaok_set_mav(u8 type, u8 level); //type:0(高音), 1(低音), level[0:7]
  64. void kara_sco_start(void);
  65. void kara_sco_stop(void);
  66. void mic_dnr_init(u8 v_cnt, u16 v_pow, u8 s_cnt, u16 s_pow); //MIC动态降噪 //10ms检测一次 //连续超过 v_cnt 次大于v_pow就认为有声,连续超过s_cnt次低于s_pow就认为无声
  67. void karaok_enable_mic_first(u16 vol); //mic优先使能, 同时设置mic_first时, 音量的音量值(0~65535)
  68. void mic_first_init(u8 v_cnt, u16 v_pow, u8 s_cnt, u16 s_pow); //连续超过 v_cnt 次大于 v_pow 就开启mic_first,连续超过 s_cnt 次低于 s_pow 就关闭 mic_first
  69. u16 get_karaok_mic_maxpow(bool rekick); //karaok中的mic 能量值
  70. void karaok_mic_first_music_vol_fade_enable(u16 fade_in_step, u16 fade_out_step); //ms
  71. #endif