// Copyright (c) 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. function VoiceInput(keyboard) { this.finaResult_ = null; this.recognizing_ = false; this.keyboard_ = keyboard; this.recognition_ = new webkitSpeechRecognition(); this.recognition_.onstart = this.onStartHandler.bind(this); this.recognition_.onresult = this.onResultHandler.bind(this); this.recognition_.onerror = this.onErrorHandler.bind(this); this.recognition_.onend = this.onEndHandler.bind(this); }; VoiceInput.prototype = { /** * Event handler for mouse/touch down events. */ onDown: function() { if (this.recognizing_) { this.recognition_.stop(); return; } this.recognition_.start(); }, /** * Speech recognition started. Change microphone key's icon. */ onStartHandler: function() { this.recognizing_ = true; this.finalResult_ = ''; if (!this.keyboard_.classList.contains('audio')) this.keyboard_.classList.add('audio'); }, /** * Speech recognizer returns a result. * @param{Event} e The SpeechRecognition event that is raised each time * there * are any changes to interim or final results. */ onResultHandler: function(e) { for (var i = e.resultIndex; i < e.results.length; i++) { if (e.results[i].isFinal) this.finalResult_ = e.results[i][0].transcript; } insertText(this.finalResult_); }, /** * Speech recognizer returns an error. * @param{Event} e The SpeechRecognitionError event that is raised each time * there is an error. */ onErrorHandler: function(e) { console.error('error code = ' + e.error); }, /** * Speech recognition ended. Reset microphone key's icon. */ onEndHandler: function() { if (this.keyboard_.classList.contains('audio')) this.keyboard_.classList.remove('audio'); this.recognizing_ = false; } };