import { getPreviewString, saveTtsProviderSettings } from './index.js'; import { getBase64Async } from '../../utils.js'; import { getRequestHeaders } from '../../../script.js'; export { SpeechT5TtsProvider }; class SpeechT5TtsProvider { //########// // Config // //########// settings; ready = false; voices = []; separator = ' .. '; audioElement = document.createElement('audio'); defaultSettings = { speakers: [], speaker: '', voiceMap: {}, }; get settingsHtml() { let html = `
Loading model for the first time may take a while!
`; return html; } onSettingsChange() { // Used when provider settings are updated from UI this.settings.speaker = $('#speecht5_tts_speaker').val(); saveTtsProviderSettings(); } async previewTtsVoice(voiceId) { this.audioElement.pause(); this.audioElement.currentTime = 0; const text = getPreviewString('en-US'); const response = await this.fetchTtsGeneration(text, voiceId); if (!response.ok) { throw new Error(`HTTP ${response.status}`); } const audio = await response.blob(); const url = URL.createObjectURL(audio); this.audioElement.src = url; this.audioElement.play(); this.audioElement.onended = () => URL.revokeObjectURL(url); } async loadSettings(settings) { // Pupulate Provider UI given input settings if (Object.keys(settings).length == 0) { console.info('Using default TTS Provider settings'); } // Only accept keys defined in defaultSettings this.settings = this.defaultSettings; for (const key in settings) { if (key in this.settings) { this.settings[key] = settings[key]; } else { throw `Invalid setting passed to TTS Provider: ${key}`; } } for (const speaker of this.settings.speakers) { $('#speecht5_tts_speaker').append($('