使用AIUI語義前需要首先確保對應的appid已經開通語義功能,開通地址:(http://aiui.xfyun.cn/apps/index)。
~~~
#pragma mark - aiui 發送數據
//aiui發送數據
void AiuiSendBuffer(const void *buffer ,int size , bool isEnd)
{
//是否最后一次數據
if(isEnd){
//發送結束標記
IAIUIMessage * stopWrite = IAIUIMessage::create(AIUIConstant::CMD_STOP_WRITE,
0, 0, "data_type=audio,sample_rate=16000");
m_angent->sendMessage(stopWrite);
stopWrite->destroy();
}
else
{
//發送音頻數據
Buffer* pcmBuffer = Buffer::alloc(size);
memcpy(pcmBuffer->data(), buffer, size);
//msc.lng和msc.lat的值為經緯度信息,發送數據時需要傳入,請參照demo的獲取示例
IAIUIMessage * writeMsg = IAIUIMessage::create(AIUIConstant::CMD_WRITE,0, 0, "data_type=audio,sample_rate=16000,msc.lng=117.13825,msc.lat=31.83365
", pcmBuffer);
m_angent->sendMessage(writeMsg);
writeMsg->destroy();
}
}
~~~
#### **語義結果解析**
~~~
void TestListener::onEvent(IAIUIEvent& event)
{
switch (event.getEventType()) {
//解析結果
case AIUIConstant::EVENT_RESULT:
{
using namespace VA;
Json::Value bizParamJson;
Json::Reader reader;
if(!reader.parse(event.getInfo(), bizParamJson,false)){
NSLog(@"parse error!,getinfo=%s",event.getInfo());
}
Json::Value data = (bizParamJson["data"])[0];
Json::Value params = data["params"];
Json::Value content = (data["content"])[0];
std::string sub = params["sub"].asString();
if(sub == "nlp"){
Json::Value empty;
Json::Value contentId = content.get("cnt_id", empty);
if(contentId.empty()){
NSLog(@"Content Id is empty");
break;
}
std::string cnt_id = contentId.asString();
Buffer *buffer = event.getData()->getBinary(cnt_id.c_str());
if(NULL != buffer){
const char * resultStr = (char *) buffer->data();
if(resultStr == NULL){
return;
}
NSLog(@"resultStr=%s",resultStr);
}
}
} break;
//錯誤處理
case AIUIConstant::EVENT_ERROR:
{
} break;
}
}
~~~