4.1闲聊功能
<br/><p>
* 闲聊功能包括有听新闻、问天气、讲笑话、问答游戏、以及闲聊百科等多个场景的应答回复。其对应的处理器是DefaultProcessor。 回复指令内容如下:
~~~
输入:你好。
输出:
{
"actions": [],
"motions": [
{
"index": 4,
"level": 1,
"motion": 10002
},
{
"index": 10,
"level": 1,
"motion": 30002
}
],
"outc": "0",
"rtext": "你好,有什么可以帮到你呢?",
"synthetise": "",
"ttext": ""
}
~~~
* 页面效果图:
![图片.png](https://cos.easydoc.net/72919679/files/kahjojke.png)--![图片.png](https://cos.easydoc.net/72919679/files/kahjoul1.png)--![图片.png](https://cos.easydoc.net/72919679/files/kahjp9m5.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();
}
}
~~~