49 lines
1.2 KiB
JavaScript
49 lines
1.2 KiB
JavaScript
let SelectedVoice = '';
|
|
let Encoding = '';
|
|
let counter = 0;
|
|
// wrap in promise
|
|
const speak = (textObject) => new Promise((resolve) => {
|
|
// say.setEncoding(Encoding);
|
|
counter += 1;
|
|
let savePath = '';
|
|
|
|
if (envInfo.env) {
|
|
savePath = path.join(envInfo.path, './sounds/tts/internal_audio_' + counter + '.mp3')
|
|
} else {
|
|
savePath = path.join(__dirname, '../sounds/tts/internal_audio_' + counter + '.mp3')
|
|
}
|
|
|
|
say.export(textObject.filtered, SelectedVoice, 1, savePath, (err) => {
|
|
if (err) {
|
|
console.error(err);
|
|
} else {
|
|
sound.playAudio({ "path": savePath, "message": textObject });
|
|
}
|
|
resolve('finished');
|
|
});
|
|
});
|
|
|
|
// queue system
|
|
class SayQueue {
|
|
constructor() {
|
|
this.messages = [];
|
|
this.status = 0;
|
|
}
|
|
|
|
async shift() {
|
|
this.status = 1;
|
|
while (this.messages.length > 0) {
|
|
await speak(this.messages.shift(), SelectedVoice, 1);
|
|
}
|
|
this.status = 0;
|
|
}
|
|
|
|
add(message, selectedVoice) {
|
|
this.messages.push(message);
|
|
SelectedVoice = selectedVoice;
|
|
if (this.status === 0) { this.shift(); }
|
|
}
|
|
}
|
|
|
|
const sayQueue = new SayQueue();
|
|
module.exports = sayQueue;
|