auto voiceAI = VoiceAI::newInstance();
voiceAI->config(VoiceAI::Option::SPEECH_URI, options.speechUri.c_str());
voiceAI->config(VoiceAI::Option::REPORT_URI, options.restUri.c_str());
voiceAI->config(VoiceAI::Option::AUTHINFO, options.key.c_str(),
options.secret.c_str(), options.deviceTypeId.c_str(),
options.deviceId.c_str());
voiceAI->config(VoiceAI::Option::AUDIO_CODEC, VoiceAI::AudioCodec::OPU);
voiceAI->config(VoiceAI::Option::CONTINUOUS_DIALOGUE, contDiag ? 1 : 0);
voiceAI->setVoiceCallback(callbackObject);
voiceAI->setActionCallback(callbackObject);
class MyCallbackObject : public VoiceAI::VoiceCallback, public VoiceAI::ActionCallback {
// callbacks of VoiceAI::VoiceCallback
void onAccept(const string& status, void* userp) {
if (status != "accept" && status != "none") {
KLOGD(TAG, "仲裁或二次确认失败(%s),关闭拾音", status.c_str());
pickup(false);
}
}
void onAsr(const string& asr, bool intermediate, void* userp) {
// 语音识别完整结果已得到,结束录音
if (!intermediate)
pickup(false);
}
void onResult(const string& nlp, const string& action, void* userp) {
// 一般不需要处理nlp, action, sdk会内部执行
}
void onVoiceError(int32_t err, void* userp) {
KLOGD(TAG, "onVoiceError: %d, userdata %p", err, userp);
pickup(false);
// 语音识别错误可能需要设备播报错误提示
}
// callbacks of VoiceAI::VoiceCallback
// session的概念,请参考接口文档内的描述
// 简单程序可以不用处理session
void onSessionStart(shared_ptr<VoiceAI::Session>& sess) {
KLOGD(TAG, "onSessionStart: %s", sess->getAppId().c_str());
}
void onSessionEnd(shared_ptr<VoiceAI::Session>& sess) {
KLOGD(TAG, "onSessionEnd: %s", sess->getAppId().c_str());
}
void onSessionActionCompleted(shared_ptr<VoiceAI::Session>& sess, void* userp) {
KLOGD(TAG, "onSessionActionCompleted: %s, userdata %p",
sess->getAppId().c_str(), userp);
}
void onPlayTts(shared_ptr<VoiceAI::Session>& sess, const string& text) {
KLOGD(TAG, "onPlayTts[%s]: %s", sess->getAppId().c_str(), text.c_str());
}
void onStopTts(shared_ptr<VoiceAI::Session>& sess) {
KLOGD(TAG, "onStopTts[%s]", sess->getAppId().c_str());
}
void onPlayMedia(shared_ptr<VoiceAI::Session>& sess, const string& url,
uint32_t position) {
KLOGD(TAG, "onPlayMedia[%s]: %s, %u", sess->getAppId().c_str(),
url.c_str(), position);
}
int32_t onStopMedia(shared_ptr<VoiceAI::Session>& sess) {
KLOGD(TAG, "onStopMedia[%s]", sess->getAppId().c_str());
return 0;
}
void onPickup(shared_ptr<VoiceAI::Session>& sess, bool open,
uint32_t duration) {
KLOGD(TAG, "onPickup[%s]: %d, %u", sess->getAppId().c_str(), open, duration);
}
// 本地技能的状态及动作回调
// 属于比较复杂的运用,只涉及云技能的情况下,不用处理
void onNativeAction(shared_ptr<VoiceAI::Session>& sess, const string& nlp) {
}
void onNativePause(shared_ptr<VoiceAI::Session>& sess) {
}
void onNativeResume(shared_ptr<VoiceAI::Session>& sess) {
}
void onNativeExit(shared_ptr<VoiceAI::Session>& sess) {
}
void onActionError(int32_t err, void* userp) {
KLOGD(TAG, "onActionError: %d, userdata = %p", err, userp);
}
};