138 lines
3.8 KiB
JavaScript
138 lines
3.8 KiB
JavaScript
/* global ttsAudioFile, main, path, getLanguageProperties, resourcesPath, settings, fs, notificationSound, backend, socket, requestData */
|
|
|
|
const voiceSoundArray = [];
|
|
let status = 0;
|
|
const counter = 0;
|
|
|
|
const playTTS = data =>
|
|
new Promise(resolve => {
|
|
ttsAudioFile = path.join(
|
|
resourcesPath,
|
|
main.isPackaged ? `./sounds/${data.service}_${data.count}.mp3` : `../sounds/${data.service}_${data.count}.mp3`
|
|
);
|
|
const tts = new Audio(ttsAudioFile);
|
|
tts.setSinkId(settings.AUDIO.TTS_AUDIO_DEVICE);
|
|
|
|
tts.addEventListener('ended', () => {
|
|
// console.log('ended');
|
|
fs.unlink(ttsAudioFile, err => {
|
|
if (err) {
|
|
console.error(err);
|
|
resolve('finished');
|
|
return;
|
|
}
|
|
resolve('finished');
|
|
});
|
|
});
|
|
|
|
tts
|
|
.setSinkId(settings.AUDIO.TTS_AUDIO_DEVICE)
|
|
.then(() => {
|
|
// console.log('playing');
|
|
tts.volume = settings.AUDIO.TTS_VOLUME / 100;
|
|
tts.play().catch(error => {
|
|
if (error) {
|
|
console.error(error);
|
|
}
|
|
resolve('finished');
|
|
});
|
|
})
|
|
.catch(error => {
|
|
console.error('Failed to set audio output device:', error);
|
|
resolve('finished');
|
|
});
|
|
});
|
|
|
|
async function shiftVoice() {
|
|
status = 1;
|
|
while (voiceSoundArray.length > 0) {
|
|
await playTTS(voiceSoundArray.shift());
|
|
}
|
|
status = 0;
|
|
}
|
|
|
|
function add(data) {
|
|
voiceSoundArray.push(data);
|
|
if (status === 0) {
|
|
shiftVoice();
|
|
}
|
|
}
|
|
|
|
function playNotificationSound() {
|
|
if (settings.AUDIO.USE_NOTIFICATION_SOUNDS) {
|
|
const notfication = new Audio(
|
|
path.join(
|
|
resourcesPath,
|
|
main.isPackaged
|
|
? `./sounds/notifications/${notificationSound.options[settings.AUDIO.NOTIFICATION_SOUND].text}`
|
|
: `../sounds/notifications/${notificationSound.options[settings.AUDIO.NOTIFICATION_SOUND].text}`
|
|
)
|
|
);
|
|
|
|
notfication
|
|
.setSinkId(settings.AUDIO.SELECTED_NOTIFICATION_AUDIO_DEVICE)
|
|
.then(() => {
|
|
// console.log('playing');
|
|
notfication.volume = settings.AUDIO.NOTIFICATION_VOLUME / 100;
|
|
notfication.play().catch(error => {
|
|
if (error) {
|
|
console.error(error);
|
|
}
|
|
});
|
|
})
|
|
.catch(error => {
|
|
console.error('Failed to set audio output device:', error);
|
|
});
|
|
}
|
|
}
|
|
|
|
// Play sound function
|
|
function playAudio(data) {
|
|
if (data.service !== '') {
|
|
add(data);
|
|
}
|
|
}
|
|
|
|
async function playVoice(message) {
|
|
if (!settings.TTS.PRIMARY_VOICE) {
|
|
return;
|
|
}
|
|
const textObject = { filtered: message.filteredMessage, formatted: message.formattedMessage };
|
|
let voice = settings.TTS.PRIMARY_VOICE;
|
|
textObject.filtered = `${message.username}: ${message.filteredMessage}`;
|
|
|
|
if (settings.LANGUAGE.USE_DETECTION && settings.TTS.SECONDARY_VOICE) {
|
|
const secondaryTTSLanguage = getLanguageProperties(settings.TTS.SECONDARY_TTS_LANGUAGE);
|
|
if (message.language.detectedLanguage === null || message.language.detectedLanguage.ISO639 === secondaryTTSLanguage.ISO639) {
|
|
voice = settings.TTS.SECONDARY_VOICE;
|
|
textObject.filtered = message.originalMessage ? message.originalMessage : message.filteredMessage;
|
|
}
|
|
}
|
|
|
|
const service = document.getElementById('primaryTTSService').value;
|
|
|
|
switch (service) {
|
|
case 'Internal': {
|
|
const requestData = {
|
|
message: textObject.filtered,
|
|
voice: voice
|
|
};
|
|
|
|
const count = await backend.getInternalTTSAudio(requestData);
|
|
playAudio({ service, message: textObject, count });
|
|
break;
|
|
}
|
|
case 'Amazon':
|
|
// playAudio({ service: 'Amazon', message: textObject, count });
|
|
break;
|
|
case 'Google':
|
|
// playAudio({ service: 'Google', message: textObject, count });
|
|
break;
|
|
}
|
|
|
|
if (settings.MODULES.USE_CHATBUBBLE) {
|
|
socket.emit('xxx', message);
|
|
}
|
|
}
|
|
|
|
module.exports = { playAudio, playVoice, playNotificationSound };
|