只有前面讲到的语音合成,语音理解,语义理解,语音识别确实可以实现人机交流。但是还不能实现完全智能,不能狗做到实时问道,间歇式问答。要实现实时问答,切不用手动操作。这时候语音唤醒功能就大选伸手了。下面我们来看看语音唤醒功能的实现吧。
使用语音唤醒,首先你要在你的应用中开通语音唤醒服务。
设置唤醒词,设置的过程中最好是四个字以上且唤醒词之间相互区分度比较大一些,这样识别率会好一些
然后下载体验包(或者购买包),在含有语音唤醒功能的sdk中我们可以看到一个.jet文件。这个文件含有你设置的唤醒词。把他放在assets文件夹下,
其他的资源加载可以参考前面几节的内容。再次不再赘述
主要代码设置
主要代码:
1,初始化sdk
SpeechUtility.createUtility(MainActivity.this, SpeechConstant.APPID+"=********");
2.初始化唤醒对象
voiceWake = VoiceWakeuper.createWakeuper(MainActivity.this, null);
3,获取唤醒资源
/** 获取唤醒词等唤醒资源* */private String getResourse(){/** 加载唤醒资源* */StringBuffer param = new StringBuffer();String resPath = ResourceUtil.generateResourcePath(MainActivity.this,RESOURCE_TYPE.assets,"ivw/"+getString(R.string.app_id)+".jet");param.append(SpeechConstant.IVW_RES_PATH+"="+resPath);param.append(","+ResourceUtil.ENGINE_START+"="+SpeechConstant.ENG_IVW);return ResourceUtil.generateResourcePath(MainActivity.this,RESOURCE_TYPE.assets, "ivw/"+getString(R.string.app_id)+".jet");}
4,初始化唤醒那个对象
/** 初始化设置--语音理解对象,语音唤醒对象,语音合成对象* */private void initSet(){//语音理解设置understander.setParameter(SpeechConstant.LANGUAGE,"zh_cn");//语音合成设置speechSyn.setParameter(SpeechConstant.VOICE_NAME,"xiaoyan");speechSyn.setParameter(SpeechConstant.SPEED,"50");speechSyn.setParameter(SpeechConstant.ENGINE_TYPE,SpeechConstant.TYPE_CLOUD);//语音唤醒设置
// voiceWake.setParameter(SpeechConstant.IVW_THRESHOLD,"0"+-80);
// voiceWake.setParameter(SpeechConstant.IVW_SST,"oneshot");voiceWake.setParameter(SpeechConstant.ENGINE_TYPE,"cloud");
// voiceWake.setParameter(SpeechConstant.CLOUD_GRAMMAR, grammarID);voiceWake.setParameter(SpeechConstant.IVW_THRESHOLD, "0:"+0);voiceWake.setParameter(SpeechConstant.IVW_SST,"wakeup");voiceWake.setParameter(SpeechConstant.KEEP_ALIVE, "0");voiceWake.setParameter(SpeechConstant.IVW_NET_MODE,""+0);voiceWake.setParameter(SpeechConstant.IVW_RES_PATH,getResourse());}
5,开始语音唤醒
voic.startListening(mWakeuperListener);
6,唤醒监听器
/** 唤醒监听器* */private WakeuperListener mWakeuperListener = new WakeuperListener(){@Overridepublic void onEvent(int eventType, int arg1, int arg2, Bundle obj) {}@Overridepublic void onResult(WakeuperResult results) {}@Overridepublic void onBeginOfSpeech() {// TODO Auto-generated method stub}@Overridepublic void onError(SpeechError arg0) {// TODO Auto-generated method stub}@Overridepublic void onVolumeChanged(int arg0) {// TODO Auto-generated method stub}};
最后记得添加权限,(前面几节介绍的也有,再次也不再赘述了),至此语音唤醒功能已经实现,注意次还行是设置在单纯的唤醒,还有一种能唤醒是唤醒+识别,后面会单独介绍。再次不说了。
至于代码回头我会单独列出下载地址,今天时间关系,暂时不上代码。