KT24-1110_65E-HA-651B/apps/soundbox/soundcard/notice.c

136 lines
4.4 KiB
C
Raw Permalink Normal View History

2024-11-10 10:44:17 +00:00
#include "soundcard/notice.h"
#include "tone_player.h"
#include "audio_dec.h"
#if SOUNDCARD_ENABLE
static const char *electric_notice_tab[] = {
SDFILE_RES_ROOT_PATH"tone/AA.*",
SDFILE_RES_ROOT_PATH"tone/SA.*",
SDFILE_RES_ROOT_PATH"tone/BB.*",
//SDFILE_RES_ROOT_PATH"tone/SB.*",
SDFILE_RES_ROOT_PATH"tone/CC.*",
SDFILE_RES_ROOT_PATH"tone/SC.*",
SDFILE_RES_ROOT_PATH"tone/DD.*",
SDFILE_RES_ROOT_PATH"tone/SD.*",
SDFILE_RES_ROOT_PATH"tone/EE.*",
//SDFILE_RES_ROOT_PATH"tone/SE.*",
SDFILE_RES_ROOT_PATH"tone/FF.*",
SDFILE_RES_ROOT_PATH"tone/SF.*",
SDFILE_RES_ROOT_PATH"tone/GG.*",
SDFILE_RES_ROOT_PATH"tone/SG.*",
};
static const char *noise_tab[] = {
SDFILE_RES_ROOT_PATH"tone/huan_hu.*",
SDFILE_RES_ROOT_PATH"tone/gan_ga.*",
SDFILE_RES_ROOT_PATH"tone/qiang.*",
SDFILE_RES_ROOT_PATH"tone/bi_shi.*",
SDFILE_RES_ROOT_PATH"tone/kaichang.*",
SDFILE_RES_ROOT_PATH"tone/FeiWen.*",
SDFILE_RES_ROOT_PATH"tone/xiao.*",
SDFILE_RES_ROOT_PATH"tone/zhangshen.*",
SDFILE_RES_ROOT_PATH"tone/QiuFenXiang.*",
SDFILE_RES_ROOT_PATH"tone/memeda.*",
SDFILE_RES_ROOT_PATH"tone/zeilala.*",
SDFILE_RES_ROOT_PATH"tone/feicheng.*",
};
struct tone_dec_handle *tone_hdl = NULL;
struct audio_stream_entry *tone_vol_entry = NULL;
static u8 soundcard_notice_mic_out_en = 1;
static void soundcard_notice_play_stream_resume(void *p)
{
struct audio_dec_app_hdl *app_dec = p;
audio_decoder_resume(&app_dec->decoder);
}
static void soundcard_notice_end(void *priv, int data)
{
printf("soundcard_notice_end\n");
}
void soundcard_notice_play_stream_handler(void *priv, int event, struct audio_dec_app_hdl *app_dec)
{
u8 entry_cnt = 0;
switch (event) {
case AUDIO_DEC_APP_EVENT_START_INIT_OK:
entry_cnt = 0;
if (soundcard_notice_mic_out_en) {
audio_mixer_ch_set_aud_ch_out(&app_dec->mix_ch, 0, BIT(0) | BIT(2) | BIT(3));
audio_mixer_ch_set_aud_ch_out(&app_dec->mix_ch, 1, BIT(1) | BIT(2) | BIT(3));
} else {
audio_mixer_ch_set_aud_ch_out(&app_dec->mix_ch, 0, BIT(0));
audio_mixer_ch_set_aud_ch_out(&app_dec->mix_ch, 1, BIT(1));
}
tone_vol_entry = sys_digvol_group_ch_open("tone_tone", -1, NULL);
struct audio_stream_entry *entries[8] = {NULL};
entries[entry_cnt++] = &app_dec->decoder.entry;
#if SYS_DIGVOL_GROUP_EN
entries[entry_cnt++] = tone_vol_entry;
#endif
entries[entry_cnt++] = &app_dec->mix_ch.entry;
app_dec->stream = audio_stream_open(app_dec, soundcard_notice_play_stream_resume);
audio_stream_add_list(app_dec->stream, entries, entry_cnt);
break;
case AUDIO_DEC_APP_EVENT_DEC_CLOSE:
#if SYS_DIGVOL_GROUP_EN
if (tone_vol_entry) {
audio_stream_del_entry(tone_vol_entry);
sys_digvol_group_ch_close("tone_tone");
}
#endif
break;
}
}
int soundcard_notice_play_by_path(char *name, u8 preemption, void (*evt_handler)(void *priv, int flag), void *evt_priv)
{
static char *single_file[2] = {NULL};
single_file[0] = name;
single_file[1] = NULL;
tone_dec_stop(&tone_hdl, 1, TONE_DEC_STOP_BY_OTHER_PLAY);
tone_hdl = tone_dec_create();
if (tone_hdl == NULL) {
return -1;
}
struct tone_dec_list_handle *dec_list = tone_dec_list_create(tone_hdl,
(const char **) single_file,
preemption,
evt_handler,
NULL,
soundcard_notice_play_stream_handler,
NULL);
return tone_dec_list_add_play(tone_hdl, dec_list);
}
void soundcard_make_notice_electric(u8 mode)
{
if (mode >= (sizeof(electric_notice_tab) / sizeof(electric_notice_tab[0]))) {
return ;
}
soundcard_notice_mic_out_en = 0;
soundcard_notice_play_by_path(electric_notice_tab[mode], 0, soundcard_notice_end, 0);
/* tone_play_with_callback_by_name(electric_notice_tab[mode], 0, NULL, NULL); */
}
void soundcard_make_some_noise(u8 id)
{
if (id >= (sizeof(noise_tab) / sizeof(noise_tab[0]))) {
return ;
}
soundcard_notice_mic_out_en = 1;
soundcard_notice_play_by_path(noise_tab[id], 0, soundcard_notice_end, 0);
/* tone_play_with_callback_by_name(noise_tab[id], 0, NULL, NULL); */
}
#endif//SOUNDCARD_ENABLE