diff --git a/funasr/runtime/python/websocket/ws_client.py b/funasr/runtime/python/websocket/ws_client.py index 8ca5d1d2e..470b3a883 100644 --- a/funasr/runtime/python/websocket/ws_client.py +++ b/funasr/runtime/python/websocket/ws_client.py @@ -255,7 +255,8 @@ if __name__ == '__main__': chunk_size=int((total_len)/args.test_thread_num) remain_wavs=total_len-chunk_size*args.test_thread_num else: - chunk_size=0 + chunk_size=1 + remain_wavs=0 process_list = [] chunk_begin=0 diff --git a/funasr/runtime/websocket/websocketsrv.cpp b/funasr/runtime/websocket/websocketsrv.cpp index 598ad3d91..b81442c97 100644 --- a/funasr/runtime/websocket/websocketsrv.cpp +++ b/funasr/runtime/websocket/websocketsrv.cpp @@ -18,7 +18,8 @@ // feed buffer to asr engine for decoder void WebSocketServer::do_decoder(const std::vector& buffer, - websocketpp::connection_hdl& hdl) { + websocketpp::connection_hdl& hdl, + const nlohmann::json& msg) { try { int num_samples = buffer.size(); // the size of the buf @@ -35,13 +36,8 @@ void WebSocketServer::do_decoder(const std::vector& buffer, nlohmann::json jsonresult; // result json jsonresult["text"] = asr_result; // put result in 'text' jsonresult["mode"] = "offline"; - std::shared_ptr msg_data = nullptr; - auto it_data = data_map.find(hdl); - if (it_data != data_map.end()) { - msg_data = it_data->second; - } - jsonresult["wav_name"] = msg_data->msg["wav_name"]; + jsonresult["wav_name"] = msg["wav_name"]; // send the json to client server_->send(hdl, jsonresult.dump(), websocketpp::frame::opcode::text, @@ -125,6 +121,7 @@ void WebSocketServer::on_message(websocketpp::connection_hdl hdl, if (jsonresult["wav_name"] != nullptr) { msg_data->msg["wav_name"] = jsonresult["wav_name"]; } + if (jsonresult["is_speaking"] == false || jsonresult["is_finished"] == true) { std::cout << "client done" << std::endl; @@ -137,9 +134,10 @@ void WebSocketServer::on_message(websocketpp::connection_hdl hdl, sample_data_p->insert(sample_data_p->end(), padding.data(), padding.data() + padding.size()); // for offline, send all receive data to decoder engine - asio::post(io_decoder_, std::bind(&WebSocketServer::do_decoder, this, - std::move(*(sample_data_p.get())), - std::move(hdl))); + asio::post(io_decoder_, + std::bind(&WebSocketServer::do_decoder, this, + std::move(*(sample_data_p.get())), + std::move(hdl), std::move(msg_data->msg))); } } break; @@ -152,8 +150,9 @@ void WebSocketServer::on_message(websocketpp::connection_hdl hdl, if (isonline) { // if online TODO(zhaoming) still not done std::vector s(pcm_data, pcm_data + num_samples); - asio::post(io_decoder_, std::bind(&WebSocketServer::do_decoder, this, - std::move(s), std::move(hdl))); + asio::post(io_decoder_, + std::bind(&WebSocketServer::do_decoder, this, std::move(s), + std::move(hdl), std::move(msg_data->msg))); } else { // for offline, we add receive data to end of the sample data vector sample_data_p->insert(sample_data_p->end(), pcm_data, diff --git a/funasr/runtime/websocket/websocketsrv.h b/funasr/runtime/websocket/websocketsrv.h index 1899f5714..82d717e89 100644 --- a/funasr/runtime/websocket/websocketsrv.h +++ b/funasr/runtime/websocket/websocketsrv.h @@ -72,7 +72,7 @@ class WebSocketServer { server_->clear_access_channels(websocketpp::log::alevel::all); } void do_decoder(const std::vector& buffer, - websocketpp::connection_hdl& hdl); + websocketpp::connection_hdl& hdl, const nlohmann::json& msg); void initAsr(std::map& model_path, int thread_num); void on_message(websocketpp::connection_hdl hdl, message_ptr msg); @@ -89,7 +89,6 @@ class WebSocketServer { // use map to keep the received samples data from one connection in offline // engine. if for online engline, a data struct is needed(TODO) - std::map, std::owner_less>