bsp_piano.h 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. #ifndef _BSP_PIANO_H_
  2. #define _BSP_PIANO_H_
  3. // 1/8 4/4 3/4 2/4 1/4 4/4 3/4 2/4
  4. //Rhythm = [ 0.062 0.094 0.125 0.125 0.187 0.250];
  5. // Do Re Mi Fa Sol La Si
  6. //Fin = [261.63 293.67 329.63 349.23 391.99 440 493.88 0 0 0];
  7. #define PIANO_BASEKEYDLY (int)(48000*0.125)
  8. #define TONE_DELAY(x) (int)(48*x)
  9. #define TONE_FREQUENCY(a, b) (u32)((a << 16) | (u16)((1 << 15) / (48000 / b)))
  10. struct tone_tbl_t {
  11. u32 res;
  12. u16 last_time; //持续时间
  13. }__attribute__ ((packed));
  14. ///请勿修改piano_cb_t结构体
  15. typedef struct {
  16. u8 len;
  17. u8 type;
  18. u8 spr;
  19. u8 base_key; //音阶:CDEFGAB
  20. u8 harmen; //泛音
  21. u8 fade_sta;
  22. u8 warning_index;
  23. u8 dnr_sta;
  24. s16 base_delay; //音节持续时间
  25. volatile u16 write_cnt;
  26. const u32 *piano_buf;
  27. const struct tone_tbl_t *tone_buf;
  28. u8 dac_sta;
  29. u8 mix_flag; //是否SRC0 + SRC1叠加播放
  30. volatile u8 play_flag; //是否正在播放
  31. } piano_cb_t;
  32. extern piano_cb_t piano_cb;
  33. enum {
  34. WARNING_PIANO,
  35. WARNING_TONE,
  36. };
  37. ///与piano_index_tbl[]一一对应,注意同步修改
  38. enum {
  39. ///此处请勿新增或修改
  40. T_WARNING_POWER_ON,
  41. T_WARNING_POWER_OFF,
  42. T_WARNING_BT_DISCONNECT,
  43. T_WARNING_BT_CONNECT,
  44. T_WARNING_RIGHT_CH,
  45. T_WARNING_LEFT_CH,
  46. T_WARNING_PAIRING,
  47. T_WARNING_SWITCH_LANG,
  48. T_WARNING_MUSIC_MODE,
  49. T_WARNING_GAME_MODE,
  50. T_WARNING_LOW_BATTERY,
  51. T_WARNING_EAR_IN, //入耳语音
  52. //后半部分无esbc语音
  53. T_WARNING_REDIALING,
  54. T_WARNING_HANGUP,
  55. T_WARNING_REJECT,
  56. T_WARNING_MAX_VOL,
  57. T_WARNING_MIN_VOL,
  58. T_WARNING_BT_RING,
  59. T_WARNING_CAMERA_ON,
  60. T_WARNING_CAMERA_OFF,
  61. T_WARNING_BT_MODE,
  62. T_WARNING_CAMERA_MODE,
  63. T_WARNING_AUX_MODE,
  64. T_WARNING_TAKE_PHOTO,
  65. T_WARNING_NEXT_TRACK,
  66. T_WARNING_BT_WAIT4CONN,
  67. //语音播号
  68. T_WARNING_NUM_0,
  69. T_WARNING_NUM_1,
  70. T_WARNING_NUM_2,
  71. T_WARNING_NUM_3,
  72. T_WARNING_NUM_4,
  73. T_WARNING_NUM_5,
  74. T_WARNING_NUM_6,
  75. T_WARNING_NUM_7,
  76. T_WARNING_NUM_8,
  77. T_WARNING_NUM_9,
  78. T_WARNING_FAST_TEST,
  79. ///新增项放到此处后面
  80. T_WARNING_TEST_WAV,
  81. #if TRY_WARNING_SWITCH
  82. T_WARNING_TOUCH,
  83. T_WARNING_SIRI,
  84. #endif // TRY_WARNING_SWITCH
  85. T_WARNING_ALL,
  86. };
  87. #define MAX_LANG_VOICE_NUM T_WARNING_LOW_BATTERY
  88. #define PIANO_POWER_ON xcfg_cb.v_power_sel
  89. #define PIANO_POWER_OFF xcfg_cb.v_power_sel
  90. #define PIANO_PAIR xcfg_cb.v_pairing_sel
  91. #define PIANO_BT_DISCONNECT xcfg_cb.v_connect_sel
  92. #define PIANO_BT_CONNECT xcfg_cb.v_connect_sel
  93. #define PIANO_LOW_BATTERY xcfg_cb.v_lowbattery_sel
  94. #define PIANO_REDIALING xcfg_cb.v_redialing_sel
  95. #define PIANO_HANGUP xcfg_cb.v_redialing_sel
  96. #define PIANO_REJECT xcfg_cb.v_redialing_sel
  97. #define PIANO_TWS_CH xcfg_cb.v_channel_sel
  98. #define PIANO_MAX_VOL xcfg_cb.v_maxvol_sel
  99. #define PIANO_MIN_VOL xcfg_cb.v_minvol_sel
  100. #define PIANO_BT_RING xcfg_cb.v_ring_sel
  101. #define PIANO_CAMERA_ON xcfg_cb.v_cameraon_sel
  102. #define PIANO_CAMERA_OFF xcfg_cb.v_cameraon_sel
  103. #define PIANO_BT_MODE xcfg_cb.v_btmode_sel
  104. #define PIANO_CAMERA_MODE 0
  105. #define PIANO_AUX_MODE xcfg_cb.v_auxmode_sel
  106. #define PIANO_TAKE_PHOTO xcfg_cb.v_take_photo_sel
  107. #define PIANO_SWITCH_LANG xcfg_cb.v_lang_switch_sel
  108. #define PIANO_GAME_MODE xcfg_cb.v_game_mode_sel
  109. void sys_warning_play(uint index, uint type); //type: 0->无提示音, 1->piano, 2->语音
  110. bool sys_warning_play_do(uint index, uint type, u32 tws_sync);
  111. void piano_warning_play(uint index, uint tone_index, u32 tws_sync);
  112. u8 get_piano_tone_sta(void);
  113. void piano_var_init(void);
  114. bool tone_is_playing(void);
  115. void tone_play_start(void);
  116. void tone_play_kick(void);
  117. void tone_play_end(void);
  118. bool bt_ring_tone_play(u32 tws_sync);
  119. bool bt_ring_tone_stop(u32 force);
  120. bool warning_is_playing(void);
  121. u8 warning_volume_get(u32 sys_vol, u8 index);
  122. #endif