composite_tts.js revision cedac228d2dd51db4b79ea1e72c7f249408ee061
1// Copyright 2014 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/**
6 * @fileoverview A composite TTS sends allows ChromeVox to use
7 * multiple TTS engines at the same time.
8 *
9 */
10
11goog.provide('cvox.CompositeTts');
12
13goog.require('cvox.TtsInterface');
14
15/**
16 * A Composite Tts
17 * @constructor
18 * @implements {cvox.TtsInterface}
19 */
20cvox.CompositeTts = function() {
21  /**
22   * @type {Array.<cvox.TtsInterface>}
23   * @private
24   */
25  this.ttsEngines_ = [];
26};
27
28
29/**
30 * Adds a TTS engine to the composite TTS
31 * @param {cvox.TtsInterface} tts The TTS to add.
32 * @return {cvox.CompositeTts} this.
33 */
34cvox.CompositeTts.prototype.add = function(tts) {
35  this.ttsEngines_.push(tts);
36  return this;
37};
38
39
40/**
41 * @override
42 */
43cvox.CompositeTts.prototype.speak =
44    function(textString, queueMode, properties) {
45  this.ttsEngines_.forEach(function(engine) {
46    engine.speak(textString, queueMode, properties);
47  });
48};
49
50
51/**
52 * Returns true if any of the TTSes are still speaking.
53 * @override
54 */
55cvox.CompositeTts.prototype.isSpeaking = function() {
56  return this.ttsEngines_.some(function(engine) {
57    return engine.isSpeaking();
58  });
59};
60
61
62/**
63 * @override
64 */
65cvox.CompositeTts.prototype.stop = function() {
66  this.ttsEngines_.forEach(function(engine) {
67    engine.stop();
68  });
69};
70
71
72/**
73 * @override
74 */
75cvox.CompositeTts.prototype.addCapturingEventListener = function(listener) {
76  this.ttsEngines_.forEach(function(engine) {
77    engine.addCapturingEventListener(listener);
78  });
79};
80
81
82/**
83 * @override
84 */
85cvox.CompositeTts.prototype.increaseOrDecreaseProperty =
86    function(propertyName, increase) {
87  this.ttsEngines_.forEach(function(engine) {
88    engine.increaseOrDecreaseProperty(propertyName, increase);
89  });
90};
91
92
93/**
94 * @override
95 */
96cvox.CompositeTts.prototype.getDefaultProperty = function(property) {
97  for (var i = 0, engine; engine = this.ttsEngines_[i]; i++) {
98    var value = engine.getDefaultProperty(property);
99    if (value) {
100      return value;
101    }
102  }
103};
104