Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00044 #ifndef __POCKETSPHINX_INTERNAL_H__
00045 #define __POCKETSPHINX_INTERNAL_H__
00046
00047
00048 #include <cmd_ln.h>
00049 #include <logmath.h>
00050 #include <fe.h>
00051 #include <feat.h>
00052 #include <profile.h>
00053
00054
00055 #include "pocketsphinx.h"
00056 #include "acmod.h"
00057 #include "dict.h"
00058 #include "dict2pid.h"
00059
00063 typedef struct ps_search_s ps_search_t;
00064
00068 typedef struct ps_searchfuncs_s {
00069 char const *name;
00070
00071 int (*start)(ps_search_t *search);
00072 int (*step)(ps_search_t *search, int frame_idx);
00073 int (*finish)(ps_search_t *search);
00074 int (*reinit)(ps_search_t *search, dict_t *dict, dict2pid_t *d2p);
00075 void (*free)(ps_search_t *search);
00076
00077 ps_lattice_t *(*lattice)(ps_search_t *search);
00078 char const *(*hyp)(ps_search_t *search, int32 *out_score);
00079 int32 (*prob)(ps_search_t *search);
00080 ps_seg_t *(*seg_iter)(ps_search_t *search, int32 *out_score);
00081 } ps_searchfuncs_t;
00082
00086 struct ps_search_s {
00087 ps_searchfuncs_t *vt;
00088 ps_search_t *pls;
00089 cmd_ln_t *config;
00090 acmod_t *acmod;
00091 dict_t *dict;
00092 dict2pid_t *d2p;
00093 char *hyp_str;
00094 ps_lattice_t *dag;
00095 ps_latlink_t *last_link;
00096 int32 post;
00097 int32 n_words;
00100
00101 int32 start_wid;
00102 int32 silence_wid;
00103 int32 finish_wid;
00104 };
00105
00106 #define ps_search_base(s) ((ps_search_t *)s)
00107 #define ps_search_config(s) ps_search_base(s)->config
00108 #define ps_search_acmod(s) ps_search_base(s)->acmod
00109 #define ps_search_dict(s) ps_search_base(s)->dict
00110 #define ps_search_dict2pid(s) ps_search_base(s)->d2p
00111 #define ps_search_dag(s) ps_search_base(s)->dag
00112 #define ps_search_last_link(s) ps_search_base(s)->last_link
00113 #define ps_search_post(s) ps_search_base(s)->post
00114 #define ps_search_lookahead(s) ps_search_base(s)->pls
00115 #define ps_search_n_words(s) ps_search_base(s)->n_words
00116
00117 #define ps_search_name(s) ps_search_base(s)->vt->name
00118 #define ps_search_start(s) (*(ps_search_base(s)->vt->start))(s)
00119 #define ps_search_step(s,i) (*(ps_search_base(s)->vt->step))(s,i)
00120 #define ps_search_finish(s) (*(ps_search_base(s)->vt->finish))(s)
00121 #define ps_search_reinit(s,d,d2p) (*(ps_search_base(s)->vt->reinit))(s,d,d2p)
00122 #define ps_search_free(s) (*(ps_search_base(s)->vt->free))(s)
00123 #define ps_search_lattice(s) (*(ps_search_base(s)->vt->lattice))(s)
00124 #define ps_search_hyp(s,sc) (*(ps_search_base(s)->vt->hyp))(s,sc)
00125 #define ps_search_prob(s) (*(ps_search_base(s)->vt->prob))(s)
00126 #define ps_search_seg_iter(s,sc) (*(ps_search_base(s)->vt->seg_iter))(s,sc)
00127
00128
00129 #define ps_search_silence_wid(s) ps_search_base(s)->silence_wid
00130 #define ps_search_start_wid(s) ps_search_base(s)->start_wid
00131 #define ps_search_finish_wid(s) ps_search_base(s)->finish_wid
00132
00136 void ps_search_init(ps_search_t *search, ps_searchfuncs_t *vt,
00137 cmd_ln_t *config, acmod_t *acmod, dict_t *dict,
00138 dict2pid_t *d2p);
00139
00143 void ps_search_base_reinit(ps_search_t *search, dict_t *dict,
00144 dict2pid_t *d2p);
00145
00149 void ps_search_deinit(ps_search_t *search);
00150
00151 typedef struct ps_segfuncs_s {
00152 ps_seg_t *(*seg_next)(ps_seg_t *seg);
00153 void (*seg_free)(ps_seg_t *seg);
00154 } ps_segfuncs_t;
00155
00159 struct ps_seg_s {
00160 ps_segfuncs_t *vt;
00161 ps_search_t *search;
00162 char const *word;
00163 int16 sf;
00164 int16 ef;
00165 int32 ascr;
00166 int32 lscr;
00167 int32 prob;
00168
00169
00170 int32 lback;
00171
00172 float32 lwf;
00173 };
00174
00175 #define ps_search_seg_next(seg) (*(seg->vt->seg_next))(seg)
00176 #define ps_search_seg_free(s) (*(seg->vt->seg_free))(seg)
00177
00178
00182 struct ps_decoder_s {
00183
00184 cmd_ln_t *config;
00185 int refcount;
00187
00188 acmod_t *acmod;
00189 dict_t *dict;
00190 dict2pid_t *d2p;
00191 logmath_t *lmath;
00193
00194 glist_t searches;
00195 ps_search_t *search;
00196 ps_search_t *phone_loop;
00197 int pl_window;
00199
00200 uint32 uttno;
00201 char *uttid;
00202 ptmr_t perf;
00203 uint32 n_frame;
00204 char const *mfclogdir;
00205 char const *rawlogdir;
00206 };
00207
00208 #endif