基于Aispeech的智能对话APP(八)--唤醒相关设置

    技术2023-11-28  103

    基于Aispeech的智能对话APP(八)--唤醒相关设置

    一.唤醒相关设置1.1 oneshot开关1.2 设置环麦增强角度1.3 设置车载双麦模式1.4 获取当前唤醒内核的版本号1.5 设置是否允许识别过程中响应唤醒1.6 设置自定义欢迎语回调1.7 获取主唤醒词列表1.8 设置Beamforming监听器1.8 设置唤醒模块的模式/低功耗模式1.9 就近唤醒 二.代码下载 本篇博文是我自己在学习Aispeech的过程中,分享我遇到的问题以及如何解决。在文章的最后我会上传其代码。感兴趣的小伙伴,请自行下载。

    一.唤醒相关设置

    1.1 oneshot开关

    如果您想动态更改唤醒模式,可以在需要的时候调用下面的接口。

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

    1.2 设置环麦增强角度

    // 如果您想动态指定环麦增强角度,可以在需要的时候调用下面的接口。

    DDS.getInstance().getAgent().getWakeupEngine().setWakeupDoa(int doa);

    实现代码:

    public void setWakeupDoa() { // 修改唤醒增强角度, 环麦线麦中使用 try { DDS.getInstance().getAgent().getWakeupEngine().setWakeupDoa(90); } catch (DDSNotInitCompleteException e) { e.printStackTrace(); } }在这里插入代码片

    1.3 设置车载双麦模式

    // 如果您想动态指定车载双麦的驾驶模式,可以在需要的时候调用下面的接口。

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

    1.4 获取当前唤醒内核的版本号

    如果您想获取当前唤醒内核的版本号,可以在需要的时候调用下面的接口。

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

    1.5 设置是否允许识别过程中响应唤醒

    如果您想设置是否允许识别过程中响应唤醒,可以在需要的时候调用下面的接口。

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

    1.6 设置自定义欢迎语回调

    如果您想设置自定义欢迎语,可以在需要的时候调用下面的接口。

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

    1.7 获取主唤醒词列表

    获取主唤醒词列表,默认返回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(); } }

    1.8 设置Beamforming监听器

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

    1.8 设置唤醒模块的模式/低功耗模式

    设置唤醒模块的模式(信号处理模块不变,环麦中暂不支持)

    // 设置唤醒模块的模式(信号处理不变,环麦中暂不支持) 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.9 就近唤醒

    如果你有使用就近唤醒的需求, 可以参照下面的配置与设置(目前支持线性双麦/线性四麦的就近唤醒)

    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。

    Processed: 0.011, SQL: 9