diff --git a/tts/watson/index.js b/tts/watson/index.js index 0188876..c8cad47 100644 --- a/tts/watson/index.js +++ b/tts/watson/index.js @@ -1,25 +1,41 @@ -const BaseEngine=require('../BaseEngine'); +const BaseEngine = require('../BaseEngine'); const fetch = require('node-fetch'); const querystring = require('querystring'); -module.exports= class extends BaseEngine { +module.exports = class extends BaseEngine { constructor() { - super("IBM Watson TTS","ogg"); - this.voices={ - 'Michael': 'en-US_MichaelV3Voice', - 'Allison': 'en-US_AllisonV3Voice', - 'Kevin': 'en-US_KevinV3Voice', + super("IBM Watson TTS", "ogg"); + this.voices = {}; + this.populateVoiceList(); + } + async populateVoiceList() { + const url = process.env.watsonURL + "/v1/voices"; + const authorization = this.IBMAuthString(); + const opts = { + method: "get", + headers: { + 'Authorization': authorization + }, }; + const res = await fetch(url, opts); + const voices = await res.json(); + voices.voices.forEach((i) => { + let voiceName = i.description.substring(0, i.description.indexOf(':')); + this.voices[voiceName] = i.name; + }); } getDefaultVoice() { return 'Michael'; } - async getSpeech(text, voice=this.getSpeechVoice(), params={}) { - const url = process.env.watsonURL+"/v1/synthesize?voice="+this.getInternalVoiceName(voice); - let buff=new Buffer('apikey:'+process.env.watsonAPIKey); - let b64auth=buff.toString('base64'); - const authorization='Basic '+b64auth; - const opts={ + IBMAuthString() { + let buff = new Buffer('apikey:' + process.env.watsonAPIKey); + let b64auth = buff.toString('base64'); + return 'Basic ' + b64auth; + } + async getSpeech(text, voice = this.getSpeechVoice(), params = {}) { + const url = process.env.watsonURL + "/v1/synthesize?voice=" + this.getInternalVoiceName(voice); + const authorization = this.IBMAuthString(); + const opts = { method: "post", headers: { 'Content-Type': 'application/json', @@ -29,6 +45,6 @@ module.exports= class extends BaseEngine { text: text }) }; - return fetch(url,opts); + return fetch(url, opts); } }; \ No newline at end of file