· 4 years ago · May 12, 2021, 06:50 PM
1export default function voiceRSS(audioElement) {
2 ('use strict');
3 const VoiceRSS = {
4 speech: function (e) {
5 this._validate(e), this._request(e);
6 },
7 _validate: function (e) {
8 if (!e) throw 'The settings are undefined';
9 if (!e.key) throw 'The API key is undefined';
10 if (!e.src) throw 'The text is undefined';
11 if (!e.hl) throw 'The language is undefined';
12 if (e.c && 'auto' != e.c.toLowerCase()) {
13 var a = !1;
14 switch (e.c.toLowerCase()) {
15 case 'mp3':
16 a = new Audio().canPlayType('audio/mpeg').replace('no', '');
17 break;
18 case 'wav':
19 a = new Audio().canPlayType('audio/wav').replace('no', '');
20 break;
21 case 'aac':
22 a = new Audio().canPlayType('audio/aac').replace('no', '');
23 break;
24 case 'ogg':
25 a = new Audio().canPlayType('audio/ogg').replace('no', '');
26 break;
27 case 'caf':
28 a = new Audio().canPlayType('audio/x-caf').replace('no', '');
29 }
30 if (!a) throw 'The browser does not support the audio codec ' + e.c;
31 }
32 },
33 _request: function (e) {
34 var a = this._buildRequest(e),
35 t = this._getXHR();
36 (t.onreadystatechange = function () {
37 if (4 == t.readyState && 200 == t.status) {
38 if (0 == t.responseText.indexOf('ERROR')) throw t.responseText;
39 // new Audio(t.responseText).play();
40 audioElement.src = t.responseText;
41 audioElement.play();
42 }
43 }),
44 t.open('POST', 'https://api.voicerss.org/', !0),
45 t.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'),
46 t.send(a);
47 },
48 _buildRequest: function (e) {
49 var a = e.c && 'auto' != e.c.toLowerCase() ? e.c : this._detectCodec();
50 return (
51 'key=' +
52 (e.key || '') +
53 '&src=' +
54 (e.src || '') +
55 '&hl=' +
56 (e.hl || '') +
57 '&v=' +
58 (e.v || '') +
59 '&r=' +
60 (e.r || '') +
61 '&c=' +
62 (a || '') +
63 '&f=' +
64 (e.f || '') +
65 '&ssml=' +
66 (e.ssml || '') +
67 '&b64=true'
68 );
69 },
70 _detectCodec: function () {
71 var e = new Audio();
72 return e.canPlayType('audio/mpeg').replace('no', '')
73 ? 'mp3'
74 : e.canPlayType('audio/wav').replace('no', '')
75 ? 'wav'
76 : e.canPlayType('audio/aac').replace('no', '')
77 ? 'aac'
78 : e.canPlayType('audio/ogg').replace('no', '')
79 ? 'ogg'
80 : e.canPlayType('audio/x-caf').replace('no', '')
81 ? 'caf'
82 : '';
83 },
84 _getXHR: function () {
85 try {
86 return new XMLHttpRequest();
87 } catch (e) {}
88 try {
89 return new ActiveXObject('Msxml3.XMLHTTP');
90 } catch (e) {}
91 try {
92 return new ActiveXObject('Msxml2.XMLHTTP.6.0');
93 } catch (e) {}
94 try {
95 return new ActiveXObject('Msxml2.XMLHTTP.3.0');
96 } catch (e) {}
97 try {
98 return new ActiveXObject('Msxml2.XMLHTTP');
99 } catch (e) {}
100 try {
101 return new ActiveXObject('Microsoft.XMLHTTP');
102 } catch (e) {}
103 throw 'The browser does not support HTTP request';
104 },
105 };
106 return VoiceRSS;
107}
108