如果您想动态更改唤醒模式,可以在需要的时候调用下面的接口。
oneshot:
//开启oneshot DDS.getInstance().getAgent().getWakeupEngine().enableOneShot(); //关闭oneshot DDS.getInstance().getAgent().getWakeupEngine().disableOneShot();实现代码:
public void enableOneShot() { try { DDS.getInstance().getAgent().getWakeupEngine().enableOneShot(); } catch (DDSNotInitCompleteException e) { e.printStackTrace(); } } public void disableOneShot() { try { DDS.getInstance().getAgent().getWakeupEngine().disableOneShot(); } catch (DDSNotInitCompleteException e) { e.printStackTrace(); } }// 如果您想动态指定环麦增强角度,可以在需要的时候调用下面的接口。
DDS.getInstance().getAgent().getWakeupEngine().setWakeupDoa(int doa);实现代码:
public void setWakeupDoa() { // 修改唤醒增强角度, 环麦线麦中使用 try { DDS.getInstance().getAgent().getWakeupEngine().setWakeupDoa(90); } catch (DDSNotInitCompleteException e) { e.printStackTrace(); } }在这里插入代码片// 如果您想动态指定车载双麦的驾驶模式,可以在需要的时候调用下面的接口。
// 0:全模式, 1:主驾模式
DDS.getInstance().getAgent().getWakeupEngine().setWakeupMode(int mode);实现代码:
public void setWakeupMode() { // 车载模式下设置驾驶模式 // 驾驶模式, 0:定位模式, 1:主驾模式, 2: 副驾模式 3:全车模式 try { DDS.getInstance().getAgent().getWakeupEngine().setWakeupMode(1); } catch (DDSNotInitCompleteException e) { e.printStackTrace(); } }如果您想获取当前唤醒内核的版本号,可以在需要的时候调用下面的接口。
DDS.getInstance().getAgent().getWakeupEngine().getWakeupVersion();实现代码:
public void getWakeupVersion() { try { String version = DDS.getInstance().getAgent().getWakeupEngine().getWakeupVersion(); Log.d(TAG, "getWakeupVersion: "+version); } catch (DDSNotInitCompleteException e) { e.printStackTrace(); } }如果您想设置是否允许识别过程中响应唤醒,可以在需要的时候调用下面的接口。
//enable: true. 允许识别过程中响应唤醒, false. 不允许识别过程中响应唤醒 DDS.getInstance().getAgent().getWakeupEngine().enableWakeupWhenAsr(boolean enable);实现代码:
public void enableWakeupWhenAsr() { try { DDS.getInstance().getAgent().getWakeupEngine().enableWakeupWhenAsr(true); } catch (DDSNotInitCompleteException e) { e.printStackTrace(); } }如果您想设置自定义欢迎语,可以在需要的时候调用下面的接口。
DDS.getInstance().getAgent().getWakeupEngine().setWakeupCallback(WakeupCallback wakeupCallback);实现代码:
public void setWakeupCallback() { DDS.getInstance().getAgent().getWakeupEngine().setWakeupCallback(new WakeupCallback() { @Override public JSONObject onWakeup(JSONObject jsonObject) { Log.d(TAG, "onWakeupResult = " + jsonObject.toString()); try { JSONObject resultObj = new JSONObject().put("greeting", "这是自定义欢迎语"); return resultObj; } catch (JSONException e) { e.printStackTrace(); } return null; } }); }获取主唤醒词列表,默认返回WakeupEngine所设置的主唤醒词,如果没有设置过则返回产品配置的主唤醒词。
DDS.getInstance().getAgent().getWakeupEngine().getMainWakeupWords();实现代码:
public void getWakeupWords() { try { String[] wakeupWords = DDS.getInstance().getAgent().getWakeupEngine().getWakeupWords(); if (wakeupWords != null) { for (String wakeupWord : wakeupWords) { Log.d(TAG, "wakeupWord = " + wakeupWord); } } } catch (DDSNotInitCompleteException e) { e.printStackTrace(); } }设置Beamforming监听器, 实时回调Beamforming音频
DDS.getInstance().getAgent().getWakeupEngine().setBfListener(BfListener listener);实现代码:
public void setBfListener() { BfListener listener = new BfListener() { @Override public void onBeamforming(byte[] bytes) { Log.d(TAG,"bytes:"+bytes); } }; try { DDS.getInstance().getAgent().getWakeupEngine().setBfListener(listener); } catch (DDSNotInitCompleteException e) { e.printStackTrace(); } } public void setVoipListener() { try { VoipListener listener = new VoipListener() { @Override public void onVoip(byte[] pcm) { Log.d(TAG, "onVoip = " + pcm.length); } }; DDS.getInstance().getAgent().getWakeupEngine().setVoipListener(listener); } catch (DDSNotInitCompleteException e) { e.printStackTrace(); } }设置唤醒模块的模式(信号处理模块不变,环麦中暂不支持)
// 设置唤醒模块的模式(信号处理不变,环麦中暂不支持) DDS.getInstance().getAgent().getWakeupEngine().setWakeupSwitch(boolean mode); // 开启低功耗模式后, 唤醒功能不可用, cpu会降低(单麦/环麦/线麦支持, 从1.2.8.1版本开始支持) DDS.getInstance().getAgent().getWakeupEngine().setLpSwitch(boolean lpSwitch);实现代码:
public void setWakeupSwitch() { // 在信号处理不变的前提下是否关闭唤醒 true-开启唤醒 ;false-关闭唤醒 try { DDS.getInstance().getAgent().getWakeupEngine().setWakeupSwitch(true); } catch (DDSNotInitCompleteException e) { e.printStackTrace(); } }如果你有使用就近唤醒的需求, 可以参照下面的配置与设置(目前支持线性双麦/线性四麦的就近唤醒)
1. 设置major参数为true (从1.2.8.1版本开始, 不再需要此配置) config.addConfig("MAJOR", "true"); 2. 设置K_USE_NEAR_WAKEUP为true, 表示使用就近唤醒 config.addConfig(DDSConfig.K_USE_NEAR_WAKEUP, "true"); 3. 在设置唤醒词的时候设置major字段 WakeupWord minorWord = new WakeupWord() .setPinyin("ni hao xiao chi") .setWord("你好小驰") .setThreshold("0.25") .setMajor("1")(从1.2.8.1版本开始, 不再需要此配置) .addGreeting("小驰回来了"); DDS.getInstance().getAgent().getWakeupEngine().addMainWakeupWord(minorWord);实现代码:
public void setMajor() { //在设置唤醒词的时候设置major字段 WakeupWord minorWord = new WakeupWord() .setPinyin("ni hao xiao chi") .setWord("你好小驰") .setThreshold("0.25") .setMajor("1") .addGreeting("小驰回来了"); try { DDS.getInstance().getAgent().getWakeupEngine().addMainWakeupWord(minorWord); } catch (DDSNotInitCompleteException e) { e.printStackTrace(); } } public void enableNearWakeup() { try { DDS.getInstance().getAgent().getWakeupEngine().enableNearWakeup(true); } catch (DDSNotInitCompleteException e) { e.printStackTrace(); } } public void disableNearWakeup() { try { DDS.getInstance().getAgent().getWakeupEngine().enableNearWakeup(false); } catch (DDSNotInitCompleteException e) { e.printStackTrace(); } }如果有问题无法解决或者对代码有兴趣的小伙伴,可以直接下载DUIdemo2.7.zip。