generated from tailored/router-template
perf: video tts mix add writer buffer
This commit is contained in:
parent
3ecc9353c7
commit
c7e3fb9129
@ -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);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user