如果您想动态更改唤醒模式,可以在需要的时候调用下面的接口。
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。