/** * Copyright FunASR (https://github.com/alibaba-damo-academy/FunASR). All Rights * Reserved. MIT License (https://opensource.org/licenses/MIT) */ /* 2023 by burkliu(刘柏基) liubaiji@xverse.cn */ #include #include #include #include #include "grpcpp/server_builder.h" #include "paraformer.grpc.pb.h" #include "funasrruntime.h" #include "tclap/CmdLine.h" #include "com-define.h" #include "glog/logging.h" using paraformer::WavFormat; using paraformer::DecodeMode; using paraformer::Request; using paraformer::Response; using paraformer::ASR; typedef struct { std::string msg; float snippet_time; } FUNASR_RECOG_RESULT; class GrpcEngine { public: GrpcEngine(grpc::ServerReaderWriter* stream, std::shared_ptr asr_handler); void operator()(); private: void DecodeThreadFunc(); void OnSpeechStart(); void OnSpeechData(); void OnSpeechEnd(); grpc::ServerReaderWriter* stream_; std::shared_ptr request_; std::shared_ptr response_; std::shared_ptr asr_handler_; std::string audio_buffer_; std::shared_ptr decode_thread_ = nullptr; bool is_start_ = false; bool is_end_ = false; std::vector chunk_size_ = {5, 10, 5}; int sampling_rate_ = 16000; std::string encoding_; ASR_TYPE mode_ = ASR_TWO_PASS; int step_duration_ms_ = 100; std::unique_ptr p_mutex_= std::make_unique(); // mutex is not moveable }; class GrpcService final : public ASR::Service { public: GrpcService(std::map& config, int num_thread); grpc::Status Recognize(grpc::ServerContext* context, grpc::ServerReaderWriter* stream); private: std::map config_; std::shared_ptr asr_handler_; };