这篇博客主要讲解如何实现离线命令词的功能
科大讯飞离线命令词这个功能还是比较好用的 , 它可以配合着语音唤醒一起使用,这个时候就可以做出来你想要的效果 ,如智能音响什么的 ! 不多说, 直接上代码!
集成SDK可以参考官方文档来集成 , 我这边主要讲解一下如何实现和如何编写BNF文件!
经过我二次封装可以直接调用
代码如下:
public class IflyGrammar { private final static String mTag = "IflyGrammar"; private Context mContext; private HashMap<String, String> mTszjNames; // 语音识别对象 private SpeechRecognizer mAsr; private Toast mToast; // 缓存 private SharedPreferences mSharedPreferences; private String mContent;// 语法、词典临时变量 // 本地语法文件 private String mLocalGrammar = null; // 本地词典 private String mLocalLexicon = null; // 本地语法构建路径 private String grmPath = Environment.getExternalStorageDirectory() .getAbsolutePath() + "/msc/test"; // 返回结果格式,支持:xml,json private String mResultType = "json"; private final String KEY_GRAMMAR_ABNF_ID = "grammar_abnf_id"; private final String GRAMMAR_TYPE_ABNF = "abnf"; private final String GRAMMAR_TYPE_BNF = "bnf"; private String mEngineType = SpeechConstant.TYPE_LOCAL; private int mRet; private VoiceWakeuper mIvw; //初始化监听器 private InitListener mInitListener = new InitListener() { @Override public void onInit(int code) { Log.d(mTag, "SpeechRecognizer init() code = " + code); if (code != ErrorCode.SUCCESS) { showTip("初始化失败,错误码:" + code); } } }; //识别监听器 private RecognizerListener mRecognizerListener = new RecognizerListener() { @Override public void onVolumeChanged(int volume, byte[] data) { // showTip("当前正在说话,音量大小:" + volume); Log.d(mTag, "返回音频数据:" + data.length); } @Override public void onResult(final RecognizerResult result,