Home | History | Annotate | Download | only in resources
      1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 function VoiceInput(keyboard) {
      6   this.finaResult_ = null;
      7   this.recognizing_ = false;
      8   this.keyboard_ = keyboard;
      9   this.recognition_ = new webkitSpeechRecognition();
     10   this.recognition_.onstart = this.onStartHandler.bind(this);
     11   this.recognition_.onresult = this.onResultHandler.bind(this);
     12   this.recognition_.onerror = this.onErrorHandler.bind(this);
     13   this.recognition_.onend = this.onEndHandler.bind(this);
     14 };
     15 
     16 VoiceInput.prototype = {
     17   /**
     18    * Event handler for mouse/touch down events.
     19    */
     20   onDown: function() {
     21     if (this.recognizing_) {
     22       this.recognition_.stop();
     23       return;
     24     }
     25     this.recognition_.start();
     26   },
     27 
     28   /**
     29    * Speech recognition started. Change microphone key's icon.
     30    */
     31   onStartHandler: function() {
     32     this.recognizing_ = true;
     33     this.finalResult_ = '';
     34     if (!this.keyboard_.classList.contains('audio'))
     35       this.keyboard_.classList.add('audio');
     36   },
     37 
     38   /**
     39    * Speech recognizer returns a result.
     40    * @param{Event} e The SpeechRecognition event that is raised each time
     41    *     there
     42    *     are any changes to interim or final results.
     43    */
     44   onResultHandler: function(e) {
     45     for (var i = e.resultIndex; i < e.results.length; i++) {
     46       if (e.results[i].isFinal)
     47         this.finalResult_ = e.results[i][0].transcript;
     48     }
     49     insertText(this.finalResult_);
     50   },
     51 
     52   /**
     53    * Speech recognizer returns an error.
     54    * @param{Event} e The SpeechRecognitionError event that is raised each time
     55    *     there is an error.
     56    */
     57   onErrorHandler: function(e) {
     58     console.error('error code = ' + e.error);
     59   },
     60 
     61   /**
     62    * Speech recognition ended. Reset microphone key's icon.
     63    */
     64   onEndHandler: function() {
     65     if (this.keyboard_.classList.contains('audio'))
     66       this.keyboard_.classList.remove('audio');
     67     this.recognizing_ = false;
     68   }
     69 };
     70