| | |
| | | jsonresult["timestamp"] = tmp_stamp_msg; |
| | | } |
| | | |
| | | std::string tmp_stamp_sents = FunASRGetStampSents(result); |
| | | if (tmp_stamp_sents != "") { |
| | | LOG(INFO) << "offline stamp_sents : " << tmp_stamp_sents; |
| | | jsonresult["stamp_sents"] = tmp_stamp_sents; |
| | | } |
| | | |
| | | return jsonresult; |
| | | } |
| | | // feed buffer to asr engine for decoder |
| | |
| | | std::string wav_format, |
| | | FUNASR_HANDLE& tpass_online_handle) { |
| | | // lock for each connection |
| | | scoped_lock guard(thread_lock); |
| | | if(!tpass_online_handle){ |
| | | scoped_lock guard(thread_lock); |
| | | LOG(INFO) << "tpass_online_handle is free, return"; |
| | | msg["access_num"]=(int)msg["access_num"]-1; |
| | | return; |
| | |
| | | hotwords_embedding, itn); |
| | | |
| | | } else { |
| | | scoped_lock guard(thread_lock); |
| | | msg["access_num"]=(int)msg["access_num"]-1; |
| | | return; |
| | | } |
| | | } catch (std::exception const& e) { |
| | | scoped_lock guard(thread_lock); |
| | | LOG(ERROR) << e.what(); |
| | | msg["access_num"]=(int)msg["access_num"]-1; |
| | | return; |
| | |
| | | wav_format, (ASR_TYPE)asr_mode_, |
| | | hotwords_embedding, itn); |
| | | } else { |
| | | scoped_lock guard(thread_lock); |
| | | msg["access_num"]=(int)msg["access_num"]-1; |
| | | return; |
| | | } |
| | | } catch (std::exception const& e) { |
| | | scoped_lock guard(thread_lock); |
| | | LOG(ERROR) << e.what(); |
| | | msg["access_num"]=(int)msg["access_num"]-1; |
| | | return; |
| | |
| | | } catch (std::exception const& e) { |
| | | std::cerr << "Error: " << e.what() << std::endl; |
| | | } |
| | | scoped_lock guard(thread_lock); |
| | | msg["access_num"]=(int)msg["access_num"]-1; |
| | | |
| | | } |
| | |
| | | data_msg->msg["wav_name"] = "wav-default-id"; |
| | | data_msg->msg["mode"] = "2pass"; |
| | | data_msg->msg["itn"] = true; |
| | | data_msg->msg["audio_fs"] = 16000; |
| | | data_msg->msg["audio_fs"] = 16000; // default is 16k |
| | | data_msg->msg["access_num"] = 0; // the number of access for this object, when it is 0, we can free it saftly |
| | | data_msg->msg["is_eof"]=false; // if this connection is closed |
| | | data_msg->punc_cache = |
| | |
| | | data_msg->msg["is_eof"]=true; |
| | | guard_decoder.unlock(); |
| | | to_remove.push_back(hdl); |
| | | LOG(INFO)<<"connection is closed: "<<e.what(); |
| | | LOG(INFO)<<"connection is closed."; |
| | | |
| | | } |
| | | iter++; |
| | |
| | | LOG(INFO) << "jsonresult=" << jsonresult |
| | | << ", msg_data->msg=" << msg_data->msg; |
| | | if ((jsonresult["is_speaking"] == false || |
| | | jsonresult["is_finished"] == true) && msg_data->msg["is_eof"] != true) { |
| | | jsonresult["is_finished"] == true) && |
| | | msg_data->msg["is_eof"] != true && |
| | | msg_data->hotwords_embedding != NULL) { |
| | | LOG(INFO) << "client done"; |
| | | |
| | | // if it is in final message, post the sample_data to decode |
| | |
| | | |
| | | try{ |
| | | // post to decode |
| | | if (msg_data->msg["is_eof"] != true) { |
| | | if (msg_data->msg["is_eof"] != true && msg_data->hotwords_embedding != NULL) { |
| | | std::vector<std::vector<float>> hotwords_embedding_(*(msg_data->hotwords_embedding)); |
| | | msg_data->strand_->post( |
| | | msg_data->strand_->post( |
| | | std::bind(&WebSocketServer::do_decoder, this, |
| | | std::move(subvector), std::move(hdl), |
| | | std::ref(msg_data->msg), |