OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 /** | 5 /** |
6 * @fileoverview The class to Manage both offline / online speech recognition. | 6 * @fileoverview The class to Manage both offline / online speech recognition. |
7 */ | 7 */ |
8 | 8 |
9 <include src="plugin_manager.js"/> | 9 <include src="plugin_manager.js"/> |
10 <include src="audio_manager.js"/> | 10 <include src="audio_manager.js"/> |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
78 this.audioManager_.addEventListener( | 78 this.audioManager_.addEventListener( |
79 'audio', pluginManager.sendAudioData.bind(pluginManager)); | 79 'audio', pluginManager.sendAudioData.bind(pluginManager)); |
80 if (this.shown_) { | 80 if (this.shown_) { |
81 this.pluginManager_.startRecognizer(); | 81 this.pluginManager_.startRecognizer(); |
82 this.audioManager_.start(); | 82 this.audioManager_.start(); |
83 this.setState_(SpeechState.HOTWORD_RECOGNIZING); | 83 this.setState_(SpeechState.HOTWORD_RECOGNIZING); |
84 } else { | 84 } else { |
85 this.pluginManager_.stopRecognizer(); | 85 this.pluginManager_.stopRecognizer(); |
86 this.setState_(SpeechState.READY); | 86 this.setState_(SpeechState.READY); |
87 } | 87 } |
88 chrome.send('setHotwordRecognizerState', [true]); | |
89 }; | 88 }; |
90 | 89 |
91 /** | 90 /** |
92 * Called when the hotword is recognized. | 91 * Called when the hotword is recognized. |
93 * | 92 * |
94 * @private | 93 * @private |
95 */ | 94 */ |
96 SpeechManager.prototype.onHotwordRecognized_ = function() { | 95 SpeechManager.prototype.onHotwordRecognized_ = function() { |
97 if (this.state != SpeechState.HOTWORD_RECOGNIZING) | 96 if (this.state != SpeechState.HOTWORD_RECOGNIZING) |
98 return; | 97 return; |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
174 var pluginManager = new speech.PluginManager( | 173 var pluginManager = new speech.PluginManager( |
175 this.onHotwordRecognizerReady_.bind(this), | 174 this.onHotwordRecognizerReady_.bind(this), |
176 this.onHotwordRecognized_.bind(this)); | 175 this.onHotwordRecognized_.bind(this)); |
177 pluginManager.scheduleInitialize( | 176 pluginManager.scheduleInitialize( |
178 this.audioManager_.sampleRate, 'chrome://app-list/hotword.data'); | 177 this.audioManager_.sampleRate, 'chrome://app-list/hotword.data'); |
179 } else { | 178 } else { |
180 if (!recognizer) | 179 if (!recognizer) |
181 return; | 180 return; |
182 document.body.removeChild(recognizer); | 181 document.body.removeChild(recognizer); |
183 this.pluginManager_ = null; | 182 this.pluginManager_ = null; |
184 chrome.send('setHotwordRecognizerState', [false]); | |
185 if (this.state == SpeechState.HOTWORD_RECOGNIZING) | 183 if (this.state == SpeechState.HOTWORD_RECOGNIZING) |
186 this.setState(SpeechState.READY); | 184 this.setState(SpeechState.READY); |
187 } | 185 } |
188 }; | 186 }; |
189 | 187 |
190 /** | 188 /** |
191 * Starts the hotword recognizer. | 189 * Called when the app-list bubble is shown. |
192 */ | 190 */ |
193 SpeechManager.prototype.startHotwordRecognition = function() { | 191 SpeechManager.prototype.onShown = function() { |
| 192 this.shown_ = true; |
194 if (!this.pluginManager_) | 193 if (!this.pluginManager_) |
195 return; | 194 return; |
196 | 195 |
197 if (this.state == SpeechState.HOTWORD_RECOGNIZING) | 196 if (this.state == SpeechState.HOTWORD_RECOGNIZING) { |
| 197 console.warn('Already in recognition state...'); |
198 return; | 198 return; |
| 199 } |
199 | 200 |
200 this.pluginManager_.startRecognizer(); | 201 this.pluginManager_.startRecognizer(); |
201 this.audioManager_.start(); | 202 this.audioManager_.start(); |
202 this.setState_(SpeechState.HOTWORD_RECOGNIZING); | 203 this.setState_(SpeechState.HOTWORD_RECOGNIZING); |
203 }; | 204 }; |
204 | 205 |
205 /** | 206 /** |
206 * Stops the hotword recognizer. | |
207 */ | |
208 SpeechManager.prototype.stopHotwordRecognition = function() { | |
209 if (!this.pluginManager_) | |
210 return; | |
211 | |
212 if (this.state != SpeechState.HOTWORD_RECOGNIZING) | |
213 return; | |
214 | |
215 this.pluginManager_.stopRecognizer(); | |
216 this.audioManager_.stop(); | |
217 this.setState_(SpeechState.READY); | |
218 }; | |
219 | |
220 /** | |
221 * Called when the app-list bubble is shown. | |
222 */ | |
223 SpeechManager.prototype.onShown = function() { | |
224 this.shown_ = true; | |
225 if (this.state == SpeechState.READY) | |
226 this.startHotwordRecognition(); | |
227 }; | |
228 | |
229 /** | |
230 * Called when the app-list bubble is hidden. | 207 * Called when the app-list bubble is hidden. |
231 */ | 208 */ |
232 SpeechManager.prototype.onHidden = function() { | 209 SpeechManager.prototype.onHidden = function() { |
233 this.shown_ = false; | 210 this.shown_ = false; |
234 if (this.pluginManager_) | 211 if (this.pluginManager_) |
235 this.pluginManager_.stopRecognizer(); | 212 this.pluginManager_.stopRecognizer(); |
236 | 213 |
237 // SpeechRecognition is asynchronous. | 214 // SpeechRecognition is asynchronous. |
238 this.audioManager_.stop(); | 215 this.audioManager_.stop(); |
239 if (this.state == SpeechState.RECOGNIZING || | 216 if (this.state == SpeechState.RECOGNIZING || |
(...skipping 19 matching lines...) Expand all Loading... |
259 if (this.audioManager_.state == speech.AudioState.STOPPED) | 236 if (this.audioManager_.state == speech.AudioState.STOPPED) |
260 this.audioManager_.start(); | 237 this.audioManager_.start(); |
261 this.speechRecognitionManager_.start(); | 238 this.speechRecognitionManager_.start(); |
262 } | 239 } |
263 }; | 240 }; |
264 | 241 |
265 return { | 242 return { |
266 SpeechManager: SpeechManager | 243 SpeechManager: SpeechManager |
267 }; | 244 }; |
268 }); | 245 }); |
OLD | NEW |