Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(96)

Side by Side Diff: chrome/browser/speech/tts_controller.h

Issue 12589005: Implement web speech synthesis. (Closed) Base URL: http://git.chromium.org/chromium/src.git@webtts
Patch Set: Fix android build Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CHROME_BROWSER_SPEECH_TTS_CONTROLLER_H_ 5 #ifndef CHROME_BROWSER_SPEECH_TTS_CONTROLLER_H_
6 #define CHROME_BROWSER_SPEECH_TTS_CONTROLLER_H_ 6 #define CHROME_BROWSER_SPEECH_TTS_CONTROLLER_H_
7 7
8 #include <queue> 8 #include <queue>
9 #include <set> 9 #include <set>
10 #include <string> 10 #include <string>
11 #include <vector>
11 12
12 #include "base/memory/scoped_ptr.h" 13 #include "base/memory/scoped_ptr.h"
13 #include "base/memory/singleton.h" 14 #include "base/memory/singleton.h"
14 #include "googleurl/src/gurl.h" 15 #include "googleurl/src/gurl.h"
15 16
17 class Utterance;
16 class TtsPlatformImpl; 18 class TtsPlatformImpl;
17 class Profile; 19 class Profile;
18 20
19 namespace base { 21 namespace base {
20 class ListValue;
21 class Value; 22 class Value;
22 } 23 }
23 24
24 // Events sent back from the TTS engine indicating the progress. 25 // Events sent back from the TTS engine indicating the progress.
25 enum TtsEventType { 26 enum TtsEventType {
26 TTS_EVENT_START, 27 TTS_EVENT_START,
27 TTS_EVENT_END, 28 TTS_EVENT_END,
28 TTS_EVENT_WORD, 29 TTS_EVENT_WORD,
29 TTS_EVENT_SENTENCE, 30 TTS_EVENT_SENTENCE,
30 TTS_EVENT_MARKER, 31 TTS_EVENT_MARKER,
31 TTS_EVENT_INTERRUPTED, 32 TTS_EVENT_INTERRUPTED,
32 TTS_EVENT_CANCELLED, 33 TTS_EVENT_CANCELLED,
33 TTS_EVENT_ERROR 34 TTS_EVENT_ERROR
34 }; 35 };
35 36
37 // Returns true if this event type is one that indicates an utterance
38 // is finished and can be destroyed.
39 bool IsFinalTtsEventType(TtsEventType event_type);
36 40
37 // The continuous parameters that apply to a given utterance. 41 // The continuous parameters that apply to a given utterance.
38 struct UtteranceContinuousParameters { 42 struct UtteranceContinuousParameters {
39 UtteranceContinuousParameters(); 43 UtteranceContinuousParameters();
40 44
41 double rate; 45 double rate;
42 double pitch; 46 double pitch;
43 double volume; 47 double volume;
44 }; 48 };
45 49
50 // Information about one voice.
51 struct VoiceData {
52 VoiceData();
53 ~VoiceData();
54
55 std::string name;
56 std::string lang;
57 std::string gender;
58 std::string extension_id;
59 std::vector<std::string> events;
60 };
61
62 // Class that wants to receive events on utterances.
63 class UtteranceEventDelegate {
64 public:
65 virtual ~UtteranceEventDelegate() {}
66 virtual void OnTtsEvent(Utterance* utterance,
67 TtsEventType event_type,
68 int char_index,
69 const std::string& error_message) = 0;
70 };
46 71
47 // One speech utterance. 72 // One speech utterance.
48 class Utterance { 73 class Utterance {
49 public: 74 public:
50 // Construct an utterance given a profile and a completion task to call 75 // Construct an utterance given a profile and a completion task to call
51 // when the utterance is done speaking. Before speaking this utterance, 76 // when the utterance is done speaking. Before speaking this utterance,
52 // its other parameters like text, rate, pitch, etc. should all be set. 77 // its other parameters like text, rate, pitch, etc. should all be set.
53 explicit Utterance(Profile* profile); 78 explicit Utterance(Profile* profile);
54 ~Utterance(); 79 ~Utterance();
55 80
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 } 143 }
119 const std::set<std::string>& desired_event_types() const { 144 const std::set<std::string>& desired_event_types() const {
120 return desired_event_types_; 145 return desired_event_types_;
121 } 146 }
122 147
123 const std::string& extension_id() const { return extension_id_; } 148 const std::string& extension_id() const { return extension_id_; }
124 void set_extension_id(const std::string& extension_id) { 149 void set_extension_id(const std::string& extension_id) {
125 extension_id_ = extension_id; 150 extension_id_ = extension_id;
126 } 151 }
127 152
153 UtteranceEventDelegate* event_delegate() const { return event_delegate_; }
154 void set_event_delegate(UtteranceEventDelegate* event_delegate) {
155 event_delegate_ = event_delegate;
156 }
157
128 // Getters and setters for internal state. 158 // Getters and setters for internal state.
129 Profile* profile() const { return profile_; } 159 Profile* profile() const { return profile_; }
130 int id() const { return id_; } 160 int id() const { return id_; }
131 bool finished() const { return finished_; } 161 bool finished() const { return finished_; }
132 162
133 private: 163 private:
134 // The profile that initiated this utterance. 164 // The profile that initiated this utterance.
135 Profile* profile_; 165 Profile* profile_;
136 166
137 // The extension ID of the extension providing TTS for this utterance, or 167 // The extension ID of the extension providing TTS for this utterance, or
(...skipping 19 matching lines...) Expand all
157 // receive events. 187 // receive events.
158 std::string src_extension_id_; 188 std::string src_extension_id_;
159 189
160 // The source extension's ID of this utterance, so that it can associate 190 // The source extension's ID of this utterance, so that it can associate
161 // events with the appropriate callback. 191 // events with the appropriate callback.
162 int src_id_; 192 int src_id_;
163 193
164 // The URL of the page where the source extension called speak. 194 // The URL of the page where the source extension called speak.
165 GURL src_url_; 195 GURL src_url_;
166 196
197 // The delegate to be called when an utterance event is fired.
198 // Weak reference; it will be cleared after we fire a "final" event
199 // (as determined by IsFinalTtsEventType).
200 UtteranceEventDelegate* event_delegate_;
201
167 // The parsed options. 202 // The parsed options.
168 std::string voice_name_; 203 std::string voice_name_;
169 std::string lang_; 204 std::string lang_;
170 std::string gender_; 205 std::string gender_;
171 UtteranceContinuousParameters continuous_parameters_; 206 UtteranceContinuousParameters continuous_parameters_;
172 bool can_enqueue_; 207 bool can_enqueue_;
173 std::set<std::string> required_event_types_; 208 std::set<std::string> required_event_types_;
174 std::set<std::string> desired_event_types_; 209 std::set<std::string> desired_event_types_;
175 210
176 // The index of the current char being spoken. 211 // The index of the current char being spoken.
177 int char_index_; 212 int char_index_;
178 213
179 // True if this utterance received an event indicating it's done. 214 // True if this utterance received an event indicating it's done.
180 bool finished_; 215 bool finished_;
181 }; 216 };
182 217
183
184 // Singleton class that manages text-to-speech for the TTS and TTS engine 218 // Singleton class that manages text-to-speech for the TTS and TTS engine
185 // extension APIs, maintaining a queue of pending utterances and keeping 219 // extension APIs, maintaining a queue of pending utterances and keeping
186 // track of all state. 220 // track of all state.
187 class TtsController { 221 class TtsController {
188 public: 222 public:
189 // Get the single instance of this class. 223 // Get the single instance of this class.
190 static TtsController* GetInstance(); 224 static TtsController* GetInstance();
191 225
192 // Returns true if we're currently speaking an utterance. 226 // Returns true if we're currently speaking an utterance.
193 bool IsSpeaking(); 227 bool IsSpeaking();
(...skipping 11 matching lines...) Expand all
205 // the callback function, and in addition, completion and error events 239 // the callback function, and in addition, completion and error events
206 // trigger finishing the current utterance and starting the next one, if 240 // trigger finishing the current utterance and starting the next one, if
207 // any. 241 // any.
208 void OnTtsEvent(int utterance_id, 242 void OnTtsEvent(int utterance_id,
209 TtsEventType event_type, 243 TtsEventType event_type,
210 int char_index, 244 int char_index,
211 const std::string& error_message); 245 const std::string& error_message);
212 246
213 // Return a list of all available voices, including the native voice, 247 // Return a list of all available voices, including the native voice,
214 // if supported, and all voices registered by extensions. 248 // if supported, and all voices registered by extensions.
215 base::ListValue* GetVoices(Profile* profile); 249 void GetVoices(Profile* profile, std::vector<VoiceData>* out_voices);
216 250
217 // Called by TtsExtensionLoaderChromeOs::LoadTtsExtension when it 251 // Called by TtsExtensionLoaderChromeOs::LoadTtsExtension when it
218 // finishes loading the built-in TTS component extension. 252 // finishes loading the built-in TTS component extension.
219 void RetrySpeakingQueuedUtterances(); 253 void RetrySpeakingQueuedUtterances();
220 254
221 // For unit testing. 255 // For unit testing.
222 void SetPlatformImpl(TtsPlatformImpl* platform_impl); 256 void SetPlatformImpl(TtsPlatformImpl* platform_impl);
223 int QueueSize(); 257 int QueueSize();
224 258
225 protected: 259 protected:
(...skipping 27 matching lines...) Expand all
253 std::queue<Utterance*> utterance_queue_; 287 std::queue<Utterance*> utterance_queue_;
254 288
255 // A pointer to the platform implementation of text-to-speech, for 289 // A pointer to the platform implementation of text-to-speech, for
256 // dependency injection. 290 // dependency injection.
257 TtsPlatformImpl* platform_impl_; 291 TtsPlatformImpl* platform_impl_;
258 292
259 DISALLOW_COPY_AND_ASSIGN(TtsController); 293 DISALLOW_COPY_AND_ASSIGN(TtsController);
260 }; 294 };
261 295
262 #endif // CHROME_BROWSER_SPEECH_TTS_CONTROLLER_H_ 296 #endif // CHROME_BROWSER_SPEECH_TTS_CONTROLLER_H_
OLDNEW
« no previous file with comments | « chrome/browser/speech/extension_api/tts_extension_api.cc ('k') | chrome/browser/speech/tts_controller.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698