Add azure tts
parent
9ec6ee3922
commit
4a37af0795
|
@ -0,0 +1,58 @@
|
|||
const BaseEngine = require('../BaseEngine');
|
||||
const sdk = require("microsoft-cognitiveservices-speech-sdk");
|
||||
const fetch = require('node-fetch');
|
||||
|
||||
module.exports = class AzureTTS extends BaseEngine {
|
||||
constructor() {
|
||||
super("azure", "Microsoft Azure TTS", "wav");
|
||||
this.voices = {};
|
||||
this.populateVoiceList();
|
||||
}
|
||||
|
||||
getDefaultVoice() {
|
||||
return "";
|
||||
}
|
||||
|
||||
getSpeechFile(text, filepath, voice = this.getDefaultVoice(), params = {}) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const speechConfig = sdk.SpeechConfig.fromSubscription(process.env.AZURE_API_KEY, process.env.AZURE_REGION);
|
||||
speechConfig.speechSynthesisOutputFormat = sdk.SpeechSynthesisOutputFormat.Riff24Khz16BitMonoPcm;
|
||||
speechConfig.speechSynthesisVoiceName = this.voices[voice];
|
||||
const audioConfig = sdk.AudioConfig.fromAudioFileOutput(filepath);
|
||||
const synthesizer = new sdk.SpeechSynthesizer(speechConfig, audioConfig);
|
||||
synthesizer.speakTextAsync(
|
||||
text,
|
||||
result => {
|
||||
synthesizer.close();
|
||||
if (result) {
|
||||
// return result as stream
|
||||
resolve(filepath);
|
||||
}
|
||||
},
|
||||
error => {
|
||||
console.log(error);
|
||||
synthesizer.close();
|
||||
reject(error);
|
||||
});
|
||||
})
|
||||
}
|
||||
|
||||
async populateVoiceList() {
|
||||
const opts = {
|
||||
headers: {
|
||||
'Ocp-Apim-Subscription-Key': process.env.AZURE_API_KEY
|
||||
}
|
||||
}
|
||||
const res = await fetch(process.env.AZURE_LIST_ENDPOINT, opts);
|
||||
const json = await res.json();
|
||||
json.forEach((voice) => {
|
||||
if (this.voices[voice.DisplayName]) {
|
||||
if (voice.Name.includes('Neural')) {
|
||||
this.voices[voice.DisplayName] = voice.ShortName;
|
||||
}
|
||||
} else {
|
||||
this.voices[voice.DisplayName] = voice.ShortName;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue