perf: video tts mix add writer buffer

This commit is contained in:
熊潇 2025-04-23 16:31:36 +08:00
parent 3ecc9353c7
commit c7e3fb9129

View File

@ -406,12 +406,14 @@ type TTSWriteType = {
data?: Buffer;
isBegin?: boolean;
isEnd?: boolean;
index?: number;
};
export class TtsMix {
appId: string;
token: string;
emitter: EventEmitter;
constructor(appId: string, token: string) {
this.appId = appId;
this.token = token;
@ -427,10 +429,53 @@ export class TtsMix {
async getVoiceDemo(speaker: string, text: string, outputPath: string): Promise<void> {
return runDemo(this.appId, this.token, speaker, text, outputPath, this.emitter);
}
/**
*
* @param callback
* @returns
*/
onWriteFile(callback: (data: TTSWriteType) => void) {
this.emitter.on('writeFile', callback);
return () => {
this.emitter.off?.('writeFile', callback);
};
}
/**
*
* @TIPS
* @param callback
* @returns
*/
onWriteFileBuffer(callback: (data: TTSWriteType) => void, opts?: { chunkSize?: number }) {
let index = 0;
let sendBuffer: Buffer = Buffer.alloc(0);
let chunkSize = opts?.chunkSize || 1024 * 50; // 50kb
const callbackBuff = (data: TTSWriteType) => {
index++;
if (data.isBegin) {
callback(data);
return;
}
const { data: videoBuffer } = data;
const sendValue = {
...data,
index,
};
sendBuffer = Buffer.concat([sendBuffer, videoBuffer]);
const sendBufferLenght = Buffer.byteLength(sendBuffer);
if (sendBufferLenght > chunkSize) {
sendValue.data = sendBuffer;
callback(sendValue);
sendBuffer = Buffer.alloc(0);
} else if (data.isEnd) {
sendValue.data = sendBuffer;
callback(sendValue);
sendBuffer = Buffer.alloc(0);
}
};
this.emitter.on('writeFile', callbackBuff);
return () => {
this.emitter.off?.('writeFile', callbackBuff);
};
}
}