diff --git a/funasr/runtime/grpc/paraformer_server.cc b/funasr/runtime/grpc/paraformer_server.cc index 69ce9032f..f2ab4e01d 100644 --- a/funasr/runtime/grpc/paraformer_server.cc +++ b/funasr/runtime/grpc/paraformer_server.cc @@ -88,7 +88,7 @@ grpc::Status ASRServicer::Recognize( res.set_language(req.language()); stream->Write(res); } else if (!req.speaking()) { - if (client_buffers.count(req.user()) == 0) { + if (client_buffers.count(req.user()) == 0 && req.audio_data().size() == 0) { Response res; res.set_sentence( R"({"success": true, "detail": "waiting_for_voice"})" @@ -99,14 +99,18 @@ grpc::Status ASRServicer::Recognize( stream->Write(res); }else { auto begin_time = std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count(); + if (req.audio_data().size() > 0) { + auto& buf = client_buffers[req.user()]; + buf.insert(buf.end(), req.audio_data().begin(), req.audio_data().end()); + } std::string tmp_data = this->client_buffers[req.user()]; this->clear_states(req.user()); - + Response res; res.set_sentence( R"({"success": true, "detail": "decoding data: " + std::to_string(tmp_data.length()) + " bytes"})" ); - int data_len_int = tmp_data.length(); + int data_len_int = tmp_data.length(); std::string data_len = std::to_string(data_len_int); std::stringstream ss; ss << R"({"success": true, "detail": "decoding data: )" << data_len << R"( bytes")" << R"("})"; @@ -129,18 +133,18 @@ grpc::Status ASRServicer::Recognize( res.set_user(req.user()); res.set_action("finish"); res.set_language(req.language()); - - - + + + stream->Write(res); } else { - RPASR_RESULT Result= RapidAsrRecogPCMBuffer(AsrHanlde, tmp_data.c_str(), data_len_int, RASR_NONE, NULL); + RPASR_RESULT Result= RapidAsrRecogPCMBuffer(AsrHanlde, tmp_data.c_str(), data_len_int, RASR_NONE, NULL); std::string asr_result = ((RPASR_RECOG_RESULT*)Result)->msg; auto end_time = std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count(); std::string delay_str = std::to_string(end_time - begin_time); - + std::cout << "user: " << req.user() << " , delay(ms): " << delay_str << ", text: " << asr_result << std::endl; Response res; std::stringstream ss; @@ -150,8 +154,8 @@ grpc::Status ASRServicer::Recognize( res.set_user(req.user()); res.set_action("finish"); res.set_language(req.language()); - - + + stream->Write(res); } } @@ -165,7 +169,7 @@ grpc::Status ASRServicer::Recognize( res.set_language(req.language()); stream->Write(res); } - } + } return Status::OK; }