sumom****@users*****
sumom****@users*****
2009年 3月 18日 (水) 16:05:30 JST
Index: julius4/libjulius/src/jfunc.c diff -u julius4/libjulius/src/jfunc.c:1.5 julius4/libjulius/src/jfunc.c:1.6 --- julius4/libjulius/src/jfunc.c:1.5 Fri Dec 12 16:14:57 2008 +++ julius4/libjulius/src/jfunc.c Wed Mar 18 16:05:30 2009 @@ -19,7 +19,7 @@ * @author Akinobu Lee * @date Wed Aug 8 15:04:28 2007 * - * $Revision: 1.5 $ + * $Revision: 1.6 $ * */ /* @@ -561,28 +561,45 @@ /** * <EN> - * Return current input speech file name. - * Invalid when MFCC input. + * Return current input speech file name. return NULL if the current + * input device does not support this function. * </EN> * <JA> - * 現在の入力ファイル名を返す. - * MFCC入力時は使えない. + * 現在の入力ファイル名を返す.現在の入力デバイスがこの機能をサポート + * していない場合は NULL を返す. * </JA> * - * @return the file name. + * @param recog [in] engine instance + * + * @return the file name, or NULL when this function is not available on + * the current input device. * * @callgraph * @callergraph * @ingroup engine */ char * -j_get_current_filename() +j_get_current_filename(Recog *recog) { -#ifdef HAVE_LIBSNDFILE - return(adin_sndfile_get_current_filename()); -#else - return(adin_file_get_current_filename()); -#endif + char *p; + p = NULL; + if (recog->jconf->input.type == INPUT_WAVEFORM) { + /* adin function input */ + if (recog->adin->ad_input_name != NULL) { + p = recog->adin->ad_input_name(); + } + } else { + switch(recog->jconf->input.speech_input) { + case SP_MFCMODULE: + p = mfc_module_input_name(recog->mfcclist); + break; + case SP_MFCFILE: + /* already assigned */ + p = recog->adin->current_input_name; + break; + } + } + return p; } Index: julius4/libjulius/src/m_adin.c diff -u julius4/libjulius/src/m_adin.c:1.7 julius4/libjulius/src/m_adin.c:1.8 --- julius4/libjulius/src/m_adin.c:1.7 Thu Sep 25 14:00:06 2008 +++ julius4/libjulius/src/m_adin.c Wed Mar 18 16:05:30 2009 @@ -12,7 +12,7 @@ * @author Akinobu LEE * @date Fri Mar 18 16:17:23 2005 * - * $Revision: 1.7 $ + * $Revision: 1.8 $ * */ /* @@ -47,6 +47,7 @@ a->ad_pause = NULL; a->ad_terminate = NULL; a->ad_read = adin_sndfile_read; + a->ad_input_name = adin_sndfile_get_current_filename; a->silence_cut_default = FALSE; a->enable_thread = FALSE; #else /* ~HAVE_LIBSNDFILE */ @@ -58,6 +59,7 @@ a->ad_pause = NULL; a->ad_terminate = NULL; a->ad_read = adin_file_read; + a->ad_input_name = adin_file_get_current_filename; a->silence_cut_default = FALSE; a->enable_thread = FALSE; #endif @@ -76,6 +78,7 @@ a->ad_begin = adin_mic_begin; a->ad_end = adin_mic_end; a->ad_read = adin_mic_read; + a->ad_input_name = adin_mic_input_name; break; #ifdef HAS_ALSA case SP_INPUT_ALSA: @@ -83,6 +86,7 @@ a->ad_begin = adin_alsa_begin; a->ad_end = adin_alsa_end; a->ad_read = adin_alsa_read; + a->ad_input_name = adin_alsa_input_name; break; #endif #ifdef HAS_OSS @@ -91,6 +95,7 @@ a->ad_begin = adin_oss_begin; a->ad_end = adin_oss_end; a->ad_read = adin_oss_read; + a->ad_input_name = adin_oss_input_name; break; #endif #ifdef HAS_ESD @@ -99,6 +104,7 @@ a->ad_begin = adin_esd_begin; a->ad_end = adin_esd_end; a->ad_read = adin_esd_read; + a->ad_input_name = adin_esd_input_name; break; #endif default: @@ -116,6 +122,7 @@ a->ad_pause = NULL; a->ad_terminate = NULL; a->ad_read = adin_netaudio_read; + a->ad_input_name = adin_netaudio_input_name; a->silence_cut_default = TRUE; a->enable_thread = TRUE; break; @@ -129,6 +136,7 @@ a->ad_pause = adin_tcpip_send_pause; a->ad_terminate = adin_tcpip_send_terminate; a->ad_read = adin_tcpip_read; + a->ad_input_name = adin_tcpip_input_name; a->silence_cut_default = FALSE; a->enable_thread = FALSE; break; @@ -141,6 +149,7 @@ a->ad_pause = NULL; a->ad_terminate = NULL; a->ad_read = adin_stdin_read; + a->ad_input_name = adin_stdin_input_name; a->silence_cut_default = FALSE; a->enable_thread = FALSE; break; @@ -260,6 +269,7 @@ adin->ad_pause = (boolean (*)()) plugin_get_func(sid, "adin_pause"); adin->ad_terminate = (boolean (*)()) plugin_get_func(sid, "adin_terminate"); adin->ad_read = (int (*)(SP16 *, int)) plugin_get_func(sid, "adin_read"); + adin->ad_input_name = (char (*)()) plugin_get_func(sid, "adin_input_name"); if (adin->ad_read == NULL) { jlog("ERROR: m_adin: selected plugin has no function adin_read()\n"); return FALSE; Index: julius4/libjulius/src/plugin.c diff -u julius4/libjulius/src/plugin.c:1.1 julius4/libjulius/src/plugin.c:1.2 --- julius4/libjulius/src/plugin.c:1.1 Thu Sep 25 14:00:06 2008 +++ julius4/libjulius/src/plugin.c Wed Mar 18 16:05:30 2009 @@ -12,7 +12,7 @@ * @author Akinobu Lee * @date Sat Aug 2 09:46:09 2008 * - * $Revision: 1.1 $ + * $Revision: 1.2 $ * */ /* @@ -492,6 +492,7 @@ mfcc->func.fv_resume = (boolean (*)()) plugin_get_func(mfcc->plugin_source, "fvin_resume"); mfcc->func.fv_pause = (boolean (*)()) plugin_get_func(mfcc->plugin_source, "fvin_pause"); mfcc->func.fv_terminate= (boolean (*)()) plugin_get_func(mfcc->plugin_source, "fvin_terminate"); + mfcc->func.fv_input_name= (char * (*)()) plugin_get_func(mfcc->plugin_source, "fvin_input_name"); if (mfcc->func.fv_read == NULL) { jlog("ERROR: FEATURE_INPUT plugin: fvin_read() not found!\n"); @@ -602,6 +603,15 @@ return 0; } +char * +mfc_module_input_name(MFCCCalc *mfcc) +{ + int ret; + + if (mfcc->func.fv_input_name) return(mfcc->func.fv_input_name()); + return NULL; +} + #endif /* ENABLE_PLUGIN */ /* end of file */ Index: julius4/libjulius/src/recogmain.c diff -u julius4/libjulius/src/recogmain.c:1.11 julius4/libjulius/src/recogmain.c:1.12 --- julius4/libjulius/src/recogmain.c:1.11 Sat Jan 17 16:53:47 2009 +++ julius4/libjulius/src/recogmain.c Wed Mar 18 16:05:30 2009 @@ -12,7 +12,7 @@ * @author Akinobu Lee * @date Wed Aug 8 14:53:53 2007 * - * $Revision: 1.11 $ + * $Revision: 1.12 $ * */ @@ -493,6 +493,7 @@ j_open_stream(Recog *recog, char *file_or_dev_name) { Jconf *jconf; + char *p; jconf = recog->jconf; @@ -509,11 +510,13 @@ } } #endif + /* when using adin func, input name should be obtained when called */ } else { switch(jconf->input.speech_input) { case SP_MFCMODULE: param_init_content(recog->mfcclist->param); if (mfc_module_begin(recog->mfcclist) == FALSE) return -2; + /* when using mfc module func, input name should be obtained when called */ break; case SP_MFCFILE: /* read parameter file */ @@ -528,12 +531,24 @@ } /* output frame length */ callback_exec(CALLBACK_STATUS_PARAM, recog); + /* store the input filename here */ + strncpy(recog->adin->current_input_name, file_or_dev_name, MAXPATHLEN); break; default: jlog("ERROR: j_open_stream: none of SP_MFC_*??\n"); return -1; } } + + if (jconf->input.speech_input != SP_MFCFILE) { + /* store current input name using input source specific function */ + p = j_get_current_filename(recog); + if (p) { + strncpy(recog->adin->current_input_name, p, MAXPATHLEN); + } else { + recog->adin->current_input_name[0] = '\0'; + } + } return 0;