本地语音唤醒(Android)
一. 唤醒 SDK概述
Wakeup 提供单独的离线语音唤醒能力,通过不间断侦测语音,当出现唤醒词的语音时可执行相关事件的技术,具有功耗低、唤醒率高的特点。可以设置自定义唤醒词。
二. SDK使用说明
使用当前功能时,请先授权,否则禁止使用。请参考 授权说明
2.1 准备
jar:DUI-lite-SDK-for-Android-xxx.jar
so:libwakeup.so
资源:具体使用到的资源请参考 demo。可以放在assets目录中,也可以自己手动放在磁盘中,比如/sdcard/
三. 引擎运行流程图
四. 示例代码
涉及引擎类:AIWakeupEngine,详细使用示例请参考 demo
4.1 配置config信息
AIWakeupConfig config = new AIWakeupConfig();
config.setWakeupResource(SampleConstants.WAKEUP_RES);
部分配置信息如下:
方法 | 方法说明 | 参数说明 | 默认值 | 备注 |
setWakeupResource(String wakeupResource) | 设置唤醒资源 |
1. 如在 sd 里设置为绝对路径 如/sdcard/speech/***.bin 2. 如在 assets 里设置为名称 |
NA | NA |
setOneShotCacheTime(int oneShotCacheTime) | 设置oneshot功能下需要缓存的音频时长,根据具体的硬件性能和唤醒词长度调节。 | 单位毫秒 | 1200ms | NA |
4.2 实现唤醒回调接口
// 回调方法
private class AISpeechListenerImpl implements AIWakeupListener {
@Override
public void onError(AIError error) {
Log.e(TAG, "error " + error.toString());
}
@Override
public void onInit(final int status) {
Log.i(TAG, "Init result " + status);
if (status == AIConstant.OPT_SUCCESS) {
Log.i(TAG, "初始化成功");
} else {
Log.i(TAG, "初始化失败!code:" + status);
}
}
@Override
public void onWakeup(String recordId, final double confidence, final String wakeupWord) {
Log.d(TAG, "\n唤醒成功 wakeupWord = " + wakeupWord + " confidence = " + confidence);
//在这里启动其他引擎,比如tts或者识别
}
@Override
public void onReadyForSpeech() {
Log.d(TAG, "onReadyForSpeech: ");
}
@Override
public void onResultDataReceived(byte[] buffer, int size) {
}
@Override
public void onRawDataReceived(byte[] buffer, int size) {
}
}
4.3 实例化唤醒引擎并初始化
AIWakeupEngine mEngine;
mEngine = AIWakeupEngine.createInstance();
mEngine.init(config, new AISpeechListenerImpl());
AIWakeupEngine部分方法如下表所示
方法 | 方法说明 | 参数说明 | 默认值 | 备注 |
createInstance() | 创建唤醒实例 | NA | NA | 静态方法,非单例 |
init(AIWakeupConfig config, AIWakeupListener listener) | 初始化引擎 |
config :配置参数 listener:回调方法 |
NA | NA |
setDynamicParam(String[] pinyin, float[] thresh) | 动态调整参数,目前只支持更新唤醒词的thresh |
pinyin 唤醒词,必须在AIWakeupIntent设置过,参数示例:["ni hao xiao chi"] thresh 唤醒词对应的阈值,参数示例:[0.2] |
NA | NA |
feedData(byte[] data, int size) | 自行feed音频数据,不使用内部录音机时可用 |
data 音频数据 size 音频数据大小 |
NA | NA |
start(AIWakeupIntent aiWakeupIntent) | 开启唤醒,如果使用内部录音机的话一并开启 |
aiWakeupIntent 配置参数 |
NA | NA |
stop() | 关闭唤醒,如果使用内部录音机的话一并关闭 |
NA |
NA | NA |
forceRequestWakeupResult() | 强制请求唤醒结果,即使没有唤醒也会给出唤醒词为null的结果 |
NA |
NA | NA |
destroy() | 销毁唤醒内核和录音机 |
NA |
NA | NA |
更详细的使用请参考 Javadoc
4.4 配置intent并开启唤醒
AIWakeupIntent intent = new AIWakeupIntent();
intent.setWakeupWord(new String[]{"ni hao xiao chi"}, new float[]{0.1f});
mEngine.start(intent);
部分intent配置如下表
方法 | 方法说明 | 参数说明 | 默认值 | 备注 |
setUseOneShot(boolean useOneShot) |
设置是否使用 oneshot 功能 oneshot 功能即 唤醒词+命令词,如用户说:你好小弛,打开设置。 “你好小弛”是唤醒词,唤醒回调触发,此时使用 asr识别,可以识别出“打开设置” |
true/false | false | NA |
setInputContinuousAudio(boolean inputContinuousAudio) | 设置是否输入实时的长音频,默认接受长音频为true(如果是一二级唤醒,即每个唤醒词独立且非实时,则需要设置为false,如果不设置会影响性能) | true/false | true | 当设置为false时,每次送一段音频段都会给予是否唤醒的反馈,如果没有被唤醒,则抛出wakeupWord:null, confidence:0的信息 |
setWakeupWord(String[] pinyin, float[] threshold) | 设置唤醒词列表 |
pinyin 唤醒词的拼音,建议三到五字,如:["ni hao xiao chi","xiao chi ni hao"] threshold 阈值,0-1,可根据需求自行调整,如:[0.1f, 0.1f] |
NA | NA |
setDcheck(String[] dcheck) | 设置唤醒是否开启校验 |
"1"表示开启校验,"0"表示不开启校验 校验值,如:["1","0"] |
NA | NA |
setVadEnable(boolean vadEnable) | 设置是否启动vad功能,需要资源配合。在资源支持vad功能的情况下,默认启动vad |
true/false |
true | NA |
setUseCustomFeed(boolean useCustomFeed) | 设置是否自行feed数据 |
true 用户调用 feedData 方法输入音频数据 |
false | NA |
setDumpWakeupAudioPath(String dumpWakeupAudioPath) | 设置dump唤醒音频保存的文件夹 |
dumpWakeupAudioPath dump唤醒音频保存的文件夹,比如/sdcard/speech/dumpwkp。不设置则不dump音频 |
NA | NA |
更多的api与说明请参考最新的 Javadoc
4.5 停止销毁引擎
mEngine.stop();
mEngine.destroy();
请在合适的位置调用以上两个方法。
4.6 语音唤醒完整的参考代码块
五. 错误码
六. 接口文档
更多的接口内容与描述请参阅 javadoc