1 # Copyright (c) 2008 Carnegie Mellon University. All rights
4 # You may copy, modify, and distribute this code under the same terms
5 # as PocketSphinx or Python, at your convenience, as long as this
6 # notice is not removed.
8 # Author: David Huggins-Daines <dhuggins@cs.cmu.edu>
10 # Import SphinxBase C types
11 from sphinxbase cimport arg_t, cmd_ln_t, ngram_model_t, fsg_model_t, logmath_t
13 # Import SphinxBase extention types
14 from sphinxbase cimport NGramModel
16 # Finally, import this for SphinxBase functions (since there are too many to list)
17 cimport sphinxbase as sb
20 ctypedef char** const_char_ptr_ptr "const char**"
21 ctypedef char* const_char_ptr "const char*"
24 ctypedef char* raw_data_ptr "int16 *"
26 # System and Python headers we need
27 cdef extern from "stdio.h":
28 ctypedef struct FILE # oh dear...
30 cdef extern from "Python.h":
31 FILE *PyFile_AsFile(object p)
32 int PyString_AsStringAndSize(object p, char **buf, Py_ssize_t *len) except -1
34 # Don't rely on having PyGTK actually installed
35 cdef extern from "bogus_pygobject.h":
36 ctypedef struct PyGBoxed:
38 ctypedef struct PyGPointer:
41 # PocketSphinx declarations
42 cdef extern from "fsg_set.h":
43 ctypedef struct fsg_set_t
44 ctypedef struct fsg_set_iter_t
46 cdef extern from "ps_lattice.h":
47 ctypedef struct ps_lattice_t
48 ctypedef struct ps_latnode_t
49 ctypedef struct ps_latnode_iter_t
50 ctypedef struct ps_latlink_t
51 ctypedef struct ps_latlink_iter_t
52 ctypedef struct ps_decoder_t
54 ps_lattice_t *ps_lattice_read(ps_decoder_t *ps, char *file)
55 ps_lattice_t *ps_lattice_retain(ps_lattice_t *dag)
56 int ps_lattice_free(ps_lattice_t *dag)
57 int ps_lattice_write(ps_lattice_t *dag, char *filename)
58 logmath_t *ps_lattice_get_logmath(ps_lattice_t *dag)
59 ps_latnode_iter_t *ps_latnode_iter(ps_lattice_t *dag)
60 ps_latnode_iter_t *ps_latnode_iter_next(ps_latnode_iter_t *itor)
61 void ps_latnode_iter_free(ps_latnode_iter_t *itor)
62 ps_latnode_t *ps_latnode_iter_node(ps_latnode_iter_t *itor)
63 int ps_latnode_times(ps_latnode_t *node, short *out_fef, short *out_lef)
64 char *ps_latnode_word(ps_lattice_t *dag, ps_latnode_t *node)
65 char *ps_latnode_baseword(ps_lattice_t *dag, ps_latnode_t *node)
66 ps_latlink_iter_t *ps_latnode_exits(ps_latnode_t *node)
67 ps_latlink_iter_t *ps_latnode_entries(ps_latnode_t *node)
68 int ps_latnode_prob(ps_lattice_t *dag, ps_latnode_t *node, ps_latlink_t **out_link)
69 ps_latlink_iter_t *ps_latlink_iter_next(ps_latlink_iter_t *itor)
70 void ps_latlink_iter_free(ps_latlink_iter_t *itor)
71 ps_latlink_t *ps_latlink_iter_link(ps_latlink_iter_t *itor)
72 int ps_latlink_times(ps_latlink_t *link, short *out_sf)
73 ps_latnode_t *ps_latlink_nodes(ps_latlink_t *link, ps_latnode_t **out_src)
74 char *ps_latlink_word(ps_lattice_t *dag, ps_latlink_t *link)
75 char *ps_latlink_baseword(ps_lattice_t *dag, ps_latlink_t *link)
76 int ps_latlink_prob(ps_lattice_t *dag, ps_latlink_t *link, int *out_ascr)
77 ps_latlink_t *ps_latlink_pred(ps_latlink_t *link)
78 void ps_lattice_link(ps_lattice_t *dag, ps_latnode_t *src, ps_latnode_t *dest,
80 ps_latlink_t *ps_lattice_traverse_edges(ps_lattice_t *dag, ps_latnode_t *start,
82 ps_latlink_t *ps_lattice_traverse_next(ps_lattice_t *dag, ps_latnode_t *end)
83 ps_latlink_t *ps_lattice_reverse_edges(ps_lattice_t *dag, ps_latnode_t *start,
85 ps_latlink_t *ps_lattice_reverse_next(ps_lattice_t *dag, ps_latnode_t *start)
86 ps_latlink_t *ps_lattice_bestpath(ps_lattice_t *dag, ngram_model_t *lmset,
87 float lwf, float ascale)
88 int ps_lattice_posterior(ps_lattice_t *dag, ngram_model_t *lmset, float ascale)
89 int ps_lattice_n_frames(ps_lattice_t *dag)
91 cdef extern from "pocketsphinx.h":
92 ctypedef struct ps_decoder_t
93 ctypedef struct ps_nbest_t
94 ctypedef struct ps_seg_t
96 ps_decoder_t *ps_init(cmd_ln_t *config)
97 int ps_reinit(ps_decoder_t *ps, cmd_ln_t *config)
98 ps_decoder_t *ps_retain(ps_decoder_t *ps)
99 void ps_free(ps_decoder_t *ps)
101 cmd_ln_t *ps_get_config(ps_decoder_t *ps)
102 logmath_t *ps_get_logmath(ps_decoder_t *ps)
103 ngram_model_t *ps_get_lmset(ps_decoder_t *ps)
104 ngram_model_t *ps_update_lmset(ps_decoder_t *ps, ngram_model_t *lmset)
105 fsg_set_t *ps_get_fsgset(ps_decoder_t *ps)
106 fsg_set_t *ps_update_fsgset(ps_decoder_t *ps)
107 int ps_load_dict(ps_decoder_t *ps, char *dictfile,
108 char *fdictfile, char *format)
109 int ps_save_dict(ps_decoder_t *ps, char *dictfile, char *format)
110 int ps_add_word(ps_decoder_t *ps, char *word, char *phones, int update)
111 int ps_decode_raw(ps_decoder_t *ps, FILE *rawfh,
112 char *uttid, long maxsamps)
113 int ps_decode_senscr(ps_decoder_t *ps, FILE *senfh, char *uttid)
114 int ps_start_utt(ps_decoder_t *ps, char *uttid)
115 int ps_process_raw(ps_decoder_t *ps, raw_data_ptr data, size_t n_samples,
116 int no_search, int full_utt)
117 int ps_end_utt(ps_decoder_t *ps)
118 const_char_ptr ps_get_hyp(ps_decoder_t *ps, int32 *out_best_score, const_char_ptr_ptr out_uttid)
119 int32 ps_get_prob(ps_decoder_t *ps, const_char_ptr_ptr out_uttid)
120 ps_lattice_t *ps_get_lattice(ps_decoder_t *ps)
121 ps_seg_t *ps_seg_iter(ps_decoder_t *ps, int32 *out_best_score)
122 ps_seg_t *ps_seg_next(ps_seg_t *seg)
123 char *ps_seg_word(ps_seg_t *seg)
124 void ps_seg_frames(ps_seg_t *seg, int *out_sf, int *out_ef)
125 int ps_seg_prob(ps_seg_t *seg, int32 *out_ascr, int32 *out_lscr, int32 *out_lback)
126 void ps_seg_free(ps_seg_t *seg)
127 ps_nbest_t *ps_nbest(ps_decoder_t *ps, int sf, int ef, char *ctx1, char *ctx2)
128 ps_nbest_t *ps_nbest_next(ps_nbest_t *nbest)
129 char *ps_nbest_hyp(ps_nbest_t *nbest, int32 *out_score)
130 ps_seg_t *ps_nbest_seg(ps_nbest_t *nbest, int32 *out_score)
131 void ps_nbest_free(ps_nbest_t *nbest)
132 void ps_get_utt_time(ps_decoder_t *ps, double *out_nspeech,
133 double *out_ncpu, double *out_nwall)
134 void ps_get_all_time(ps_decoder_t *ps, double *out_nspeech,
135 double *out_ncpu, double *out_nwall)
137 # Now, our extension classes
139 cdef ps_decoder_t *ps
142 cdef set_boxed(Decoder self, box)
145 cdef ps_lattice_t *dag
146 cdef read_dag(Lattice self, Decoder ps, latfile)
147 cdef set_dag(Lattice self, ps_lattice_t *dag)
148 cdef set_boxed(Lattice self, box)
149 cdef readonly n_frames
152 cdef ps_latlink_t *link
153 cdef ps_lattice_t *dag # FIXME: This may or may not cause memory leaks?
154 cdef readonly char *word, *baseword
155 cdef readonly int sf, ef
156 cdef readonly double prob
157 cdef set_link(LatLink self, ps_lattice_t *dag, ps_latlink_t *link)
159 cdef class LatLinkIterator:
160 cdef ps_lattice_t *dag
161 cdef ps_latlink_iter_t *itor
165 cdef ps_latnode_t *node
166 cdef ps_lattice_t *dag # FIXME: This may or may not cause memory leaks?
167 cdef readonly char *word, *baseword
168 cdef readonly int sf, fef, lef
169 cdef readonly double prob
170 cdef readonly LatLink best_exit
171 cdef set_node(LatNode self, ps_lattice_t *dag, ps_latnode_t *node)
173 cdef class LatNodeIterator:
174 cdef ps_lattice_t *dag
175 cdef ps_latnode_iter_t *itor