forked from codex-iter/text-to-speech
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscript.js
127 lines (102 loc) · 3.91 KB
/
script.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
const maxCharacters = 1000;
const url = 'http://api.voicerss.org/';
const apiKey = 'a2257984416a454da117006e5db0e280';
var speed = 0;
var lang = "en-in";
const tooLongError = 'Text exceeds 1000 character maximum.';
const whitespaceError ='Warning:"Text must contain text characters other than empty spaces."';
const buildUrl = (str) => `${url}?key=${apiKey}&src=${str}&f=48khz_16bit_stereo&r=${speed}&hl=${lang}`;
const tooLong = (str) => str.length >= maxCharacters;
const emptyString = (str) => str.split(' ').every(_char => _char === '' || _char === '\n');
const langBtnhi = () => document.getElementById('lang-btn-hi');
const playBtn = () => document.getElementById('play-btn');
const playBtn5x = () => document.getElementById('play-btn-5x');
const playBtnm5x = () => document.getElementById('play-btn-m5x');
const langBtnfr = () => document.getElementById('lang-btn-fr');
const textInput = () => document.getElementById('text-input');
const appContainer = () => document.getElementById('app-container');
const errorContainer = () => document.getElementById('error-message');
const clearErrors = () => errorContainer().innerHTML = '';
const listenerFn = ($event) => {
if ($event.target.value || $event.type === 'paste'){
playBtn().disabled = false;
playBtn5x().disabled = false;
playBtnm5x().disabled = false;
langBtnhi().disabled = false;
langBtnfr().disabled = false;
}
else{
playBtn().disabled = true;
playBtn5x().disabled = true;
playBtnm5x().disabled = true;
langBtnhi().disabled = true;
langBtnfr().disabled = true;
}
};
const displayErrorMsg = (val) => {
var errs = new Array();
if (tooLong(val)) errs.push(tooLongError);
if (emptyString(val)) errs.push(whitespaceError);
errs.forEach(_err => {
const div = document.createElement('div');
div.innerText = _err;
errorContainer().appendChild(div);
});
};
playBtn().addEventListener('click', () => {
clearErrors();
if (!emptyString(textInput().value) && !tooLong(textInput().value)) {
textInput().value = textInput().value.trim();
new Audio(buildUrl(textInput().value)).play();
}
else
displayErrorMsg(textInput().value);
});
playBtn5x().addEventListener('click', () => {
clearErrors();
if (!emptyString(textInput().value) && !tooLong(textInput().value)) {
speed=5;
textInput().value = textInput().value.trim();
new Audio(buildUrl(textInput().value)).play();
}
else
displayErrorMsg(textInput().value);
});
playBtnm5x().addEventListener('click', () => {
clearErrors();
if (!emptyString(textInput().value) && !tooLong(textInput().value)) {
speed=-5;
textInput().value = textInput().value.trim();
new Audio(buildUrl(textInput().value)).play();
}
else
displayErrorMsg(textInput().value);
});
langBtnhi().addEventListener('click', () => {
clearErrors();
if (!emptyString(textInput().value) && !tooLong(textInput().value)) {
lang = "hi-in";
textInput().value = textInput().value.trim();
new Audio(buildUrl(textInput().value)).play();
}
else
displayErrorMsg(textInput().value);
});
langBtnfr().addEventListener('click', () => {
clearErrors();
if (!emptyString(textInput().value) && !tooLong(textInput().value)) {
lang = "fr-fr";
textInput().value = textInput().value.trim();
new Audio(buildUrl(textInput().value)).play();
}
else
displayErrorMsg(textInput().value);
});
document.addEventListener('DOMContentLoaded', () => {
const containerHeight = appContainer().clientHeight;
const docHeight = window.innerHeight;
appContainer().style.marginTop = `${docHeight/2 - containerHeight/2 - 25}px`;
textInput().addEventListener('keyup', listenerFn);
textInput().addEventListener('paste', listenerFn);
}
);