nlsCppSdk/framework/feature/sr/speechRecognizerRequest.cpp (290 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 "speechRecognizerRequest.h"
#include "connectNode.h"
#include "iNlsRequestListener.h"
#include "nlog.h"
#include "speechRecognizerListener.h"
#include "speechRecognizerParam.h"
#include "utility.h"
namespace AlibabaNls {
SpeechRecognizerCallback::SpeechRecognizerCallback() {
this->_onTaskFailed = NULL;
this->_onRecognitionStarted = NULL;
this->_onRecognitionCompleted = NULL;
this->_onRecognitionResultChanged = NULL;
this->_onChannelClosed = NULL;
this->_onMessage = NULL;
}
SpeechRecognizerCallback::~SpeechRecognizerCallback() {
this->_onTaskFailed = NULL;
this->_onRecognitionStarted = NULL;
this->_onRecognitionCompleted = NULL;
this->_onRecognitionResultChanged = 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 SpeechRecognizerCallback::setOnTaskFailed(NlsCallbackMethod event,
void* param) {
this->_onTaskFailed = event;
if (this->_paramap.find(NlsEvent::TaskFailed) != _paramap.end()) {
_paramap[NlsEvent::TaskFailed] = param;
} else {
_paramap.insert(std::make_pair(NlsEvent::TaskFailed, param));
}
}
void SpeechRecognizerCallback::setOnRecognitionStarted(NlsCallbackMethod event,
void* param) {
this->_onRecognitionStarted = event;
if (this->_paramap.find(NlsEvent::RecognitionStarted) != _paramap.end()) {
_paramap[NlsEvent::RecognitionStarted] = param;
} else {
_paramap.insert(std::make_pair(NlsEvent::RecognitionStarted, param));
}
}
void SpeechRecognizerCallback::setOnMessage(NlsCallbackMethod event,
void* param) {
this->_onMessage = event;
if (this->_paramap.find(NlsEvent::Message) != _paramap.end()) {
_paramap[NlsEvent::Message] = param;
} else {
_paramap.insert(std::make_pair(NlsEvent::Message, param));
}
}
void SpeechRecognizerCallback::setOnRecognitionCompleted(
NlsCallbackMethod event, void* param) {
this->_onRecognitionCompleted = event;
if (this->_paramap.find(NlsEvent::RecognitionCompleted) != _paramap.end()) {
_paramap[NlsEvent::RecognitionCompleted] = param;
} else {
_paramap.insert(std::make_pair(NlsEvent::RecognitionCompleted, param));
}
}
void SpeechRecognizerCallback::setOnRecognitionResultChanged(
NlsCallbackMethod event, void* param) {
this->_onRecognitionResultChanged = event;
if (this->_paramap.find(NlsEvent::RecognitionResultChanged) !=
_paramap.end()) {
_paramap[NlsEvent::RecognitionResultChanged] = param;
} else {
_paramap.insert(std::make_pair(NlsEvent::RecognitionResultChanged, param));
}
}
void SpeechRecognizerCallback::setOnChannelClosed(NlsCallbackMethod event,
void* param) {
this->_onChannelClosed = event;
if (this->_paramap.find(NlsEvent::Close) != _paramap.end()) {
_paramap[NlsEvent::Close] = param;
} else {
_paramap.insert(std::make_pair(NlsEvent::Close, param));
}
}
SpeechRecognizerRequest::SpeechRecognizerRequest(const char* sdkName,
bool isLongConnection) {
_callback = new SpeechRecognizerCallback();
// init request param
_recognizerParam = new SpeechRecognizerParam(sdkName);
_requestParam = _recognizerParam;
// init listener
_listener = new SpeechRecognizerListener(_callback);
// init connect node
_node = new ConnectNode(this, _listener, isLongConnection);
LOG_INFO("Request(%p) Node(%p) create SpeechRecognizerRequest Done.", this,
_node);
}
SpeechRecognizerRequest::~SpeechRecognizerRequest() {
delete _listener;
_listener = NULL;
delete _callback;
_callback = NULL;
delete _node;
_node = NULL;
delete _recognizerParam;
_recognizerParam = NULL;
_requestParam = NULL;
LOG_INFO("Request(%p) destroy SpeechRecognizerRequest Done.", this);
}
int SpeechRecognizerRequest::start() { return INlsRequest::start(this); }
int SpeechRecognizerRequest::stop() { return INlsRequest::stop(this); }
int SpeechRecognizerRequest::cancel() { return INlsRequest::cancel(this); }
int SpeechRecognizerRequest::sendAudio(const uint8_t* data, size_t dataSize,
ENCODER_TYPE type) {
return INlsRequest::sendAudio(this, data, dataSize, type);
}
const char* SpeechRecognizerRequest::dumpAllInfo() {
return INlsRequest::dumpAllInfo(this);
}
int SpeechRecognizerRequest::setPayloadParam(const char* value) {
INPUT_PARAM_STRING_CHECK(value);
INPUT_REQUEST_PARAM_CHECK(_recognizerParam);
return _recognizerParam->setPayloadParam(value);
}
int SpeechRecognizerRequest::setContextParam(const char* value) {
INPUT_PARAM_STRING_CHECK(value);
INPUT_REQUEST_PARAM_CHECK(_recognizerParam);
return _recognizerParam->setContextParam(value);
}
int SpeechRecognizerRequest::setToken(const char* value) {
INPUT_PARAM_STRING_CHECK(value);
INPUT_REQUEST_PARAM_CHECK(_recognizerParam);
_recognizerParam->setToken(value);
return Success;
}
int SpeechRecognizerRequest::setTokenExpirationTime(uint64_t value) {
INPUT_REQUEST_PARAM_CHECK(_recognizerParam);
_recognizerParam->setTokenExpirationTime(value);
return 0;
}
int SpeechRecognizerRequest::setUrl(const char* value) {
INPUT_PARAM_STRING_CHECK(value);
INPUT_REQUEST_PARAM_CHECK(_recognizerParam);
_recognizerParam->setUrl(value);
return Success;
}
int SpeechRecognizerRequest::setAppKey(const char* value) {
INPUT_PARAM_STRING_CHECK(value);
INPUT_REQUEST_PARAM_CHECK(_recognizerParam);
_recognizerParam->setAppKey(value);
return Success;
}
int SpeechRecognizerRequest::setFormat(const char* value) {
INPUT_PARAM_STRING_CHECK(value);
INPUT_REQUEST_PARAM_CHECK(_recognizerParam);
_recognizerParam->setFormat(value);
return Success;
}
int SpeechRecognizerRequest::setSampleRate(int value) {
INPUT_REQUEST_PARAM_CHECK(_recognizerParam);
_recognizerParam->setSampleRate(value);
return Success;
}
int SpeechRecognizerRequest::setIntermediateResult(bool value) {
INPUT_REQUEST_PARAM_CHECK(_recognizerParam);
_recognizerParam->setIntermediateResult(value);
return Success;
}
int SpeechRecognizerRequest::setPunctuationPrediction(bool value) {
INPUT_REQUEST_PARAM_CHECK(_recognizerParam);
_recognizerParam->setPunctuationPrediction(value);
return Success;
}
int SpeechRecognizerRequest::setInverseTextNormalization(bool value) {
INPUT_REQUEST_PARAM_CHECK(_recognizerParam);
_recognizerParam->setTextNormalization(value);
return Success;
}
int SpeechRecognizerRequest::setEnableVoiceDetection(bool value) {
INPUT_REQUEST_PARAM_CHECK(_recognizerParam);
_recognizerParam->setEnableVoiceDetection(value);
return Success;
}
int SpeechRecognizerRequest::setMaxStartSilence(int value) {
INPUT_REQUEST_PARAM_CHECK(_recognizerParam);
_recognizerParam->setMaxStartSilence(value);
return Success;
}
int SpeechRecognizerRequest::setMaxEndSilence(int value) {
INPUT_REQUEST_PARAM_CHECK(_recognizerParam);
_recognizerParam->setMaxEndSilence(value);
return Success;
}
int SpeechRecognizerRequest::AppendHttpHeaderParam(const char* key,
const char* value) {
INPUT_REQUEST_PARAM_CHECK(_recognizerParam);
return _recognizerParam->AppendHttpHeader(key, value);
}
int SpeechRecognizerRequest::setCustomizationId(const char* value) {
INPUT_PARAM_STRING_CHECK(value);
INPUT_REQUEST_PARAM_CHECK(_recognizerParam);
return _recognizerParam->setCustomizationId(value);
}
int SpeechRecognizerRequest::setVocabularyId(const char* value) {
INPUT_PARAM_STRING_CHECK(value);
INPUT_REQUEST_PARAM_CHECK(_recognizerParam);
return _recognizerParam->setVocabularyId(value);
}
int SpeechRecognizerRequest::setTimeout(int value) {
INPUT_REQUEST_PARAM_CHECK(_recognizerParam);
_recognizerParam->setTimeout(value);
return Success;
}
int SpeechRecognizerRequest::setEnableRecvTimeout(bool value) {
INPUT_REQUEST_PARAM_CHECK(_recognizerParam);
_recognizerParam->setEnableRecvTimeout(value);
return Success;
}
int SpeechRecognizerRequest::setRecvTimeout(int value) {
INPUT_REQUEST_PARAM_CHECK(_recognizerParam);
_recognizerParam->setRecvTimeout(value);
return Success;
}
int SpeechRecognizerRequest::setSendTimeout(int value) {
INPUT_REQUEST_PARAM_CHECK(_recognizerParam);
_recognizerParam->setSendTimeout(value);
return Success;
}
int SpeechRecognizerRequest::setOutputFormat(const char* value) {
INPUT_PARAM_STRING_CHECK(value);
INPUT_REQUEST_PARAM_CHECK(_recognizerParam);
_recognizerParam->setOutputFormat(value);
return Success;
}
int SpeechRecognizerRequest::setEnableOnMessage(bool value) {
INPUT_REQUEST_PARAM_CHECK(_recognizerParam);
_recognizerParam->setEnableOnMessage(value);
return Success;
}
int SpeechRecognizerRequest::setEnableContinued(bool enable) {
#ifdef ENABLE_CONTINUED
INPUT_REQUEST_PARAM_CHECK(_recognizerParam);
_recognizerParam->setEnableContinued(enable);
return Success;
#else
return -(InvalidRequest);
#endif
}
const char* SpeechRecognizerRequest::getOutputFormat() {
if (_recognizerParam == NULL) {
LOG_ERROR("Input request param is empty.");
return NULL;
}
return _recognizerParam->getOutputFormat().c_str();
}
const char* SpeechRecognizerRequest::getTaskId() {
if (_recognizerParam == NULL) {
LOG_ERROR("Input request param is empty.");
return NULL;
}
return _recognizerParam->getTaskId().c_str();
}
int SpeechRecognizerRequest::setAudioAddress(const char* value) {
INPUT_PARAM_STRING_CHECK(value);
INPUT_REQUEST_PARAM_CHECK(_recognizerParam);
_recognizerParam->setAudioAddress(value);
return Success;
}
/* set callback of SpeechRecognizerRequest */
void SpeechRecognizerRequest::setOnTaskFailed(NlsCallbackMethod event,
void* param) {
_callback->setOnTaskFailed(event, param);
}
void SpeechRecognizerRequest::setOnRecognitionStarted(NlsCallbackMethod event,
void* param) {
_callback->setOnRecognitionStarted(event, param);
}
void SpeechRecognizerRequest::setOnRecognitionCompleted(NlsCallbackMethod event,
void* param) {
_callback->setOnRecognitionCompleted(event, param);
}
void SpeechRecognizerRequest::setOnRecognitionResultChanged(
NlsCallbackMethod event, void* param) {
_callback->setOnRecognitionResultChanged(event, param);
}
void SpeechRecognizerRequest::setOnChannelClosed(NlsCallbackMethod event,
void* param) {
_callback->setOnChannelClosed(event, param);
}
void SpeechRecognizerRequest::setOnMessage(NlsCallbackMethod event,
void* param) {
_callback->setOnMessage(event, param);
}
} // namespace AlibabaNls