@minto-ai/huoshan-tts
Version:
借助“火山引擎在线语音合成API”实现浏览器端“文本转语音
43 lines (34 loc) • 1.22 kB
text/typescript
import type { ParallelTaskExecuteContext } from '../../handler'
import { ParallelHandler } from '../../handler'
class DecodeData extends ParallelHandler<Blob, AudioBuffer> {
private audioContext: AudioContext = new AudioContext()
public execute(
context: ParallelTaskExecuteContext<Blob, AudioBuffer>,
): void {
if (context.isLastExecute) {
this.taskCompletedCallback(context.taskItem.uuid)
return
}
const reader = new FileReader()
reader.readAsArrayBuffer(new Blob([context.taskItem.original!]))
reader.onload = (event) => {
const arrayBuffer = event.target?.result as ArrayBuffer
if (!arrayBuffer) {
this.taskCompletedCallback(context.taskItem.uuid)
return
}
this.audioContext.decodeAudioData(arrayBuffer, (audioBuffer) => {
this.forwardToHandler(audioBuffer)
this.taskCompletedCallback(context.taskItem.uuid)
})
}
}
protected onFinish(): void {
if (this.audioContext) {
this.audioContext.suspend()
this.audioContext = new AudioContext()
}
this.executeController?.$bus.emit('_decodeDataFinish')
}
}
export default DecodeData