forked from Talon/tardis-bot
		
	Move azure back where it belongs
This commit is contained in:
		
							
								
								
									
										58
									
								
								tts/azure/index.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								tts/azure/index.js
									
									
									
									
									
										Normal file
									
								
							| @@ -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; | ||||
|             } | ||||
|         }); | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user