UNPKG

@minto-ai/huoshan-tts

Version:

借助“火山引擎在线语音合成API”实现浏览器端“文本转语音

59 lines (52 loc) 1.74 kB
import type { ParallelTaskExecuteContext } from '../../handler' import { ParallelHandler } from '../../handler' class DecodeData extends ParallelHandler<string, AudioBuffer> { private audioContext: AudioContext = new AudioContext() /** * 执行音频解码任务 * @param context - 并行任务执行上下文 */ public execute( context: ParallelTaskExecuteContext<string, AudioBuffer>, ): void { if (context.isLastExecute) { this.taskCompletedCallback(context.taskItem.uuid) return } if (!context.taskItem.original) { this.taskCompletedCallback(context.taskItem.uuid) return } fetch(context.taskItem.original) .then((response) => { return response.arrayBuffer() }) .then((arrayBuffer) => { this.audioContext.decodeAudioData( arrayBuffer, (audioData) => { this.forwardToHandler(audioData) this.taskCompletedCallback(context.taskItem.uuid) }, (error) => { console.error('音频解码失败:', error) this.executeController?.$bus.emit('_appError', error) this.taskCompletedCallback(context.taskItem.uuid) }, ) }) .catch((error) => { console.error('获取音频数据失败:', error) this.executeController?.$bus.emit('_appError', error) this.taskCompletedCallback(context.taskItem.uuid) }) } protected onFinish(): void { if (this.audioContext) { this.audioContext.suspend() this.audioContext.close() } this.executeController?.$bus.emit('_decodeDataFinish') } } export default DecodeData