* 闲聊功能包括有听新闻、问天气、讲笑话、问答游戏、以及闲聊百科等多个场景的应答回复。其对应的处理器是DefaultProcessor。 回复指令内容如下:
~~~
输入:你好。
输出:
{
"actions": [],
"motions": [
{
"index": 4,
"level": 1,
"motion": 10002
},
{
"index": 10,
"level": 1,
"motion": 30002
}
],
"outc": "0",
"rtext": "你好,有什么可以帮到你呢?",
"synthetise": "",
"ttext": ""
}
~~~
* 页面效果图:
![](https://box.kancloud.cn/772e970d70cda9bc65618232a77d23ab_198x356.png)--![](https://box.kancloud.cn/d656078307f2f8ade1205e4d2bcd3af8_198x356.png)--![](https://box.kancloud.cn/9cfa3ea48981bdd00968e590400d08ee_198x355.png)
* 在该Processor中,基本只要将应答指令对象中的回复文本发送到前端ChatListFragment展示即可。特别的,需要判断outc(输出语音控制码)的值并进行对应设置。
~~~
if ((cmd.getOutc() & OUTC_ASK) == OUTC_ASK) {
//合成后自动开启识别
builder.setContextMode(SpeechMsg.CONTEXT_KEEP_RECOGNIZE);
} else if ((cmd.getOutc() & OUTC_SYNTHESIZE_PRIORITY) == OUTC_SYNTHESIZE_PRIORITY) {
//加权合成朗读,即使rtext合成被打断,打断后仍需朗读
builder.setPriority(SpeechMsg.PRIORITY_ABOVE_RECOGNIZE);
}
~~~
* 同时,还要判断synthetise(发音人信息)是否有值。如果有,则需要进行变声处理。
~~~
if (!TextUtils.isEmpty(cmd.getSynthetise())) { //(针对讲笑话)变声
synthesizer.setForceLocalEngine(false);
try {
responseMsg = new ResponseSetionsMsg(text);
((ResponseSetionsMsg) responseMsg).setSetions(new JSONArray(cmd.getSynthetise()));
builder.setSections(((ResponseSetionsMsg) responseMsg).getSetions());
} catch (JSONException e) {
e.printStackTrace();
}
}
~~~