1 /**
2  * @file   extern.h
3  *
4  * <JA>
5  * @brief  �����ؿ����
6  * </JA>
7  *
8  * <EN>
9  * @brief  External function declarations
10  * </EN>
11  *
12  * @author Akinobu LEE
13  * @date   Mon Mar  7 23:19:14 2005
14  *
15  * $Revision: 1.12 $
16  *
17  */
18 /*
19  * Copyright (c) 1991-2007 Kawahara Lab., Kyoto University
20  * Copyright (c) 2000-2005 Shikano Lab., Nara Institute of Science and Technology
21  * Copyright (c) 2005-2007 Julius project team, Nagoya Institute of Technology
22  * All rights reserved
23  */
24 
25 /* should be included after all include files */
26 
27 /* backtrellis.c */
28 void bt_init(BACKTRELLIS *bt);
29 void bt_prepare(BACKTRELLIS *bt);
30 void bt_free(BACKTRELLIS *bt);
31 TRELLIS_ATOM *bt_new(BACKTRELLIS *bt);
32 void bt_store(BACKTRELLIS *bt, TRELLIS_ATOM *aotm);
33 void bt_relocate_rw(BACKTRELLIS *bt);
34 void set_terminal_words(RecogProcess *r);
35 void bt_discount_pescore(WCHMM_INFO *wchmm, BACKTRELLIS *bt, HTK_Param *param);
36 void bt_discount_lm(BACKTRELLIS *bt);
37 void bt_sort_rw(BACKTRELLIS *bt);
38 TRELLIS_ATOM *bt_binsearch_atom(BACKTRELLIS *bt, int time, WORD_ID wkey);
39 
40 /* factoring_sub.c */
41 void make_iwcache_index(WCHMM_INFO *wchmm);
42 void adjust_sc_index(WCHMM_INFO *wchmm);
43 void make_successor_list(WCHMM_INFO *wchmm);
44 void make_successor_list_unigram_factoring(WCHMM_INFO *wchmm);
45 void max_successor_cache_init(WCHMM_INFO *wchmm);
46 void max_successor_cache_free(WCHMM_INFO *wchmm);
47 LOGPROB max_successor_prob(WCHMM_INFO *wchmm, WORD_ID lastword, int node);
48 LOGPROB *max_successor_prob_iw(WCHMM_INFO *wchmm, WORD_ID lastword);
49 void  calc_all_unigram_factoring_values(WCHMM_INFO *wchmm);
50 boolean can_succeed(WCHMM_INFO *wchmm, WORD_ID lastword, int node);
51 
52 /* beam.c */
53 boolean get_back_trellis_init(HTK_Param *param, RecogProcess *r);
54 boolean get_back_trellis_proceed(int t, HTK_Param *param, RecogProcess *r, boolean final_for_multipath);
55 void get_back_trellis_end(HTK_Param *param, RecogProcess *r);
56 void fsbeam_free(FSBeam *d);
57 void finalize_1st_pass(RecogProcess *r, int len);
58 
59 /* pass1.c */
60 #ifdef POWER_REJECT
61 boolean power_reject(Recog *recog);
62 #endif
63 int decode_proceed(Recog *recog);
64 void decode_end_segmented(Recog *recog);
65 void decode_end(Recog *recog);
66 boolean get_back_trellis(Recog *recog);
67 
68 /* spsegment.c */
69 boolean is_sil(WORD_ID w, RecogProcess *r);
70 void mfcc_copy_to_rest_and_shrink(MFCCCalc *mfcc, int start, int end);
71 void mfcc_shrink(MFCCCalc *mfcc, int p);
72 boolean detect_end_of_segment(RecogProcess *r, int time);
73 void finalize_segment(Recog *recog);
74 void spsegment_init(Recog *recog);
75 boolean spsegment_trigger_sync(Recog *recog);
76 boolean spsegment_need_restart(Recog *recog, int *rf_ret, boolean *repro_ret);
77 void spsegment_restart_mfccs(Recog *recog, int rewind_frame, boolean reprocess);
78 
79 
80 /* outprob_style.c */
81 #ifdef PASS1_IWCD
82 void outprob_style_cache_init(WCHMM_INFO *wchmm);
83 CD_Set *lcdset_lookup_with_category(WCHMM_INFO *wchmm, HMM_Logical *hmm, WORD_ID category);
84 void lcdset_register_with_category_all(WCHMM_INFO *wchmm);
85 void lcdset_remove_with_category_all(WCHMM_INFO *wchmm);
86 #endif
87 LOGPROB outprob_style(WCHMM_INFO *wchmm, int node, int last_wid, int t, HTK_Param *param);
88 void error_missing_right_triphone(HMM_Logical *base, char *rc_name);
89 void error_missing_left_triphone(HMM_Logical *base, char *lc_name);
90 
91 /* ngram_decode.c */
92 #include "search.h"
93 int ngram_firstwords(NEXTWORD **nw, int peseqlen, int maxnw, RecogProcess *r);
94 int ngram_nextwords(NODE *hypo, NEXTWORD **nw, int maxnw, RecogProcess *r);
95 boolean ngram_acceptable(NODE *hypo, RecogProcess *r);
96 int dfa_firstwords(NEXTWORD **nw, int peseqlen, int maxnw, RecogProcess *r);
97 int dfa_nextwords(NODE *hypo, NEXTWORD **nw, int maxnw, RecogProcess *r);
98 boolean dfa_acceptable(NODE *hypo, RecogProcess *r);
99 boolean dfa_look_around(NEXTWORD *nword, NODE *hypo, RecogProcess *r);
100 
101 /* search_bestfirst_main.c */
102 void segment_set_last_nword(NODE *hypo, RecogProcess *r);
103 void pass2_finalize_on_no_result(RecogProcess *r, boolean use_1pass_as_final);
104 void wchmm_fbs(HTK_Param *param, RecogProcess *r, int cate_bgn, int cate_num);
105 
106 /* search_bestfirst_v?.c */
107 void clear_stocker(StackDecode *s);
108 void free_node(NODE *node);
109 NODE *cpy_node(NODE *dst, NODE *src);
110 NODE *newnode(RecogProcess *r);
111 void malloc_wordtrellis(RecogProcess *r);
112 void free_wordtrellis(StackDecode *dwrk);
113 void scan_word(NODE *now, HTK_Param *param, RecogProcess *r);
114 void next_word(NODE *now, NODE *newParam, NEXTWORD *nword, HTK_Param *param, RecogProcess *r);
115 void start_word(NODE *newParam, NEXTWORD *nword, HTK_Param *param, RecogProcess *r);
116 void last_next_word(NODE *now, NODE *newParam, HTK_Param *param, RecogProcess *r);
117 
118 /* wav2mfcc.c */
119 boolean wav2mfcc(SP16 speech[], int speechlen, Recog *recog);
120 
121 /* version.c */
122 void j_put_header(FILE *stream);
123 void j_put_version(FILE *stream);
124 void j_put_compile_defs(FILE *stream);
125 void j_put_library_defs(FILE *stream);
126 
127 /* wchmm.c */
128 WCHMM_INFO *wchmm_new();
129 void wchmm_free(WCHMM_INFO *w);
130 void print_wchmm_info(WCHMM_INFO *wchmm);
131 boolean build_wchmm(WCHMM_INFO *wchmm, JCONF_LM *lmconf);
132 boolean build_wchmm2(WCHMM_INFO *wchmm, JCONF_LM *lmconf);
133 
134 /* wchmm_check.c */
135 void wchmm_check_interactive(WCHMM_INFO *wchmm);
136 void check_wchmm(WCHMM_INFO *wchmm);
137 
138 /* realtime.c --- callback for adin_cut() */
139 boolean RealTimeInit(Recog *recog);
140 boolean RealTimePipeLinePrepare(Recog *recog);
141 boolean RealTimeMFCC(MFCCCalc *mfcc, SP16 *window, int windowlen);
142 int RealTimePipeLine(SP16 *Speech, int len, Recog *recog);
143 int RealTimeResume(Recog *recog);
144 boolean RealTimeParam(Recog *recog);
145 void RealTimeCMNUpdate(MFCCCalc *mfcc, Recog *recog);
146 void RealTimeTerminate(Recog *recog);
147 void realbeam_free(Recog *recog);
148 int mfcc_go(Recog *recog, int (*ad_check)(Recog *));
149 
150 /* word_align.c */
151 void word_align(WORD_ID *words, short wnum, HTK_Param *param, SentenceAlign *align, RecogProcess *r);
152 void phoneme_align(WORD_ID *words, short wnum, HTK_Param *param, SentenceAlign *align, RecogProcess *r);
153 void state_align(WORD_ID *words, short wnum, HTK_Param *param, SentenceAlign *align, RecogProcess *r);
154 void word_rev_align(WORD_ID *revwords, short wnum, HTK_Param *param, SentenceAlign *align, RecogProcess *r);
155 void phoneme_rev_align(WORD_ID *revwords, short wnum, HTK_Param *param, SentenceAlign *align, RecogProcess *r);
156 void state_rev_align(WORD_ID *revwords, short wnum, HTK_Param *param, SentenceAlign *align, RecogProcess *r);
157 void do_alignment_all(RecogProcess *r, HTK_Param *param);
158 
159 /* m_usage.c */
160 void opt_terminate();
161 void j_output_argument_help(FILE *fp);
162 /* m_options.c */
163 char *filepath(char *filename, char *dirname);
164 boolean opt_parse(int argc, char *argv[], char *cwd, Jconf *jconf);
165 void opt_release(Jconf *jconf);
166 /* m_jconf.c */
167 void get_dirname(char *path);
168 boolean config_file_parse(char *conffile, Jconf *jconf);
169 /* m_chkparam.c */
170 boolean checkpath(char *filename);
171 boolean j_jconf_finalize(Jconf *jconf);
172 int set_beam_width(WCHMM_INFO *wchmm, int specified);
173 /* m_info.c */
174 void print_jconf_overview(Jconf *jconf);
175 void print_engine_info(Recog *recog);
176 /* m_bootup.c */
177 void system_bootup(Recog *recog);
178 /* m_adin.c */
179 boolean adin_initialize(Recog *recog);
180 /* m_fusion.c */
181 boolean j_load_am(Recog *recog, JCONF_AM *amconf);
182 boolean j_load_lm(Recog *recog, JCONF_LM *lmconf);
183 boolean j_load_all(Recog *recog, Jconf *jconf);
184 boolean j_launch_recognition_instance(Recog *recog, JCONF_SEARCH *sconf);
185 boolean j_final_fusion(Recog *recog);
186 void create_mfcc_calc_instances(Recog *recog);
187 
188 /* hmm_check.c */
189 void hmm_check(RecogProcess *r);
190 
191 /* visual.c */
192 void visual_init(Recog *recog);
193 void visual_show(BACKTRELLIS *bt);
194 void visual2_init(int maxhypo);
195 void visual2_popped(NODE *n, int popctr);
196 void visual2_next_word(NODE *next, NODE *prev, int popctr);
197 void visual2_best(NODE *now, WORD_INFO *winfo);
198 
199 /* gmm.c */
200 boolean gmm_init(Recog *recog);
201 void gmm_prepare(Recog *recog);
202 void gmm_proceed(Recog *recog);
203 void gmm_end(Recog *recog);
204 boolean gmm_valid_input(Recog *recog);
205 void gmm_free(Recog *recog);
206 #ifdef GMM_VAD
207 void gmm_check_trigger(Recog *recog);
208 #endif
209 
210 /* graphout.c */
211 void wordgraph_init(WCHMM_INFO *wchmm);
212 void wordgraph_free(WordGraph *wg);
213 void put_wordgraph(FILE *fp, WordGraph *wg, WORD_INFO *winfo);
214 void wordgraph_dump(FILE *fp, WordGraph *root, WORD_INFO *winfo);
215 WordGraph *wordgraph_assign(WORD_ID wid, WORD_ID wid_left, WORD_ID wid_right, int leftframe, int rightframe, LOGPROB fscore_head, LOGPROB fscore_tail, LOGPROB gscore_head, LOGPROB gscore_tail, LOGPROB lscore, LOGPROB cmscore, RecogProcess *r);
216 boolean wordgraph_check_and_add_rightword(WordGraph *wg, WordGraph *right, LOGPROB lscore);
217 boolean wordgraph_check_and_add_leftword(WordGraph *wg, WordGraph *left, LOGPROB lscore);
218 void wordgraph_save(WordGraph *wg, WordGraph *right, WordGraph **root);
219 WordGraph *wordgraph_check_merge(WordGraph *now, WordGraph **root, WORD_ID next_wid, boolean *merged_p, JCONF_SEARCH *jconf);
220 WordGraph *wordgraph_dup(WordGraph *wg, WordGraph **root);
221 void wordgraph_purge_leaf_nodes(WordGraph **rootp, RecogProcess *r);
222 void wordgraph_depth_cut(WordGraph **rootp, RecogProcess *r);
223 void wordgraph_adjust_boundary(WordGraph **rootp, RecogProcess *r);
224 void wordgraph_clean(WordGraph **rootp);
225 void wordgraph_compaction_thesame(WordGraph **rootp);
226 void wordgraph_compaction_exacttime(WordGraph **rootp, RecogProcess *r);
227 void wordgraph_compaction_neighbor(WordGraph **rootp, RecogProcess *r);
228 int wordgraph_sort_and_annotate_id(WordGraph **rootp, RecogProcess *r);
229 void wordgraph_check_coherence(WordGraph *rootp, RecogProcess *r);
230 void graph_forward_backward(WordGraph *root, RecogProcess *r);
231 
232 /* default.c */
233 void jconf_set_default_values(Jconf *j);
234 void jconf_set_default_values_am(JCONF_AM *j);
235 void jconf_set_default_values_lm(JCONF_LM *j);
236 void jconf_set_default_values_search(JCONF_SEARCH *j);
237 
238 
239 /* multi-gram.c */
240 int multigram_add(DFA_INFO *dfa, WORD_INFO *winfo, char *name, PROCESS_LM *lm);
241 boolean multigram_delete(int gid, PROCESS_LM *lm);
242 void multigram_delete_all(PROCESS_LM *lm);
243 boolean multigram_update(PROCESS_LM *lm);
244 boolean multigram_build(RecogProcess *r);
245 int multigram_activate(int gid, PROCESS_LM *lm);
246 int multigram_deactivate(int gid, PROCESS_LM *lm);
247 boolean multigram_load_all_gramlist(PROCESS_LM *lm);
248 int multigram_get_gram_from_category(int category, PROCESS_LM *lm);
249 int multigram_get_gram_from_wid(WORD_ID wid, PROCESS_LM *lm);
250 int multigram_get_all_num(PROCESS_LM *lm);
251 void multigram_free_all(MULTIGRAM *root);
252 
253 int multigram_get_id_by_name(PROCESS_LM *lm, char *gramname);
254 MULTIGRAM *multigram_get_grammar_by_name(PROCESS_LM *lm, char *gramname);
255 MULTIGRAM *multigram_get_grammar_by_id(PROCESS_LM *lm, unsigned short id);
256 boolean multigram_add_words_to_grammar(PROCESS_LM *lm, MULTIGRAM *m, WORD_INFO *winfo);
257 boolean multigram_add_words_to_grammar_by_name(PROCESS_LM *lm, char *gramname, WORD_INFO *winfo);
258 boolean multigram_add_words_to_grammar_by_id(PROCESS_LM *lm, unsigned short id, WORD_INFO *winfo);
259 
260 
261 /* gramlist.c */
262 void multigram_add_gramlist(char *dfafile, char *dictfile, JCONF_LM *j, int lmvar);
263 void multigram_remove_gramlist(JCONF_LM *j);
264 boolean multigram_add_prefix_list(char *prefix_list, char *cwd, JCONF_LM *j, int lmvar);
265 boolean multigram_add_prefix_filelist(char *listfile, JCONF_LM *j, int lmvar);
266 
267 
268 /* adin-cut.c */
269 boolean adin_setup_param(ADIn *adin, Jconf *jconf);
270 boolean adin_thread_create(Recog *recog);
271 boolean adin_thread_cancel(Recog *recog);
272 int adin_go(int (*ad_process)(SP16 *, int, Recog *), int (*ad_check)(Recog *), Recog *recog);
273 boolean adin_standby(ADIn *a, int freq, void *arg);
274 boolean adin_begin(ADIn *a);
275 boolean adin_end(ADIn *a);
276 void adin_free_param(Recog *recog);
277 
278 /* confnet.c */
279 CN_CLUSTER *confnet_create(WordGraph *root, RecogProcess *r);
280 void graph_make_order(WordGraph *root, RecogProcess *r);
281 void graph_free_order(RecogProcess *r);
282 void cn_free_all(CN_CLUSTER **croot);
283 
284 /* callback.c */
285 void callback_init(Recog *recog);
286 int callback_add(Recog *recog, int code, void (*func)(Recog *recog, void *data), void *data);
287 int callback_add_adin(Recog *recog, int code, void (*func)(Recog *recog, SP16 *buf, int len, void *data), void *data);
288 void callback_exec(int code, Recog *recog);
289 void callback_exec_adin(int code, Recog *recog, SP16 *buf, int len);
290 boolean callback_exist(Recog *recog, int code);
291 boolean callback_delete(Recog *recog, int id);
292 
293 /* recogmain.c */
294 int adin_cut_callback_store_buffer(SP16 *now, int len, Recog *recog);
295 SentenceAlign *result_align_new();
296 void result_align_free(SentenceAlign *a);
297 void result_sentence_malloc(RecogProcess *r, int num);
298 void result_sentence_free(RecogProcess *r);
299 void clear_result(RecogProcess *r);
300 
301 /* plugin.c */
302 int plugin_get_id(char *name);
303 void plugin_init();
304 boolean plugin_load_file(char *file);
305 boolean plugin_load_dir(char *dir);
306 void plugin_load_dirs(char *dirent);
307 int plugin_find_optname(char *optfuncname, char *str);
308 FUNC_VOID plugin_get_func(int sid, char *name);
309 boolean plugin_exec_engine_startup(Recog *recog);
310 void plugin_exec_adin_captured(short *buf, int len);
311 void plugin_exec_adin_triggered(short *buf, int len);
312 void plugin_exec_vector_postprocess(VECT *vecbuf, int veclen, int nframe);
313 void plugin_exec_vector_postprocess_all(HTK_Param *param);
314 void plugin_exec_process_result(Recog *recog);
315 boolean mfc_module_init(MFCCCalc *mfcc, Recog *recog);
316 boolean mfc_module_set_header(MFCCCalc *mfcc, Recog *recog);
317 boolean mfc_module_standby(MFCCCalc *mfcc);
318 boolean mfc_module_begin(MFCCCalc *mfcc);
319 boolean mfc_module_end(MFCCCalc *mfcc);
320 int mfc_module_read(MFCCCalc *mfcc, int *new_t);
321