#include "tone_player.h" #include "system/includes.h" #include "tone_player_api.h" #include "app_config.h" #if TCFG_AUDIO_ENABLE static const char *const tone_index[] = { TONE_NUM_0, TONE_NUM_1, TONE_NUM_2, TONE_NUM_3, TONE_NUM_4, TONE_NUM_5, TONE_NUM_6, TONE_NUM_7, TONE_NUM_8, TONE_NUM_9, TONE_BT_MODE, TONE_BT_CONN, TONE_BT_DISCONN, TONE_TWS_CONN, TONE_TWS_DISCONN, TONE_LOW_POWER, TONE_POWER_OFF, TONE_POWER_ON, TONE_RING, TONE_MAX_VOL, TONE_NORMAL, }; /* * 参数配置: * freq : 实际频率 * 512 * points : 正弦波点数 * win : 正弦窗 * decay : 衰减系数(百分比), 正弦窗模式下为频率设置:频率*512 * */ static const struct sin_param sine_16k_normal[] __BANK_TONE = { /*{0, 1000, 0, 100},*/ {1000 << 9, 4000, 0, 100}, }; static const struct sin_param sine_low_latency_in[] __BANK_TONE = { /*{0, 1000, 0, 100},*/ {400 << 9, 4000, 0, 100}, }; static const struct sin_param sine_low_latency_out[] __BANK_TONE = { /*{0, 1000, 0, 100},*/ {600 << 9, 8000, 0, 100}, }; static const struct sin_param sine_tws_disconnect_16k[] __BANK_TONE = { /* {390 << 9, 4026, SINE_TOTAL_VOLUME / 4026}, {262 << 9, 8000, SINE_TOTAL_VOLUME / 8000}, */ {262 << 9, 4026, 0, 100}, {390 << 9, 8000, 0, 100}, }; static const struct sin_param sine_tws_connect_16k[] __BANK_TONE = { /* {262 << 9, 4026, SINE_TOTAL_VOLUME / 4026}, {390 << 9, 8000, SINE_TOTAL_VOLUME / 8000}, */ {262.298 * 512, 8358, 0, 100}, }; static const struct sin_param sine_low_power[] __BANK_TONE = { {424 << 9, 3613, 0, 100}, {319 << 9, 3623, 0, 100}, }; static const struct sin_param sine_ring[] __BANK_TONE = { {450 << 9, 24960, 1, 16.667 * 512}, {0, 16000, 0, 100}, }; static const struct sin_param sine_tws_max_volume[] __BANK_TONE = { {210 << 9, 2539, 0, 100}, {260 << 9, 7619, 0, 100}, {400 << 9, 2539, 0, 100}, }; __BANK_TONE_ENTRY static const struct sin_param *get_sine_param_by_index(u8 index, u8 *num) { const struct sin_param *param_data; switch (index) { case SINE_WTONE_NORAML: param_data = sine_16k_normal; *num = ARRAY_SIZE(sine_16k_normal); break; case SINE_WTONE_TWS_CONNECT: param_data = sine_tws_connect_16k; *num = ARRAY_SIZE(sine_tws_connect_16k); break; case SINE_WTONE_TWS_DISCONNECT: param_data = sine_tws_disconnect_16k; *num = ARRAY_SIZE(sine_tws_disconnect_16k); break; case SINE_WTONE_LOW_POWER: param_data = sine_low_power; *num = ARRAY_SIZE(sine_low_power); break; case SINE_WTONE_RING: param_data = sine_ring; *num = ARRAY_SIZE(sine_ring); break; case SINE_WTONE_MAX_VOLUME: param_data = sine_tws_max_volume; *num = ARRAY_SIZE(sine_tws_max_volume); break; case SINE_WTONE_LOW_LATENRY_IN: param_data = sine_low_latency_in; *num = ARRAY_SIZE(sine_low_latency_in); break; case SINE_WTONE_LOW_LATENRY_OUT: param_data = sine_low_latency_out; *num = ARRAY_SIZE(sine_low_latency_out); break; default: return NULL; } return param_data; } /* *index:提示音索引 *preemption:抢断标志 */ __BANK_TONE_ENTRY int tone_play_index(u8 index, u8 preemption) { printf("tone_play_index:%d,preemption:%d", index, preemption); if (index >= IDEX_TONE_NONE) { return 0; } return tone_play(tone_index[index], preemption); } /* *@brief:提示音比较,确认目标提示音和正在播放的提示音是否一致 *@return: 0 匹配 * 非0 不匹配或者当前没有提示音播放 *@note:通过提示音索引比较 */ int tone_name_cmp_by_index(u8 index) { if (index >= IDEX_TONE_NONE) { return 0; } return tone_name_compare(tone_index[index]); } __BANK_TONE_ENTRY int tone_play_index_no_tws(u8 index, u8 preemption) { printf("tone_play_index no tws:%d,preemption:%d", index, preemption); if (index >= IDEX_TONE_NONE) { return 0; } return tone_play_no_tws(tone_index[index], preemption); } /* __BANK_TONE_ENTRY */ int tone_play_index_with_callback(u8 index, u8 preemption, void (*user_evt_handler)(void *priv), void *priv) { printf("tone_play_index:%d,preemption:%d", index, preemption); if (index >= IDEX_TONE_NONE) { return 0; } return tone_play_with_callback(tone_index[index], preemption, user_evt_handler, priv); } __BANK_INIT_ENTRY int tone_table_init() { tone_play_set_sine_param_handler(get_sine_param_by_index); return 0; } __initcall(tone_table_init); #endif