/[zanavi_public1]/navit/navit/speech.c
ZANavi

Contents of /navit/navit/speech.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 27 - (hide annotations) (download)
Mon Apr 9 21:27:36 2012 UTC (11 years, 11 months ago) by zoff99
File MIME type: text/plain
File size: 4124 byte(s)
lots of new stuff, tranlsations, bug fixes ...
1 zoff99 2 /**
2     * Navit, a modular navigation system.
3     * Copyright (C) 2005-2008 Navit Team
4     *
5     * This program is free software; you can redistribute it and/or
6     * modify it under the terms of the GNU General Public License
7     * version 2 as published by the Free Software Foundation.
8     *
9     * This program is distributed in the hope that it will be useful,
10     * but WITHOUT ANY WARRANTY; without even the implied warranty of
11     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12     * GNU General Public License for more details.
13     *
14     * You should have received a copy of the GNU General Public License
15     * along with this program; if not, write to the
16     * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17     * Boston, MA 02110-1301, USA.
18     */
19    
20     #include <glib.h>
21     #include <string.h>
22     #include "debug.h"
23     #include "item.h"
24     #include "speech.h"
25     #include "plugin.h"
26    
27     struct speech {
28     struct speech_priv *priv;
29     struct speech_methods meth;
30     struct attr **attrs;
31     };
32    
33    
34     struct speech *
35     speech_new(struct attr *parent, struct attr **attrs)
36     {
37     struct speech *this_;
38     struct speech_priv *(*speech_new)(struct speech_methods *meth, struct attr **attrs, struct attr *parent);
39     struct attr *attr;
40    
41     attr=attr_search(attrs, NULL, attr_type);
42     if (! attr) {
43     dbg(0,"type missing\n");
44     return NULL;
45     }
46     dbg(1,"type='%s'\n", attr->u.str);
47     speech_new=plugin_get_speech_type(attr->u.str);
48     dbg(1,"new=%p\n", speech_new);
49     if (! speech_new) {
50     dbg(0,"wrong type '%s'\n", attr->u.str);
51     return NULL;
52     }
53     this_=g_new0(struct speech, 1);
54     this_->priv=speech_new(&this_->meth, attrs, parent);
55     this_->attrs=attr_list_dup(attrs);
56     dbg(1, "say=%p\n", this_->meth.say);
57     dbg(1,"priv=%p\n", this_->priv);
58     if (! this_->priv) {
59     attr_list_free(this_->attrs);
60     g_free(this_);
61     return NULL;
62     }
63     dbg(1,"return %p\n", this_);
64    
65     return this_;
66     }
67    
68     void
69     speech_destroy(struct speech *this_)
70     {
71     this_->meth.destroy(this_->priv);
72     attr_list_free(this_->attrs);
73     g_free(this_);
74     }
75    
76     int
77     speech_say(struct speech *this_, const char *text)
78     {
79 zoff99 27 // dbg(1, "this_=%p text='%s' calling %p\n", this_, text, this_->meth.say);
80 zoff99 2 return (this_->meth.say)(this_->priv, text);
81     }
82    
83     /**
84     * @brief Gets an attribute from a speech plugin
85     *
86     * @param this_ The speech plugin the attribute should be read from
87     * @param type The type of the attribute to be read
88     * @param attr Pointer to an attrib-structure where the attribute should be written to
89     * @param iter (NOT IMPLEMENTED) Used to iterate through all attributes of a type. Set this to NULL to get the first attribute, set this to an attr_iter to get the next attribute
90     * @return True if the attribute type was found, false if not
91     */
92    
93     int
94     speech_get_attr(struct speech *this_, enum attr_type type, struct attr *attr, struct attr_iter *iter)
95     {
96     return attr_generic_get_attr(this_->attrs, NULL, type, attr, iter);
97     }
98    
99     /**
100     * @brief Tries to estimate how long it will take to speak a certain string
101     *
102     * This function tries to estimate how long it will take to speak a certain string
103     * passed in str. It relies on the "characters per second"-value passed from the
104     * configuration.
105     *
106     * @param this_ The speech whose speed should be used
107     * @param str The string that should be estimated
108     * @return Time in tenth of seconds or -1 on error
109     */
110     int
111     speech_estimate_duration(struct speech *this_, char *str)
112     {
113     int count;
114     struct attr cps_attr;
115    
116     if (!speech_get_attr(this_,attr_cps,&cps_attr,NULL)) {
117     return -1;
118     }
119    
120     count = strlen(str);
121    
122     return (count * 10) / cps_attr.u.num;
123     }
124    
125     /**
126     * @brief Sets an attribute from an speech plugin
127     *
128     * This sets an attribute of a speech plugin, overwriting an attribute of the same type if it
129     * already exists. This function also calls all the callbacks that are registred
130     * to be called when attributes change.
131     *
132     * @param this_ The speech plugin to set the attribute of
133     * @param attr The attribute to set
134     * @return True if the attr could be set, false otherwise
135     */
136    
137     int
138     speech_set_attr(struct speech *this_, struct attr *attr)
139     {
140     this_->attrs=attr_generic_set_attr(this_->attrs, attr);
141     //callback_list_call_attr_2(this_->attr_cbl, attr->type, this_, attr);
142     return 1;
143     }

   
Visit the ZANavi Wiki