karaok.c 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #include "include.h"
  2. #if SYS_KARAOK_EN
  3. //{第一级混响幅度[0, 256], 每级混响衰减系数[0, 256]}
  4. const u16 echo_level_gain_16[16 + 1][2] = {
  5. {0, 0},
  6. {45, 20}, {60, 25}, {65, 30}, {65, 51},
  7. {79, 51}, {79, 72}, {79, 85}, {79, 101},
  8. {85, 131}, {85, 142}, {86, 147}, {88, 160},
  9. {88, 163}, {88, 167}, {95, 171}, {170, 150},
  10. };
  11. //{第一级混响幅度[0, 256], 每级混响衰减系数[0, 256]}
  12. const u16 echo_level_gain_12[12 + 1][2] = {
  13. {0, 0},
  14. {45, 20}, {65, 30}, {65, 51}, {79, 51},
  15. {79, 72}, {79, 85}, {85, 131}, {86, 147},
  16. {88, 160}, {88, 167}, {95, 171}, {170, 150},
  17. };
  18. void plugin_hfp_karaok_configure(void)
  19. {
  20. //android用于通话,iphone用于K歌
  21. #if BT_HFP_CALL_KARAOK_EN
  22. if (bt_is_ios_device()) {
  23. sys_cb.hfp_karaok_en = 1;
  24. } else {
  25. sys_cb.hfp_karaok_en = 0;
  26. }
  27. #endif
  28. }
  29. //用于karaok初始化
  30. void plugin_karaok_init(void)
  31. {
  32. sys_cb.echo_delay = SYS_ECHO_DELAY;
  33. #if !USER_KEY_KNOB_EN //没有旋钮的话就固定一个值
  34. sys_cb.music_vol = 8;//USER_KEY_KNOB_LEVEL - 1;
  35. sys_cb.echo_level = USER_KEY_KNOB_LEVEL - 1;
  36. sys_cb.mic_vol = USER_KEY_KNOB_LEVEL - 1;
  37. #endif
  38. }
  39. #if SYS_MAGIC_VOICE_EN
  40. AT(.rodata.magic)
  41. const u8 magic_table[5][2] = {
  42. {0, 7},
  43. {0, 5},
  44. {0, 2},
  45. {1, 1},
  46. {1, 4},
  47. };
  48. void magic_voice_switch(void)
  49. {
  50. static int magic_sel = 0;
  51. magic_sel++;
  52. if (magic_sel > 4) {
  53. magic_sel = 0;
  54. }
  55. if (!magic_sel){
  56. sys_cb.magic_type = 0;
  57. sys_cb.magic_level = 0;
  58. } else {
  59. sys_cb.magic_type = magic_table[magic_sel - 1][0];
  60. sys_cb.magic_level = magic_table[magic_sel - 1][1];
  61. }
  62. //printf("set mav:%d %d %d\n", magic_sel, sys_cb.magic_type, sys_cb.magic_level);
  63. karaok_set_mav(sys_cb.magic_type, sys_cb.magic_level);
  64. }
  65. #elif SYS_PITCH_SHIFT_EN
  66. AT(.rodata.magic)
  67. const int pitch_tbl[5] = {0, -31000, -10000, 8000, 16000}; //-32768~32767
  68. void magic_voice_switch(void)
  69. {
  70. static int magic_sel = 0;
  71. int freq_shift;
  72. u32 sample_rate = (DACDIGCON0 & BIT(1)) ? 48000 : 44100;
  73. magic_sel++;
  74. if (magic_sel > 5) {
  75. magic_sel = 1;
  76. }
  77. freq_shift = pitch_tbl[magic_sel - 1];
  78. // printf("freq_shift_switch: %d, %d\n",freq_shift, magic_sel);
  79. pitch_shift2_init(sample_rate, freq_shift);
  80. }
  81. #endif
  82. #endif // SYS_KARAOK_EN