1、官方文档有的id key 不说了,直接配置并添加权限即可
2、.so文件粘帖到jniLibs目录下。
3、离线词库的获取 baidu_speech_grammar.bsg
启动代码如下:
private void offLine(){ Log.d(TAG,"start offline to baidu"); Intent intent = new Intent("com.baidu.action.RECOGNIZE_SPEECH"); intent.putExtra("grammar",baidu_speech_grammar的路径); intent.putExtra("sample", 16000); intent.putExtra("language", "cmn-Hans-CN"); intent.putExtra("prop", 20000); Log.d(TAG,mSampleDirPath + "/" + SPEECH_S_1); intent.putExtra("asr-base-file-path",s_1的路径); startActivityForResult(intent, 1); }
4、获取的内容解析:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK) { Bundle results = data.getExtras(); ArrayListresults_recognition = results.getStringArrayList("results_recognition"); Log.d(TAG,"识别结果(数组形式): " + results_recognition + "\n"); } }
5、资源文件的配置(复制粘帖到指定目录)
6、7.0动态获取麦克风和写的权限
直接运行,没问题,离线时有时说的话提示网络问题,是因为说的内容并非离线语法库中的内容。直接说库中内容,或者自定义离线库导出覆盖之前的即可。
需要指出的是离线识别,需要在开发平台导出语义库,只有说出语义库中的内容,才能识别成功,否则就会走在线,但是网络不可用,就会报出网络不可用的问题。
唤醒功能:
1、自定义激活词 (http://yuyin.baidu.com/wake#m4),导出并添加到可读路径下。
2、初始化唤醒功能
private void initEvents() { EventManager wakeup = EventManagerFactory.create(this, "wp"); wakeup.registerListener(new EventListener() { @Override public void onEvent(String name, String params, byte[] bytes, int i, int i1) { try { Log.d(TAG,"onEvent name = "+name+", params = "+params); JSONObject json = new JSONObject(params); if ("wp.data".equals(name)) { // 每次唤醒成功, 将会回调name=wp.data的时间, 被激活的唤醒词在params的word字段 String word = json.getString("word"); // 唤醒词 Log.d(TAG,"current word = "+word); } else if ("wp.exit".equals(name)) { // 唤醒已经停止 } } catch (JSONException e) { throw new AndroidRuntimeException(e); } } }); HashMap params = new HashMap(); params.put("kws-file",WackUp.bin路径); wakeup.send("wp.start",new JSONObject(params).toString(), null, 0, 0); }
3、停止唤醒监听
wakeup.send("wp.stop", null, null, 0, 0);
运行后,注册监听后,在说到指定的激活词语时,将会调用到指定方法,可以开启语音识别的监听,或者关掉监听。