feat: 更新依赖项版本,调整 pnpm-lock.yaml 和 package.json 中的 @kevisual/ha-api 版本,优化 WebSocket 处理逻辑
This commit is contained in:
@@ -3,7 +3,7 @@ import { QwenAsrRelatime } from "@kevisual/video-tools/src/asr/index.ts";
|
||||
import { Listener, WebSocketListenerFun, WebSocketReq } from "@kevisual/router";
|
||||
import { lightHA } from "@/routes/ha-api/ha.ts";
|
||||
|
||||
const func: WebSocketListenerFun = async (req: WebSocketReq<{ asr: QwenAsrRelatime, msgId: string }>, res) => {
|
||||
const func: WebSocketListenerFun = async (req: WebSocketReq<{ asr: QwenAsrRelatime, msgId: string, startTime?: number }>, res) => {
|
||||
const { ws, emitter, id, data } = req;
|
||||
let asr = ws.data.asr;
|
||||
|
||||
@@ -22,7 +22,7 @@ const func: WebSocketListenerFun = async (req: WebSocketReq<{ asr: QwenAsrRelati
|
||||
ws.send(JSON.stringify({ type: 'asr', code: 200, message: 'asr服务已连接', time: Date.now() }));
|
||||
if (!asr) return;
|
||||
asr.emitter.on('message', (message) => {
|
||||
console.log('ASR message', message);
|
||||
// console.log('ASR message', message);
|
||||
});
|
||||
asr.emitter.on('partial', (message) => {
|
||||
// console.log('ASR message', message);
|
||||
@@ -39,6 +39,8 @@ const func: WebSocketListenerFun = async (req: WebSocketReq<{ asr: QwenAsrRelati
|
||||
asr.emitter.on('result', async ({ text, raw }) => {
|
||||
let msgId = ws.data.msgId;
|
||||
ws.data.msgId = Math.random().toString(36).substring(2, 10);
|
||||
const endTime = Date.now();
|
||||
console.log('cost time', ws.data.startTime ? (endTime - ws.data.startTime) : 0);
|
||||
ws.send(JSON.stringify({
|
||||
type: 'result',
|
||||
msgId: msgId,
|
||||
@@ -63,11 +65,12 @@ const func: WebSocketListenerFun = async (req: WebSocketReq<{ asr: QwenAsrRelati
|
||||
if (obj.type) {
|
||||
try {
|
||||
const search = await lightHA.searchLight(obj.appName || '');
|
||||
console.log('searchTime', Date.now() - endTime);
|
||||
if (search.id) {
|
||||
lightHA.toggleLight({ entity_id: search.id, service: obj.type === '打开' ? 'turn_on' : 'turn_off' });
|
||||
await lightHA.runService({ entity_id: search.id, service: obj.type === '打开' ? 'turn_on' : 'turn_off' });
|
||||
} else if (search.hasMore) {
|
||||
const [first] = search.result;
|
||||
lightHA.toggleLight({ entity_id: first.entity_id, service: obj.type === '打开' ? 'turn_on' : 'turn_off' });
|
||||
await lightHA.runService({ entity_id: first.entity_id, service: obj.type === '打开' ? 'turn_on' : 'turn_off' });
|
||||
} else {
|
||||
console.log('未找到对应设备:', obj.appName);
|
||||
}
|
||||
@@ -76,6 +79,7 @@ const func: WebSocketListenerFun = async (req: WebSocketReq<{ asr: QwenAsrRelati
|
||||
console.error('控制失败', e);
|
||||
}
|
||||
}
|
||||
console.log('toogle light time', Date.now() - endTime);
|
||||
});
|
||||
asr.start();
|
||||
}
|
||||
@@ -84,18 +88,26 @@ const func: WebSocketListenerFun = async (req: WebSocketReq<{ asr: QwenAsrRelati
|
||||
}
|
||||
const isConnected = await asr.checkConnected();
|
||||
if (!isConnected) return;
|
||||
console.log('ASR receive data', 'has voice', !!data?.voice);
|
||||
if (data?.type === 'blankVoice') {
|
||||
asr.sendBlank();
|
||||
console.log('ASR receive data', 'blank voice');
|
||||
} else if (data?.voice) {
|
||||
console.log('ASR receive voice', data.voice.slice(0, 30));
|
||||
if (!data?.isRelatime) {
|
||||
console.log('ASR receive data', 'has voice', !!data?.voice);
|
||||
}
|
||||
const isBrowserFormat = data.format === 'float32';
|
||||
const time = data?.time || 0;
|
||||
if (time) {
|
||||
console.log('receiveDelay', Date.now() - time);
|
||||
}
|
||||
let voice: Buffer;
|
||||
if (isBrowserFormat) {
|
||||
voice = await asr.fixBrowerBuffer(data.voice);
|
||||
} else {
|
||||
voice = Buffer.from(data.voice, 'base64');
|
||||
}
|
||||
console.log('sendTime', Date.now());
|
||||
ws.data.startTime = Date.now();
|
||||
asr.sendBuffer(voice);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user