diff --git a/funasr/runtime/html5/static/main.js b/funasr/runtime/html5/static/main.js index be57df145..9317778a9 100644 --- a/funasr/runtime/html5/static/main.js +++ b/funasr/runtime/html5/static/main.js @@ -145,7 +145,9 @@ function stop() { isRec = false; info_div.innerHTML="请等候..."; btnStop.disabled = true; - setTimeout(function(){btnStart.disabled = false;info_div.innerHTML="请点击开始";}, 3000 ); + setTimeout(function(){ + console.log("call stop ws!"); + wsconnecter.wsStop();btnStart.disabled = false;info_div.innerHTML="请点击开始";}, 3000 ); rec.stop(function(blob,duration){ console.log(blob); diff --git a/funasr/runtime/html5/static/wsconnecter.js b/funasr/runtime/html5/static/wsconnecter.js index dfa823551..676a94ae5 100644 --- a/funasr/runtime/html5/static/wsconnecter.js +++ b/funasr/runtime/html5/static/wsconnecter.js @@ -28,7 +28,11 @@ function WebSocketConnectMethod( config ) { //定义socket连接方法类 if ( 'WebSocket' in window ) { speechSokt = new WebSocket( Uri ); // 定义socket连接对象 speechSokt.onopen = function(e){onOpen(e);}; // 定义响应函数 - speechSokt.onclose = function(e){onClose(e);}; + speechSokt.onclose = function(e){ + console.log("onclose ws!"); + speechSokt.close(); + onClose(e); + }; speechSokt.onmessage = function(e){onMessage(e);}; speechSokt.onerror = function(e){onError(e);}; return 1; @@ -42,6 +46,7 @@ function WebSocketConnectMethod( config ) { //定义socket连接方法类 // 定义停止与发送函数 this.wsStop = function () { if(speechSokt != undefined) { + console.log("stop ws!"); speechSokt.close(); } }; diff --git a/funasr/runtime/python/websocket/wss_srv_asr.py b/funasr/runtime/python/websocket/wss_srv_asr.py index baaa094b9..661e174de 100644 --- a/funasr/runtime/python/websocket/wss_srv_asr.py +++ b/funasr/runtime/python/websocket/wss_srv_asr.py @@ -62,13 +62,32 @@ inference_pipeline_asr_online = pipeline( update_model='v1.0.4' mode='paraformer_streaming') -print("model loaded") +print("model loaded! only support one client at the same time now!!!!") +async def ws_reset(websocket): + print("ws reset now, total num is ",len(websocket_users)) + websocket.param_dict_asr_online = {"cache": dict()} + websocket.param_dict_vad = {'in_cache': dict(), "is_final": True} + websocket.param_dict_asr_online["is_final"]=True + audio_in=b''.join(np.zeros(int(16000),dtype=np.int16)) + inference_pipeline_vad(audio_in=audio_in, param_dict=websocket.param_dict_vad) + inference_pipeline_asr_online(audio_in=audio_in, param_dict=websocket.param_dict_asr_online) + await websocket.close() + + +async def clear_websocket(): + for websocket in websocket_users: + await ws_reset(websocket) + websocket_users.clear() + + + async def ws_serve(websocket, path): frames = [] frames_asr = [] frames_asr_online = [] global websocket_users + await clear_websocket() websocket_users.add(websocket) websocket.param_dict_asr = {} websocket.param_dict_asr_online = {"cache": dict()} @@ -140,7 +159,8 @@ async def ws_serve(websocket, path): except websockets.ConnectionClosed: - print("ConnectionClosed...", websocket_users) + print("ConnectionClosed...", websocket_users,flush=True) + await ws_reset(websocket) websocket_users.remove(websocket) except websockets.InvalidState: print("InvalidState...")