NovelAI: Fix TTS preview

9a86f8a6bbcb1c93b55ce8669a4374347f8e309a

Cohee <18619528+Cohee1207@users.noreply.github.com>

1 files changed, +18 -12Ignore whitespace
public/scripts/extensions/tts/novel.js+18 -12
@@ -132,9 +132,14 @@ class NovelTtsProvider {
132 return { name: voiceName, voice_id: voiceName, lang: 'en-US', preview_url: false };132 return { name: voiceName, voice_id: voiceName, lang: 'en-US', preview_url: false };
133 }133 }
134134
135 async generateTts(text, voiceId) {135 /**
136 const response = await this.fetchTtsGeneration(text, voiceId);136 * Generate TTS audio for the given text using the specified voice.
137 return response;137 * @param {string} text Text to generate
138 * @param {string} voiceId Voice ID
139 * @returns {AsyncGenerator<Response>} Audio response generator
140 */
141 generateTts(text, voiceId) {
142 return this.fetchTtsGeneration(text, voiceId);
138 }143 }
139144
140 //###########//145 //###########//
@@ -172,16 +177,17 @@ class NovelTtsProvider {
172 this.audioElement.currentTime = 0;177 this.audioElement.currentTime = 0;
173178
174 const text = getPreviewString('en-US');179 const text = getPreviewString('en-US');
175 const response = await this.fetchTtsGeneration(text, id);180 for await (const response of this.generateTts(text, id)) {
176 if (!response.ok) {181 const audio = await response.blob();
177 throw new Error(`HTTP ${response.status}`);182 const url = URL.createObjectURL(audio);
183 await new Promise(resolve => {
184 const audioElement = new Audio();
185 audioElement.src = url;
186 audioElement.play();
187 audioElement.onended = () => resolve();
188 });
189 URL.revokeObjectURL(url);
178 }190 }
179
180 const audio = await response.blob();
181 const url = URL.createObjectURL(audio);
182 this.audioElement.src = url;
183 this.audioElement.play();
184 this.audioElement.onended = () => URL.revokeObjectURL(url);
185 }191 }
186192
187 async* fetchTtsGeneration(inputText, voiceId) {193 async* fetchTtsGeneration(inputText, voiceId) {