func_aux.c 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. #include "include.h"
  2. #include "func.h"
  3. #include "func_aux.h"
  4. #if FUNC_AUX_EN
  5. func_aux_t f_aux;
  6. ///AUX立体声直通不用能DAC动态降噪,可以使用下面降噪函数
  7. void aux_dnr_init(u16 v_cnt, u16 v_pow, u16 s_cnt, u16 s_pow);
  8. u8 aux_dnr_process(u8 *ptr, u32 len); //返回值 1:voice(需要淡入), 返回2: silence (需要淡出)
  9. AT(.com_text.func.aux)
  10. void aux_sdadc_process(u8 *ptr, u32 samples, int ch_mode)
  11. {
  12. if (f_aux.skip_frame_cnt) {
  13. f_aux.skip_frame_cnt --;
  14. return;
  15. }
  16. #if AUX_SNR_EN
  17. aux_dnr_process(ptr, samples);
  18. #endif // AUX_SNR_EN
  19. sdadc_pcm_2_dac(ptr, samples, ch_mode);
  20. }
  21. AT(.text.bsp.aux)
  22. void func_aux_mp3_res_play(u32 addr, u32 len)
  23. {
  24. if (len == 0) {
  25. return;
  26. }
  27. if (!f_aux.pause) {
  28. func_aux_stop();
  29. mp3_res_play(addr, len);
  30. func_aux_start();
  31. } else {
  32. mp3_res_play(addr, len);
  33. }
  34. }
  35. AT(.text.func.aux)
  36. void func_aux_start(void)
  37. {
  38. f_aux.skip_frame_cnt = 180; //44.1\48khz->180 frames 500ms;其他采样率要调整skip帧数
  39. bsp_aux_start();
  40. }
  41. AT(.text.func.aux)
  42. void func_aux_stop(void)
  43. {
  44. bsp_aux_stop();
  45. }
  46. AT(.text.func.aux)
  47. void func_aux_pause_play(void)
  48. {
  49. if (f_aux.pause) {
  50. led_aux_play();
  51. func_aux_start();
  52. } else {
  53. led_idle();
  54. func_aux_stop();
  55. }
  56. f_aux.pause ^= 1;
  57. }
  58. AT(.text.func.aux)
  59. void func_aux_setvol_callback(u8 dir)
  60. {
  61. if (f_aux.pause) {
  62. func_aux_pause_play();
  63. }
  64. if (sys_cb.vol == 0) {
  65. bsp_aux_mute(0x03);
  66. } else if ((sys_cb.vol == 1) && (dir)) {
  67. bsp_aux_unmute(0x03);
  68. }
  69. }
  70. AT(.text.func.aux)
  71. void func_aux_process(void)
  72. {
  73. func_process();
  74. }
  75. static void func_aux_enter(void)
  76. {
  77. if (!is_linein_enter_enable()) {
  78. func_cb.sta = FUNC_NULL;
  79. return;
  80. }
  81. memset(&f_aux, 0, sizeof(func_aux_t));
  82. func_cb.mp3_res_play = func_aux_mp3_res_play;
  83. func_cb.set_vol_callback = func_aux_setvol_callback;
  84. msg_queue_clear();
  85. #if AUX_SNR_EN
  86. aux_dnr_init(2, 0x200, 60, 0x180);
  87. #endif // AUX_SNR_EN
  88. led_aux_play();
  89. func_aux_enter_display();
  90. #if WARNING_FUNC_AUX
  91. mp3_res_play(RES_BUF_AUX_MODE_MP3, RES_LEN_AUX_MODE_MP3);
  92. #endif // WARNING_FUNC_AUX
  93. #if SYS_KARAOK_EN
  94. dac_fade_out();
  95. bsp_karaok_exit(AUDIO_PATH_KARAOK);
  96. #endif
  97. func_aux_start();
  98. #if SYS_KARAOK_EN
  99. bsp_karaok_init(AUDIO_PATH_KARAOK, FUNC_AUX);
  100. #endif
  101. led_aux_play();
  102. }
  103. static void func_aux_exit(void)
  104. {
  105. func_aux_exit_display();
  106. func_aux_stop();
  107. func_cb.last = FUNC_AUX;
  108. }
  109. AT(.text.func.aux)
  110. void func_aux(void)
  111. {
  112. printf("%s\n", __func__);
  113. func_aux_enter();
  114. while (func_cb.sta == FUNC_AUX) {
  115. func_aux_process();
  116. func_aux_message(msg_dequeue());
  117. func_aux_display();
  118. }
  119. func_aux_exit();
  120. }
  121. #endif //FUNC_AUX_EN