This commit is contained in:
2025-10-13 22:13:19 +08:00
parent 78cc6dcf55
commit 5603d09e80
10 changed files with 73 additions and 1265 deletions

View File

@@ -1,5 +1,5 @@
import * as zlib from 'zlib';
import { promisify } from 'util';
import * as zlib from 'node:zlib';
import { promisify } from 'node:util';
import { nanoid } from 'nanoid';
import { VolcEngineBase, uuid } from './base.ts';
@@ -61,6 +61,39 @@ function generateBeforePayload(sequence: number): Buffer {
return beforePayload;
}
export type ParsedMessage = {
isLastPackage: boolean;
payloadSequence?: number;
payloadMsg?: {
audio_info?: {
duration: number;
};
result?: {
additions?: {
log_id?: string;
};
text?: string;
utterances?: Array<{
additions?: {
fixed_prefix_result?: string;
};
definite?: boolean;
end_time?: number;
start_time?: number;
text?: string;
words?: Array<{
end_time: number;
start_time: number;
text: string;
}>;
}>;
};
error?: any;
};
payloadSize?: number;
code?: number;
seq?: number;
};
/**
* Parse response from the WebSocket server
*/
@@ -393,10 +426,11 @@ export class AsrWsClient extends VolcEngineBase {
// Wait for response
await sendVoice(audioData, segmentSize);
}
async onMessage(event: MessageEvent) {
try {
const parsed = parseResponse(Buffer.from(event.data as ArrayBuffer));
console.log(`Seq ${parsed.payloadSequence} response:`, parsed);
// console.log(`Seq ${parsed.payloadSequence} response:`, parsed);
if (typeof event.data === 'string') {
throw new Error('event.data is string: ' + event.data);
}
@@ -405,10 +439,9 @@ export class AsrWsClient extends VolcEngineBase {
this.emitter.emit('error', parsed);
this.isError = true;
}
this.emitter.emit('message', parsed);
if (parsed.isLastPackage) {
this.emitter.emit('end', parsed);
} else {
this.emitter.emit('message', parsed);
}
} catch (error) {
console.error('Error processing response:', error);
@@ -440,6 +473,14 @@ export class AsrWsClient extends VolcEngineBase {
throw error;
}
}
async setIsEnd(isEnd: boolean) {
super.setIsEnd(isEnd);
if (isEnd) {
// 发送空白包
const emptyBuffer = Buffer.alloc(10000);
this.sendVoiceStream(emptyBuffer);
}
}
/**
* 发送语音流, 最小10000
* @param data