Index: chrome/browser/resources/app_list/speech_manager.js |
diff --git a/chrome/browser/resources/app_list/speech_manager.js b/chrome/browser/resources/app_list/speech_manager.js |
deleted file mode 100644 |
index 74f4668ffdb81ad888fe4d856acde22bcac1da61..0000000000000000000000000000000000000000 |
--- a/chrome/browser/resources/app_list/speech_manager.js |
+++ /dev/null |
@@ -1,312 +0,0 @@ |
-// Copyright 2013 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-/** |
- * @fileoverview The class to Manage both offline / online speech recognition. |
- */ |
- |
-<include src="plugin_manager.js"> |
-<include src="audio_manager.js"> |
-<include src="speech_recognition_manager.js"> |
- |
-cr.define('speech', function() { |
- 'use strict'; |
- |
- /** |
- * The state of speech recognition. |
- * |
- * @enum {string} |
- */ |
- var SpeechState = { |
- READY: 'READY', |
- HOTWORD_RECOGNIZING: 'HOTWORD_RECOGNIZING', |
- RECOGNIZING: 'RECOGNIZING', |
- IN_SPEECH: 'IN_SPEECH', |
- STOPPING: 'STOPPING', |
- NETWORK_ERROR: 'NETWORK_ERROR' |
- }; |
- |
- /** |
- * The time to show the network error message in seconds. |
- * |
- * @const {number} |
- */ |
- var SPEECH_ERROR_TIMEOUT = 3; |
- |
- /** |
- * Checks the prefix for the hotword module based on the language. This is |
- * fragile if the file structure has changed. |
- */ |
- function getHotwordPrefix() { |
- var prefix = navigator.language.toLowerCase(); |
- if (prefix == 'en-gb') |
- return prefix; |
- var hyphen = prefix.indexOf('-'); |
- if (hyphen >= 0) |
- prefix = prefix.substr(0, hyphen); |
- if (prefix == 'en') |
- prefix = ''; |
- return prefix; |
- } |
- |
- /** |
- * @constructor |
- */ |
- function SpeechManager() { |
- this.audioManager_ = new speech.AudioManager(); |
- this.audioManager_.addEventListener('audio', this.onAudioLevel_.bind(this)); |
- this.speechRecognitionManager_ = new speech.SpeechRecognitionManager(this); |
- this.errorTimeoutId_ = null; |
- } |
- |
- /** |
- * Updates the state. |
- * |
- * @param {SpeechState} newState The new state. |
- * @private |
- */ |
- SpeechManager.prototype.setState_ = function(newState) { |
- if (this.state == newState) |
- return; |
- |
- this.state = newState; |
- chrome.send('setSpeechRecognitionState', [this.state]); |
- }; |
- |
- /** |
- * Called with the mean audio level when audio data arrives. |
- * |
- * @param {cr.event.Event} event The event object for the audio data. |
- * @private |
- */ |
- SpeechManager.prototype.onAudioLevel_ = function(event) { |
- var data = event.data; |
- var level = 0; |
- for (var i = 0; i < data.length; ++i) |
- level += Math.abs(data[i]); |
- level /= data.length; |
- chrome.send('speechSoundLevel', [level]); |
- }; |
- |
- /** |
- * Called when the hotword recognizer is ready. |
- * |
- * @param {PluginManager} pluginManager The hotword plugin manager which gets |
- * ready. |
- * @private |
- */ |
- SpeechManager.prototype.onHotwordRecognizerReady_ = function(pluginManager) { |
- this.pluginManager_ = pluginManager; |
- this.audioManager_.addEventListener( |
- 'audio', pluginManager.sendAudioData.bind(pluginManager)); |
- this.pluginManager_.startRecognizer(); |
- this.audioManager_.start(); |
- this.setState_(SpeechState.HOTWORD_RECOGNIZING); |
- }; |
- |
- /** |
- * Called when an error happens for loading the hotword recognizer. |
- * |
- * @private |
- */ |
- SpeechManager.prototype.onHotwordRecognizerLoadError_ = function() { |
- this.setHotwordEnabled(false); |
- this.setState_(SpeechState.READY); |
- }; |
- |
- /** |
- * Called when the hotword is recognized. |
- * |
- * @private |
- */ |
- SpeechManager.prototype.onHotwordRecognized_ = function() { |
- if (this.state != SpeechState.HOTWORD_RECOGNIZING) |
- return; |
- this.pluginManager_.stopRecognizer(); |
- this.speechRecognitionManager_.start(); |
- }; |
- |
- /** |
- * Called when the speech recognition has happened. |
- * |
- * @param {string} result The speech recognition result. |
- * @param {boolean} isFinal Whether the result is final or not. |
- */ |
- SpeechManager.prototype.onSpeechRecognized = function(result, isFinal) { |
- chrome.send('speechResult', [result, isFinal]); |
- if (isFinal) |
- this.speechRecognitionManager_.stop(); |
- }; |
- |
- /** |
- * Called when the speech recognition has started. |
- */ |
- SpeechManager.prototype.onSpeechRecognitionStarted = function() { |
- this.setState_(SpeechState.RECOGNIZING); |
- }; |
- |
- /** |
- * Called when the speech recognition has ended. |
- */ |
- SpeechManager.prototype.onSpeechRecognitionEnded = function() { |
- // Do not handle the speech recognition ends if it ends due to an error |
- // because an error message should be shown for a while. |
- // See onSpeechRecognitionError. |
- if (this.state == SpeechState.NETWORK_ERROR) |
- return; |
- |
- // Restarts the hotword recognition. |
- if (this.state != SpeechState.STOPPING && this.pluginManager_) { |
- this.pluginManager_.startRecognizer(); |
- this.audioManager_.start(); |
- this.setState_(SpeechState.HOTWORD_RECOGNIZING); |
- } else { |
- this.audioManager_.stop(); |
- this.setState_(SpeechState.READY); |
- } |
- }; |
- |
- /** |
- * Called when a speech has started. |
- */ |
- SpeechManager.prototype.onSpeechStarted = function() { |
- if (this.state == SpeechState.RECOGNIZING) |
- this.setState_(SpeechState.IN_SPEECH); |
- }; |
- |
- /** |
- * Called when a speech has ended. |
- */ |
- SpeechManager.prototype.onSpeechEnded = function() { |
- if (this.state == SpeechState.IN_SPEECH) |
- this.setState_(SpeechState.RECOGNIZING); |
- }; |
- |
- /** |
- * Called when the speech manager should recover from the error state. |
- * |
- * @private |
- */ |
- SpeechManager.prototype.onSpeechRecognitionErrorTimeout_ = function() { |
- this.errorTimeoutId_ = null; |
- this.setState_(SpeechState.READY); |
- this.onSpeechRecognitionEnded(); |
- }; |
- |
- /** |
- * Called when an error happened during the speech recognition. |
- * |
- * @param {SpeechRecognitionError} e The error object. |
- */ |
- SpeechManager.prototype.onSpeechRecognitionError = function(e) { |
- if (e.error == 'network') { |
- this.setState_(SpeechState.NETWORK_ERROR); |
- this.errorTimeoutId_ = window.setTimeout( |
- this.onSpeechRecognitionErrorTimeout_.bind(this), |
- SPEECH_ERROR_TIMEOUT * 1000); |
- } else { |
- if (this.state != SpeechState.STOPPING) |
- this.setState_(SpeechState.READY); |
- } |
- }; |
- |
- /** |
- * Changes the availability of the hotword plugin. |
- * |
- * @param {boolean} enabled Whether enabled or not. |
- */ |
- SpeechManager.prototype.setHotwordEnabled = function(enabled) { |
- var recognizer = $('recognizer'); |
- if (enabled) { |
- if (recognizer) |
- return; |
- if (!this.naclArch) |
- return; |
- |
- var prefix = getHotwordPrefix(); |
- var pluginManager = new speech.PluginManager( |
- prefix, |
- this.onHotwordRecognizerReady_.bind(this), |
- this.onHotwordRecognized_.bind(this), |
- this.onHotwordRecognizerLoadError_.bind(this)); |
- var modelUrl = 'chrome://app-list/_platform_specific/' + this.naclArch + |
- '_' + prefix + '/hotword.data'; |
- pluginManager.scheduleInitialize(this.audioManager_.sampleRate, modelUrl); |
- } else { |
- if (!recognizer) |
- return; |
- document.body.removeChild(recognizer); |
- this.pluginManager_ = null; |
- if (this.state == SpeechState.HOTWORD_RECOGNIZING) { |
- this.audioManager_.stop(); |
- this.setState_(SpeechState.READY); |
- } |
- } |
- }; |
- |
- /** |
- * Sets the NaCl architecture for the hotword module. |
- * |
- * @param {string} arch The architecture. |
- */ |
- SpeechManager.prototype.setNaclArch = function(arch) { |
- this.naclArch = arch; |
- }; |
- |
- /** |
- * Called when the app-list bubble is shown. |
- * |
- * @param {boolean} hotwordEnabled Whether the hotword is enabled or not. |
- */ |
- SpeechManager.prototype.onShown = function(hotwordEnabled) { |
- this.setHotwordEnabled(hotwordEnabled); |
- |
- // No one sets the state if the content is initialized on shown but hotword |
- // is not enabled. Sets the state in such case. |
- if (!this.state && !hotwordEnabled) |
- this.setState_(SpeechState.READY); |
- }; |
- |
- /** |
- * Called when the app-list bubble is hidden. |
- */ |
- SpeechManager.prototype.onHidden = function() { |
- this.setHotwordEnabled(false); |
- |
- // SpeechRecognition is asynchronous. |
- this.audioManager_.stop(); |
- if (this.state == SpeechState.RECOGNIZING || |
- this.state == SpeechState.IN_SPEECH) { |
- this.setState_(SpeechState.STOPPING); |
- this.speechRecognitionManager_.stop(); |
- } else { |
- this.setState_(SpeechState.READY); |
- } |
- }; |
- |
- /** |
- * Toggles the current state of speech recognition. |
- */ |
- SpeechManager.prototype.toggleSpeechRecognition = function() { |
- if (this.state == SpeechState.NETWORK_ERROR) { |
- if (this.errorTimeoutId_) |
- window.clearTimeout(this.errorTimeoutId_); |
- this.onSpeechRecognitionErrorTimeout_(); |
- } else if (this.state == SpeechState.RECOGNIZING || |
- this.state == SpeechState.IN_SPEECH) { |
- this.audioManager_.stop(); |
- this.speechRecognitionManager_.stop(); |
- } else { |
- if (this.pluginManager_) |
- this.pluginManager_.stopRecognizer(); |
- if (this.audioManager_.state == speech.AudioState.STOPPED) |
- this.audioManager_.start(); |
- this.speechRecognitionManager_.start(); |
- } |
- }; |
- |
- return { |
- SpeechManager: SpeechManager |
- }; |
-}); |