Added Google TTS, lowercase voices so that people don't have to remember ridiculous case

This commit is contained in:
2021-04-10 23:45:02 +02:00
parent 40e50b6546
commit f0c71d75dc
10 changed files with 927 additions and 11 deletions

BIN
tts/.DS_Store vendored

Binary file not shown.

View File

@@ -10,7 +10,7 @@ module.exports = class AzureTTS extends BaseEngine {
}
getDefaultVoice() {
return "";
return "Aria";
}
getSpeechFile(text, filepath, voice = this.getDefaultVoice(), params = {}) {
@@ -48,7 +48,7 @@ module.exports = class AzureTTS extends BaseEngine {
json.forEach((voice) => {
if (this.voices[voice.DisplayName]) {
if (voice.Name.includes('Neural')) {
this.voices[voice.DisplayName] = voice.ShortName;
this.voices[voice.DisplayName.toLowerCase()] = voice.ShortName;
}
} else {
this.voices[voice.DisplayName] = voice.ShortName;

36
tts/google/index.js Normal file
View File

@@ -0,0 +1,36 @@
const BaseEngine = require('../BaseEngine')
const sdk = require('@google-cloud/text-to-speech');
const fs = require('fs');
const util = require('util');
module.exports = class GoogleCloudTTS extends BaseEngine {
constructor() {
super('google', 'Google Cloud TTS', 'wav');
this.client = new sdk.TextToSpeechClient();
this.client.initialize();
this.voices = {};
this.populateVoiceList();
}
async populateVoiceList() {
const [result] = await this.client.listVoices({});
const voiceList = result.voices;
voiceList.forEach((voice) => {
console.log(voice)
this.voices[voice.name.toLowerCase()] = { name: voice.name, lang: voice.languageCodes[0] };
});
}
getDefaultVoice() {
return 'en-US-Wavenet-A';
}
async getSpeechFile(text, filepath, voice = this.getDefaultVoice(), params = {}) {
const request = {
input: { text: text },
voice: { name: this.voices[voice].name, languageCode: this.voices[voice].lang },
audioConfig: { audioEncoding: 'OGG_OPUS', effectsProfileId: ['medium-bluetooth-speaker-class-device'] },
};
let [response] = await this.client.synthesizeSpeech(request);
const writeFile = util.promisify(fs.writeFile);
await writeFile(filepath, response.audioContent, 'binary');
return filepath;
}
}