NovelAI: Fix TTS preview

9a86f8a6bbcb1c93b55ce8669a4374347f8e309a

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

1 files changed, +17 -11Showing whitespace changes
public/scripts/extensions/tts/novel.js+17 -11
@@ -132,9 +132,14 @@ class NovelTtsProvider {
132132 return { name: voiceName, voice_id: voiceName, lang: 'en-US', preview_url: false };
133133 }
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);
138143 }
139144
140145 //###########//
@@ -172,16 +177,17 @@ class NovelTtsProvider {
172177 this.audioElement.currentTime = 0;
173178
174179 const text = getPreviewString('en-US');
175180 for await (const response = awaitof this.fetchTtsGenerationgenerateTts(text, id);) {
176- if (!response.ok) {
177- throw new Error(`HTTP ${response.status}`);
178- }
179-
180181 const audio = await response.blob();
181182 const url = URL.createObjectURL(audio);
182- this.audioElement.src = url;
183+ await new Promise(resolve => {
183- this.audioElement.play();
184+ const audioElement = new Audio();
184- this.audioElement.onended = () => URL.revokeObjectURL(url);
185+ audioElement.src = url;
186+ audioElement.play();
187+ audioElement.onended = () => resolve();
188+ });
189+ URL.revokeObjectURL(url);
190+ }
185191 }
186192
187193 async* fetchTtsGeneration(inputText, voiceId) {