nlsCppSdk/framework/feature/st/speechTranscriberRequest.cpp (357 lines of code) (raw):

/* * Copyright 2021 Alibaba Group Holding Limited * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "speechTranscriberRequest.h" #include "connectNode.h" #include "iNlsRequestListener.h" #include "nlog.h" #include "speechTranscriberListener.h" #include "speechTranscriberParam.h" #include "utility.h" namespace AlibabaNls { SpeechTranscriberCallback::SpeechTranscriberCallback() { this->_onTaskFailed = NULL; this->_onTranscriptionStarted = NULL; this->_onSentenceBegin = NULL; this->_onTranscriptionResultChanged = NULL; this->_onSentenceEnd = NULL; this->_onTranscriptionCompleted = NULL; this->_onChannelClosed = NULL; this->_onMessage = NULL; } SpeechTranscriberCallback::~SpeechTranscriberCallback() { this->_onTaskFailed = NULL; this->_onTranscriptionStarted = NULL; this->_onSentenceBegin = NULL; this->_onTranscriptionResultChanged = NULL; this->_onSentenceEnd = NULL; this->_onTranscriptionCompleted = NULL; this->_onChannelClosed = NULL; this->_onMessage = NULL; std::map<NlsEvent::EventType, void*>::iterator iter; for (iter = _paramap.begin(); iter != _paramap.end();) { _paramap.erase(iter++); } _paramap.clear(); } void SpeechTranscriberCallback::setOnTaskFailed(NlsCallbackMethod _event, void* para) { // LOG_DEBUG("setOnTaskFailed callback"); this->_onTaskFailed = _event; if (this->_paramap.find(NlsEvent::TaskFailed) != _paramap.end()) { _paramap[NlsEvent::TaskFailed] = para; } else { _paramap.insert(std::make_pair(NlsEvent::TaskFailed, para)); } } void SpeechTranscriberCallback::setOnTranscriptionStarted( NlsCallbackMethod _event, void* para) { // LOG_DEBUG("setOnTranscriptionStarted callback"); this->_onTranscriptionStarted = _event; if (this->_paramap.find(NlsEvent::TranscriptionStarted) != _paramap.end()) { _paramap[NlsEvent::TranscriptionStarted] = para; } else { _paramap.insert(std::make_pair(NlsEvent::TranscriptionStarted, para)); } } void SpeechTranscriberCallback::setOnSentenceBegin(NlsCallbackMethod _event, void* para) { // LOG_DEBUG("setOnSentenceBegin callback"); this->_onSentenceBegin = _event; if (this->_paramap.find(NlsEvent::SentenceBegin) != _paramap.end()) { _paramap[NlsEvent::SentenceBegin] = para; } else { _paramap.insert(std::make_pair(NlsEvent::SentenceBegin, para)); } } void SpeechTranscriberCallback::setOnTranscriptionResultChanged( NlsCallbackMethod _event, void* para) { // LOG_DEBUG("setOnTranscriptionResultChanged callback"); this->_onTranscriptionResultChanged = _event; if (this->_paramap.find(NlsEvent::TranscriptionResultChanged) != _paramap.end()) { _paramap[NlsEvent::TranscriptionResultChanged] = para; } else { _paramap.insert(std::make_pair(NlsEvent::TranscriptionResultChanged, para)); } } void SpeechTranscriberCallback::setOnSentenceEnd(NlsCallbackMethod _event, void* para) { // LOG_DEBUG("setOnSentenceEnd callback"); this->_onSentenceEnd = _event; if (this->_paramap.find(NlsEvent::SentenceEnd) != _paramap.end()) { _paramap[NlsEvent::SentenceEnd] = para; } else { _paramap.insert(std::make_pair(NlsEvent::SentenceEnd, para)); } } void SpeechTranscriberCallback::setOnSentenceSemantics(NlsCallbackMethod _event, void* para) { // LOG_DEBUG("setOnSentenceSemantics callback"); this->_onSentenceSemantics = _event; if (this->_paramap.find(NlsEvent::SentenceSemantics) != _paramap.end()) { _paramap[NlsEvent::SentenceSemantics] = para; } else { _paramap.insert(std::make_pair(NlsEvent::SentenceSemantics, para)); } } void SpeechTranscriberCallback::setOnMessage(NlsCallbackMethod _event, void* para) { this->_onMessage = _event; if (this->_paramap.find(NlsEvent::Message) != _paramap.end()) { _paramap[NlsEvent::Message] = para; } else { _paramap.insert(std::make_pair(NlsEvent::Message, para)); } } void SpeechTranscriberCallback::setOnTranscriptionCompleted( NlsCallbackMethod _event, void* para) { // LOG_DEBUG("setOnTranscriptionCompleted callback"); this->_onTranscriptionCompleted = _event; if (this->_paramap.find(NlsEvent::TranscriptionCompleted) != _paramap.end()) { _paramap[NlsEvent::TranscriptionCompleted] = para; } else { _paramap.insert(std::make_pair(NlsEvent::TranscriptionCompleted, para)); } } void SpeechTranscriberCallback::setOnChannelClosed(NlsCallbackMethod _event, void* para) { // LOG_DEBUG("setOnChannelClosed callback"); this->_onChannelClosed = _event; if (this->_paramap.find(NlsEvent::Close) != _paramap.end()) { _paramap[NlsEvent::Close] = para; } else { _paramap.insert(std::make_pair(NlsEvent::Close, para)); } } SpeechTranscriberRequest::SpeechTranscriberRequest(const char* sdkName, bool isLongConnection) { _callback = new SpeechTranscriberCallback(); // init request param _transcriberParam = new SpeechTranscriberParam(sdkName); _requestParam = _transcriberParam; // init listener _listener = new SpeechTranscriberListener(_callback); // init connect node _node = new ConnectNode(this, _listener, isLongConnection); LOG_INFO("Request(%p) Node(%p) create SpeechTranscriberRequest Done.", this, _node); } SpeechTranscriberRequest::~SpeechTranscriberRequest() { delete _listener; _listener = NULL; delete _callback; _callback = NULL; delete _node; _node = NULL; delete _transcriberParam; _transcriberParam = NULL; _requestParam = NULL; LOG_INFO("Request(%p) destroy SpeechTranscriberRequest Done.", this); } int SpeechTranscriberRequest::start() { return INlsRequest::start(this); } int SpeechTranscriberRequest::control(const char* message, const char* name) { if (name && _transcriberParam) { _transcriberParam->setControlHeaderName(name); } return INlsRequest::stControl(this, message); } int SpeechTranscriberRequest::stop() { return INlsRequest::stop(this); } int SpeechTranscriberRequest::cancel() { return INlsRequest::cancel(this); } int SpeechTranscriberRequest::sendAudio(const uint8_t* data, size_t dataSize, ENCODER_TYPE type) { return INlsRequest::sendAudio(this, data, dataSize, type); } const char* SpeechTranscriberRequest::dumpAllInfo() { return INlsRequest::dumpAllInfo(this); } int SpeechTranscriberRequest::setPayloadParam(const char* value) { INPUT_PARAM_STRING_CHECK(value); INPUT_REQUEST_PARAM_CHECK(_transcriberParam); return _transcriberParam->setPayloadParam(value); } int SpeechTranscriberRequest::setContextParam(const char* value) { INPUT_PARAM_STRING_CHECK(value); INPUT_REQUEST_PARAM_CHECK(_transcriberParam); return _transcriberParam->setContextParam(value); } int SpeechTranscriberRequest::setToken(const char* value) { INPUT_PARAM_STRING_CHECK(value); INPUT_REQUEST_PARAM_CHECK(_transcriberParam); _transcriberParam->setToken(value); return Success; } int SpeechTranscriberRequest::setTokenExpirationTime(uint64_t value) { INPUT_REQUEST_PARAM_CHECK(_transcriberParam); _transcriberParam->setTokenExpirationTime(value); return 0; } int SpeechTranscriberRequest::setUrl(const char* value) { INPUT_PARAM_STRING_CHECK(value); INPUT_REQUEST_PARAM_CHECK(_transcriberParam); _transcriberParam->setUrl(value); return Success; } int SpeechTranscriberRequest::setAppKey(const char* value) { INPUT_PARAM_STRING_CHECK(value); INPUT_REQUEST_PARAM_CHECK(_transcriberParam); _transcriberParam->setAppKey(value); return Success; } int SpeechTranscriberRequest::setFormat(const char* value) { INPUT_PARAM_STRING_CHECK(value); INPUT_REQUEST_PARAM_CHECK(_transcriberParam); _transcriberParam->setFormat(value); return Success; } int SpeechTranscriberRequest::setSampleRate(int value) { INPUT_REQUEST_PARAM_CHECK(_transcriberParam); _transcriberParam->setSampleRate(value); return Success; } int SpeechTranscriberRequest::setIntermediateResult(bool value) { INPUT_REQUEST_PARAM_CHECK(_transcriberParam); _transcriberParam->setIntermediateResult(value); return Success; } int SpeechTranscriberRequest::setPunctuationPrediction(bool value) { INPUT_REQUEST_PARAM_CHECK(_transcriberParam); _transcriberParam->setPunctuationPrediction(value); return Success; } int SpeechTranscriberRequest::setInverseTextNormalization(bool value) { INPUT_REQUEST_PARAM_CHECK(_transcriberParam); _transcriberParam->setTextNormalization(value); return Success; } int SpeechTranscriberRequest::AppendHttpHeaderParam(const char* key, const char* value) { INPUT_REQUEST_PARAM_CHECK(_transcriberParam); return _transcriberParam->AppendHttpHeader(key, value); } int SpeechTranscriberRequest::setSemanticSentenceDetection(bool value) { INPUT_REQUEST_PARAM_CHECK(_transcriberParam); _transcriberParam->setSentenceDetection(value); return Success; } int SpeechTranscriberRequest::setMaxSentenceSilence(int value) { INPUT_REQUEST_PARAM_CHECK(_transcriberParam); return _transcriberParam->setMaxSentenceSilence(value); } int SpeechTranscriberRequest::setCustomizationId(const char* value) { INPUT_PARAM_STRING_CHECK(value); INPUT_REQUEST_PARAM_CHECK(_transcriberParam); return _transcriberParam->setCustomizationId(value); } int SpeechTranscriberRequest::setVocabularyId(const char* value) { INPUT_PARAM_STRING_CHECK(value); INPUT_REQUEST_PARAM_CHECK(_transcriberParam); return _transcriberParam->setVocabularyId(value); } int SpeechTranscriberRequest::setTimeout(int value) { INPUT_REQUEST_PARAM_CHECK(_transcriberParam); _transcriberParam->setTimeout(value); return Success; } int SpeechTranscriberRequest::setEnableRecvTimeout(bool value) { INPUT_REQUEST_PARAM_CHECK(_transcriberParam); _transcriberParam->setEnableRecvTimeout(value); return Success; } int SpeechTranscriberRequest::setRecvTimeout(int value) { INPUT_REQUEST_PARAM_CHECK(_transcriberParam); _transcriberParam->setRecvTimeout(value); return Success; } int SpeechTranscriberRequest::setSendTimeout(int value) { INPUT_REQUEST_PARAM_CHECK(_transcriberParam); _transcriberParam->setSendTimeout(value); return Success; } int SpeechTranscriberRequest::setOutputFormat(const char* value) { INPUT_PARAM_STRING_CHECK(value); INPUT_REQUEST_PARAM_CHECK(_transcriberParam); _transcriberParam->setOutputFormat(value); return Success; } int SpeechTranscriberRequest::setEnableOnMessage(bool enable) { INPUT_REQUEST_PARAM_CHECK(_transcriberParam); _transcriberParam->setEnableOnMessage(enable); return Success; } int SpeechTranscriberRequest::setEnableContinued(bool enable) { #ifdef ENABLE_CONTINUED INPUT_REQUEST_PARAM_CHECK(_transcriberParam); _transcriberParam->setEnableContinued(enable); return Success; #else return -(InvalidRequest); #endif } const char* SpeechTranscriberRequest::getOutputFormat() { if (_transcriberParam == NULL) { LOG_ERROR("Input request param is empty."); return NULL; } return _transcriberParam->getOutputFormat().c_str(); } const char* SpeechTranscriberRequest::getTaskId() { if (_transcriberParam == NULL) { LOG_ERROR("Input request param is empty."); return NULL; } return _transcriberParam->getTaskId().c_str(); } int SpeechTranscriberRequest::setNlpModel(const char* value) { INPUT_PARAM_STRING_CHECK(value); INPUT_REQUEST_PARAM_CHECK(_transcriberParam); return _transcriberParam->setNlpModel(value); } int SpeechTranscriberRequest::setEnableNlp(bool enable) { INPUT_REQUEST_PARAM_CHECK(_transcriberParam); return _transcriberParam->setEnableNlp(enable); } int SpeechTranscriberRequest::setSessionId(const char* value) { INPUT_PARAM_STRING_CHECK(value); INPUT_REQUEST_PARAM_CHECK(_transcriberParam); return _transcriberParam->setSessionId(value); } int SpeechTranscriberRequest::setEnableWords(bool enable) { INPUT_REQUEST_PARAM_CHECK(_transcriberParam); return _transcriberParam->setEnableWords(enable); } int SpeechTranscriberRequest::setEnableIgnoreSentenceTimeout(bool enable) { INPUT_REQUEST_PARAM_CHECK(_transcriberParam); return _transcriberParam->setEnableIgnoreSentenceTimeout(enable); } int SpeechTranscriberRequest::setDisfluency(bool enable) { INPUT_REQUEST_PARAM_CHECK(_transcriberParam); return _transcriberParam->setDisfluency(enable); } int SpeechTranscriberRequest::setSpeechNoiseThreshold(float value) { INPUT_REQUEST_PARAM_CHECK(_transcriberParam); return _transcriberParam->setSpeechNoiseThreshold(value); } void SpeechTranscriberRequest::setOnTaskFailed(NlsCallbackMethod _event, void* para) { _callback->setOnTaskFailed(_event, para); } void SpeechTranscriberRequest::setOnTranscriptionStarted( NlsCallbackMethod _event, void* para) { _callback->setOnTranscriptionStarted(_event, para); } void SpeechTranscriberRequest::setOnSentenceBegin(NlsCallbackMethod _event, void* para) { _callback->setOnSentenceBegin(_event, para); } void SpeechTranscriberRequest::setOnTranscriptionResultChanged( NlsCallbackMethod _event, void* para) { _callback->setOnTranscriptionResultChanged(_event, para); } void SpeechTranscriberRequest::setOnSentenceEnd(NlsCallbackMethod _event, void* para) { _callback->setOnSentenceEnd(_event, para); } void SpeechTranscriberRequest::setOnTranscriptionCompleted( NlsCallbackMethod _event, void* para) { _callback->setOnTranscriptionCompleted(_event, para); } void SpeechTranscriberRequest::setOnChannelClosed(NlsCallbackMethod _event, void* para) { _callback->setOnChannelClosed(_event, para); } void SpeechTranscriberRequest::setOnSentenceSemantics(NlsCallbackMethod _event, void* para) { _callback->setOnSentenceSemantics(_event, para); } void SpeechTranscriberRequest::setOnMessage(NlsCallbackMethod _event, void* para) { _callback->setOnMessage(_event, para); } } // namespace AlibabaNls