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

基于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。

你可能感兴趣的:(java,android,js,mybatis,vue)