From 86f2c67784499a9c676b475dc7bc8c6c35c3514c Mon Sep 17 00:00:00 2001 From: EvanWu <850123119@qq.com> Date: Tue, 5 Aug 2025 18:35:02 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96CR=20=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=EF=BC=8C=E4=BC=98=E5=8C=96=E9=9F=B3=E9=A2=91=E4=B8=8A?= =?UTF-8?q?=E4=B8=8B=E6=96=87=E7=AE=A1=E7=90=86=EF=BC=8C=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=20PCM=20=E6=95=B0=E6=8D=AE=E8=BD=AC=E6=8D=A2=E9=80=BB=E8=BE=91?= =?UTF-8?q?=EF=BC=8C=E7=A1=AE=E4=BF=9D=E6=88=90=E5=8A=9F=E8=BF=9E=E6=8E=A5?= =?UTF-8?q?=E6=97=B6=E6=B8=85=E9=99=A4=E8=B6=85=E6=97=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/client/platforms/alibaba.ts | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/app/client/platforms/alibaba.ts b/app/client/platforms/alibaba.ts index ce88f6d53..4d2ca6232 100644 --- a/app/client/platforms/alibaba.ts +++ b/app/client/platforms/alibaba.ts @@ -67,7 +67,7 @@ interface RequestPayload { } export class QwenApi implements LLMApi { - private audioContext?: AudioContext; + private static audioContext: AudioContext | null = null; path(path: string): string { const accessStore = useAccessStore.getState(); @@ -133,6 +133,7 @@ export class QwenApi implements LLMApi { ); const res = await fetch(speechPath, speechPayload); + clearTimeout(requestTimeoutId); // Clear timeout on successful connection const reader = res.body!.getReader(); const decoder = new TextDecoder(); @@ -150,13 +151,12 @@ export class QwenApi implements LLMApi { if (line.startsWith("data:")) { const data = line.slice(5); const json = JSON.parse(data); - if (json.output.audio.data) { + if (json.output?.audio?.data) { yield this.PCMBase64ToAudioBuffer(json.output.audio.data); } } } } - clearTimeout(requestTimeoutId); reader.releaseLock(); } catch (e) { console.log("[Request] failed to make a speech request", e); @@ -371,13 +371,17 @@ export class QwenApi implements LLMApi { } } - // 将 PCM 字节数据转换为 AudioBuffer - private convertToAudioBuffer(pcmData: Uint8Array) { - if (!this.audioContext) { - this.audioContext = new (window.AudioContext || + private static getAudioContext(): AudioContext { + if (!QwenApi.audioContext) { + QwenApi.audioContext = new (window.AudioContext || window.webkitAudioContext)(); } - const audioContext = this.audioContext; + return QwenApi.audioContext; + } + + // 将 PCM 字节数据转换为 AudioBuffer + private convertToAudioBuffer(pcmData: Uint8Array) { + const audioContext = QwenApi.getAudioContext(); const channels = 1; const sampleRate = 24000; return new Promise((resolve, reject) => {