- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / common / extensions / docs / examples / extensions / ttsdemo / ttsdemo.js
1 /**
2  * Copyright (c) 2012 The Chromium Authors. All rights reserved.
3  * Use of this source code is governed by a BSD-style license that can be
4  * found in the LICENSE file.
5  */
6
7 var text;
8 var ttsStatus;
9 var ttsStatusBox;
10 var lang;
11 var enqueue;
12 var voices;
13 var voiceInfo;
14 var voiceArray;
15 var utteranceIndex = 0;
16
17 function load() {
18   text = document.getElementById('srctext');
19   ttsStatus = document.getElementById('ttsStatus');
20   ttsStatusBox = document.getElementById('ttsStatusBox');
21   lang = document.getElementById('lang');
22   enqueue = document.getElementById('enqueue');
23   voices = document.getElementById('voices');
24   voiceInfo = document.getElementById('voiceInfo');
25
26   chrome.tts.getVoices(function(va) {
27     voiceArray = va;
28     for (var i = 0; i < voiceArray.length; i++) {
29       var opt = document.createElement('option');
30       opt.setAttribute('value', voiceArray[i].voiceName);
31       opt.innerText = voiceArray[i].voiceName;
32       voices.appendChild(opt);
33     }
34   });
35   voices.addEventListener('change', function() {
36     var i = voices.selectedIndex - 1;
37     if (i >= 0) {
38       voiceInfo.innerText = JSON.stringify(voiceArray[i], null, 2);
39     } else {
40       voiceInfo.innerText = '';
41     }
42   }, false);
43 }
44
45 function speak(str, options, highlightText) {
46   if (!options) {
47     options = {};
48   }
49   if (enqueue.value) {
50     options.enqueue = Boolean(enqueue.value);
51   }
52   var voiceIndex = voices.selectedIndex - 1;
53   if (voiceIndex >= 0) {
54     options.voiceName = voiceArray[voiceIndex].voiceName;
55   }
56   var rateValue = Number(rate.value);
57   if (rateValue >= 0.1 && rateValue <= 10.0) {
58     options.rate = rateValue;
59   }
60   var pitchValue = Number(pitch.value);
61   if (pitchValue >= 0.0 && pitchValue <= 2.0) {
62     options.pitch = pitchValue;
63   }
64   var volumeValue = Number(volume.value);
65   if (volumeValue >= 0.0 && volumeValue <= 1.0) {
66     options.volume = volumeValue;
67   }
68   utteranceIndex++;
69   console.log(utteranceIndex + ': ' + JSON.stringify(options));
70   options.onEvent = function(event) {
71     console.log(utteranceIndex + ': ' + JSON.stringify(event));
72     if (highlightText) {
73       text.setSelectionRange(0, event.charIndex);
74     }
75     if (event.type == 'end' ||
76         event.type == 'interrupted' ||
77         event.type == 'cancelled' ||
78         event.type == 'error') {
79       chrome.tts.isSpeaking(function(isSpeaking) {
80         if (!isSpeaking) {
81           ttsStatus.innerHTML = 'Idle';
82           ttsStatusBox.style.background = '#fff';
83         }
84       });
85     }
86   };
87   chrome.tts.speak(
88       str, options, function() {
89     if (chrome.runtime.lastError) {
90       console.log('TTS Error: ' + chrome.runtime.lastError.message);
91     }
92   });
93   ttsStatus.innerHTML = 'Busy';
94   ttsStatusBox.style.background = '#ffc';
95 }
96
97 function stop() {
98   chrome.tts.stop();
99 }
100
101 function speakUserText() {
102   var options = {};
103   if (lang.value) {
104     options.lang = lang.value;
105   }
106   speak(text.value, options, true);
107 }
108
109 document.addEventListener('DOMContentLoaded', load);