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(); } } ~~~