1 /* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */
2 /* ====================================================================
3  * Copyright (c) 2007 Carnegie Mellon University.  All rights
4  * reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  *
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  *
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in
15  *    the documentation and/or other materials provided with the
16  *    distribution.
17  *
18  * This work was supported in part by funding from the Defense Advanced
19  * Research Projects Agency and the National Science Foundation of the
20  * United States of America, and the CMU Sphinx Speech Consortium.
21  *
22  * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND
23  * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
24  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
25  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
26  * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
28  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
32  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33  *
34  * ====================================================================
35  *
36  * Author: David Huggins-Daines <dhuggins@cs.cmu.edu>
37  */
38 
39 #ifndef __GST_POCKETSPHINX_H__
40 #define __GST_POCKETSPHINX_H__
41 
42 #include <gst/gst.h>
43 #include <pocketsphinx.h>
44 
45 G_BEGIN_DECLS
46 
47 #define GST_TYPE_POCKETSPHINX                   \
48     (gst_pocketsphinx_get_type())
49 #define GST_POCKETSPHINX(obj)                                           \
50     (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_POCKETSPHINX,GstPocketSphinx))
51 #define GST_POCKETSPHINX_CLASS(klass)                                   \
52     (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_POCKETSPHINX,GstPocketSphinxClass))
53 #define GST_IS_POCKETSPHINX(obj)                                \
54     (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_POCKETSPHINX))
55 #define GST_IS_POCKETSPHINX_CLASS(klass)                        \
56     (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_POCKETSPHINX))
57 
58 typedef struct _GstPocketSphinx      GstPocketSphinx;
59 typedef struct _GstPocketSphinxClass GstPocketSphinxClass;
60 
61 struct _GstPocketSphinx
62 {
63     GstElement element;
64 
65     GstPad *sinkpad, *srcpad;
66 
67     ps_decoder_t *ps;
68     cmd_ln_t *config;
69     gchar *latdir;                 /**< Output directory for word lattices. */
70     int n_best_size;               /**< Size of the returned B-best list */
71 
72     GHashTable *arghash;
73     gboolean listening;
74 
75     GstClockTime last_result_time; /**< Timestamp of last partial result. */
76     char *last_result;             /**< String of last partial result. */
77 };
78 
79 struct _GstPocketSphinxClass
80 {
81     GstElementClass parent_class;
82 
83     void (*partial_result)  (GstElement *element, const gchar *hyp_str);
84     void (*result)          (GstElement *element, const gchar *hyp_str);
85 };
86 
87 GType gst_pocketsphinx_get_type(void);
88 
89 /*
90  * Boxing of lattices.
91  */
92 #define PS_LATTICE_TYPE (ps_lattice_get_type())
93 GType ps_lattice_get_type(void);
94 
95 /*
96  * Boxing of decoder.
97  */
98 #define PS_DECODER_TYPE (ps_decoder_get_type())
99 GType ps_decoder_get_type(void);
100 
101 G_END_DECLS
102 
103 #endif /* __GST_POCKETSPHINX_H__ */
104