-
Notifications
You must be signed in to change notification settings - Fork 2
/
tts.js
53 lines (48 loc) · 1.58 KB
/
tts.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
import proc from 'child_process';
export default {
/**
* Invoke a Text to speech in powershell
*
* @class PS_TTS_Invoke
* @scope private - Do not use it directly, use say or saySSML
* @param string commands The commands (automatically generated)
* @param string text Text given by client
*/
PS_TTS_Invoke: function(commands,text) {
const options = { shell: true };
let childD = proc.spawn('powershell', commands, options);
childD.stdin.setEncoding('ascii');
childD.stderr.setEncoding('ascii');
childD.stdin.end(text);
childD.stderr.once('data', function(data) {
// we can't stop execution from this function
console.log(new Error(data));
});
childD.addListener('exit', function (code, signal) {
if (code === null || signal !== null) {
return console.log(new Error('Could not talk, had an error [code: ' + code + '] [signal: ' + signal + ']'));
}
childD = null;
});
},
/**
* Ask to say a text by TTS
*
* @param string text The text needs to be spoken (raw text only)
*/
say: function(text) {
this.PS_TTS_Invoke(
[ 'Add-Type -AssemblyName System.speech; $speak = New-Object System.Speech.Synthesis.SpeechSynthesizer; $speak.Speak([Console]::In.ReadToEnd())' ],
text);
},
/**
* Ask to say a text by TTS
*
* @param string text The text needs to be spoken (SSML only)
*/
saySSML: function(text) {
this.PS_TTS_Invoke(
[ 'Add-Type -AssemblyName System.speech; $speak = New-Object System.Speech.Synthesis.SpeechSynthesizer; $speak.SpeakSsml([Console]::In.ReadToEnd())' ],
text);
}
};