47 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| const BaseEngine = require('../BaseEngine');
 | |
| const fetch = require('node-fetch');
 | |
| const querystring = require('querystring');
 | |
| const fs = require("fs");
 | |
| 
 | |
| module.exports = class extends BaseEngine {
 | |
|     constructor() {
 | |
|         super('unreal', "Unreal Speech TTS", "mp3");
 | |
|         this.voices = {
 | |
|             scarlett: 'Scarlett',
 | |
|             liv: 'Liv',
 | |
|             dan: 'Dan',
 | |
|             will: 'Will',
 | |
|             amy: 'Amy'
 | |
|         };
 | |
|     }
 | |
| 
 | |
|     getDefaultVoice() {
 | |
|         return 'Liv';
 | |
|     }
 | |
| 
 | |
|     async getSpeechFile(text, filepath, voice = this.getDefaultVoice(), params = {}) {
 | |
|         const url = "https://api.v6.unrealspeech.com/speech";
 | |
|         const authorization = process.env.UNREAL_API_KEY;
 | |
|         const opts = {
 | |
|             method: "post",
 | |
|             headers: {
 | |
|                 'Content-Type': 'application/json',
 | |
|                 'Authorization': `Bearer ${authorization}`
 | |
|             },
 | |
|             body: JSON.stringify({
 | |
|                 Bitrate: "320k",
 | |
|                 Temperature: 0.1,
 | |
|                 VoiceId: this.getInternalVoiceName(voice),
 | |
|                 Text: text,
 | |
|                 AudioFormat: "mp3"
 | |
|             })
 | |
|         };
 | |
|         const res = await fetch(url, opts);
 | |
|         const json = await res.json();
 | |
|         const data = await fetch(json.OutputUri);
 | |
|         const contents = await data.arrayBuffer();
 | |
|         const buf = Buffer.from(contents);
 | |
|         fs.writeFileSync(filepath, buf);
 | |
|         return filepath;
 | |
|     }
 | |
| }; |