#include "PrjCfg.h" #if (VOICE_MODE == ENABLE) #include "ImageApp/ImageApp_Voice.h" #include "NamingRule/NameRule_Custom.h" #include "GxTime.h" #include "UIWnd/UIFlow.h" #include "kwrap/debug.h" #define FILE_SN_MAX 999999 UINT32 g_IAVoiceFileSerialNum = 0; IAVOICE_AUDIO_INFO UIVoice_Audio_Info = { .aud_rate = HD_AUDIO_SR_32000, .aud_ch = _IAVOICE_CFG_AUDIO_CH_RIGHT, .aud_ch_num = 1, }; static void VoiceExe_FileNamingCB(UINT32 id, char *pFileName) { static struct tm CurDateTime = {0}; g_IAVoiceFileSerialNum ++; if (g_IAVoiceFileSerialNum > FILE_SN_MAX) { g_IAVoiceFileSerialNum = FILE_SN_MAX; Ux_PostEvent(NVTEVT_CB_MOVIE_FULL, 0); } GxTime_GetTime(&CurDateTime); snprintf(pFileName, NMC_TOTALFILEPATH_MAX_LEN, "A:\\%04d%02d%02d%02d%02d%02d_%06d.wav", CurDateTime.tm_year, CurDateTime.tm_mon, CurDateTime.tm_mday, CurDateTime.tm_hour, CurDateTime.tm_min, CurDateTime.tm_sec, g_IAVoiceFileSerialNum); } static void VoiceExe_UserEventCb(UINT32 id, IAVOICE_USER_CB_EVENT event_id, UINT32 value) { switch ((UINT32)event_id) { case IAVOICE_USER_CB_EVENT_FILENAMING_CB: { CHAR *pFileName = (CHAR *) value; // Make custome file name VoiceExe_FileNamingCB(id, pFileName); break; } case IAVOICE_USER_CB_EVENT_APLAY_DONE: { Ux_PostEvent(NVTEVT_VOICE_PLAYSTOP, 0); break; } } } INT32 VoiceExe_OnOpen(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray) { // update aout drv cfg extern HD_PATH_ID gxsound_ctrl_id; HD_AUDIOOUT_DRV_CONFIG audio_driver_cfg = {0}; hd_audioout_get(gxsound_ctrl_id, HD_AUDIOOUT_PARAM_DRV_CONFIG, &audio_driver_cfg); UIVoice_Audio_Info.aud_out_mono = audio_driver_cfg.mono; UIVoice_Audio_Info.adu_out_type = audio_driver_cfg.output; // Set audio config ImageApp_Voice_Config(IAVOICE_CONFIG_AUDIO_INFO, (UINT32)&UIVoice_Audio_Info); // Set user callback ImageApp_Voice_RegUserCB(VoiceExe_UserEventCb); // Open ImageApp ImageApp_Voice_Open(); return NVTEVT_CONSUME; } INT32 VoiceExe_OnClose(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray) { ImageApp_Voice_Close(); return NVTEVT_CONSUME; } INT32 VoiceExe_OnRecStart(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray) { return NVTEVT_CONSUME; } INT32 VoiceExe_OnRecStop(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray) { return NVTEVT_CONSUME; } INT32 VoiceExe_OnPlay(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray) { IAVOICE_AUDIO_PLAY_INFO play_info = {0}; if (paramNum > 0) { memcpy((VOID *)&play_info, (VOID *)paramArray[0], sizeof(IAVOICE_AUDIO_PLAY_INFO)); } else { DBG_ERR("File handle is not assigned\r\n"); return NVTEVT_CONSUME; } ImageApp_Voice_PlayStart(0, &play_info); return NVTEVT_CONSUME; } INT32 VoiceExe_OnPlayStop(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray) { ImageApp_Voice_PlayStop(0); return NVTEVT_CONSUME; } INT32 VoiceExe_OnPlayPause(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray) { ImageApp_Voice_PlayPause(0); return NVTEVT_CONSUME; } INT32 VoiceExe_OnPlayResume(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray) { ImageApp_Voice_PlayResume(0); return NVTEVT_CONSUME; } INT32 VoiceExe_OnPlayVolume(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray) { UINT32 volume; if (paramNum > 0) { volume = paramArray[0]; ImageApp_Voice_SetParam(0, IAVOICE_PARAM_AUD_AOUT_VOL, volume); } return NVTEVT_CONSUME; } EVENT_ENTRY CustomVoiceObjCmdMap[] = { {NVTEVT_EXE_OPEN, VoiceExe_OnOpen }, {NVTEVT_EXE_CLOSE, VoiceExe_OnClose }, {NVTEVT_VOICE_RECORD, VoiceExe_OnRecStart }, {NVTEVT_VOICE_RECORDSTOP, VoiceExe_OnRecStop }, {NVTEVT_VOICE_PLAY, VoiceExe_OnPlay }, {NVTEVT_VOICE_PLAYSTOP, VoiceExe_OnPlayStop }, {NVTEVT_VOICE_PLAYPAUSE, VoiceExe_OnPlayPause }, {NVTEVT_VOICE_PLAYRESUME, VoiceExe_OnPlayResume }, {NVTEVT_VOICE_PLAYVOLUME, VoiceExe_OnPlayVolume }, {NVTEVT_NULL, 0 }, //End of Command Map }; CREATE_APP(CustomVoiceObj,APP_SETUP) #endif // #if (VOICE_MODE == ENABLE)