关于讯飞开发平台的注册以及SDK下载:##

##请参考:
http://blog.csdn.net/weixin_39923324/article/details/78924892

强烈推荐

分享一个大神的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来! 网址:http://www.captainbed.net/yancyang

##· 离线名命令词
##· 离线语音合成
##· 离线唤醒
##· 语音在线听写

准备工作:

1、jar包 地址:https://pan.baidu.com/s/1hsanJBe密码:523z2、权限
    <uses-permission android:name="android.permission.RECORD_AUDIO"/><uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/><uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/><uses-permission android:name="android.permission.READ_PHONE_STATE"/><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/><uses-permission android:name="android.permission.READ_CONTACTS"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.WRITE_SETTINGS"/><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
3.初始化引擎我的appid已經沒有装机量,有些功能不能测试。
    public void registerApp(Context context) {StringBuffer param = new StringBuffer();param.append("appid=5a4448f4");param.append(",");param.append(SpeechConstant.ENGINE_MODE + "=" + SpeechConstant.MODE_MSC);SpeechUtility.createUtility(context, param.toString());}
别忘了,在功能清单中申明Application 。

##一、离线命令词

·Model层

离线命令的几个方法。

public interface IOcwBIZ {/*** 初始化** @param initListener*/void createRecognizer(InitListener initListener);/*** 构件语法** @param onBuildGrammar*/void localGrammar(OnBuildGrammar onBuildGrammar);/*** 开始识别** @param onResultListener* @param recognizerListener*/void onResult(OnResultListener onResultListener, RecognizerListener recognizerListener);/*** 销毁对象*/void destroyObj();

实现方法


 @Overridepublic void createRecognizer(InitListener initListener) {mAsr = SpeechRecognizer.createRecognizer(context, initListener);}
@Overridepublic void localGrammar(final OnBuildGrammar onBuildGrammar) {//读取本地文件,我的离线命令词在SD卡String order = readOrderTxt(new File(SDCardUtils.getSDCardPath(), "order.hyco"));if (TextUtils.isEmpty(order)) {Log.e(TAG, "setParam: order 文件读取有误");}StringBuffer stringBuffer = new StringBuffer();try {JSONArray ja = new JSONArray(order);for (int i = 0; i < ja.length(); i++) {JSONObject jo = (JSONObject) ja.get(i);stringBuffer.append("|").append(jo.getString("order"));}} catch (JSONException e) {e.printStackTrace();Log.e(TAG, "setParam: order 文件格式有误");stringBuffer.append("|").append("西湖美景|塞外沙漠");}//采用bnf构建命令StringBuffer sb = new StringBuffer();sb.append("#BNF+IAT 1.0 UTF-8;\n").append("!grammar call;\n").append("!slot <single>;\n").append("!slot <zero>;\n").append("!start <callStart>;\n").append("<callStart>:").append("[<zero>][<zero>][<zero>][<zero>][<zero>][<zero>][<zero>][<zero>][<zero>]<zero>|<single>;\n").append("<zero>:").append(KEY_ZERO).append(";\n").append("<one>:").append(KEY_ZERO).append(";\n").append("<two>:").append(KEY_ZERO).append(";\n").append("<three>:").append(KEY_ZERO).append(";\n").append("<single>:").append(stringBuffer.toString().substring(1)).append(";\n");if (null == mAsr) {// TODO: 2017/12/29  请确认 libmsc.so 放置正确,且有调用 createUtility 进行初始化onBuildGrammar.initFailure("创建对象失败。");return;}mAsr.setParameter(SpeechConstant.PARAMS, null);// 设置文本编码格式mAsr.setParameter(SpeechConstant.TEXT_ENCODING, "utf-8");// 设置引擎类型mAsr.setParameter(SpeechConstant.ENGINE_TYPE, mEngineType);// 设置语法构建路径mAsr.setParameter(ResourceUtil.GRM_BUILD_PATH, grmPath);mAsr.setParameter(ResourceUtil.ASR_RES_PATH, getResourcePath());ret = mAsr.buildGrammar(GRAMMAR_TYPE_BNF, sb.toString(), new GrammarListener() {@Overridepublic void onBuildFinish(String grammarId, SpeechError error) {if (error == null) {if (mEngineType.equals(SpeechConstant.TYPE_CLOUD)) {SharedPreferences.Editor editor = mSharedPreferences.edit();if (!TextUtils.isEmpty(grammarId))editor.putString(KEY_GRAMMAR_ABNF_ID, grammarId);editor.commit();}onBuildGrammar.buildGrammarSuccess("语法构建成功:" + grammarId);} else {onBuildGrammar.buildGrammarError("语法构建失败,错误码:" + error.getErrorCode());}}});if (ret != ErrorCode.SUCCESS) {onBuildGrammar.buildGrammarError("语法构建失败,错误码:" + ret);}}
  @Overridepublic void onResult(OnResultListener onResultListener, RecognizerListener recognizerListener) {if (null == mAsr) {// TODO: 2017/12/29  请确认 libmsc.so 放置正确,且有调用 createUtility 进行初始化onResultListener.initFailure("创建对象失败。");return;}// 设置参数if (!setParam()) {onResultListener.unBuildGrammar("语法未构建或构建失败");return;}ret = mAsr.startListening(recognizerListener);if (ret != ErrorCode.SUCCESS) {onResultListener.notFindOrder("识别失败,错误码: " + ret);}}
@Overridepublic void destroyObj() {if (null != mAsr) {// 退出时释放连接mAsr.cancel();mAsr.destroy();}}
 上述就是主要的核心方法,在onCreat()中调用初始化方法,在实现onClick()之前调用构建语法的方法,在onClick()s时调用开始识别的方法,退出界面时调用销毁的方法。

##二、离线语音合成

这些方法可以酌情处理。

 /*** 初始化** @param mTtsInitListener* @return*/boolean createSynthesizer(InitListener mTtsInitListener);/*** 开始播放** @param message* @param mTtsListener* @return*/int startSpeaking(String message, SynthesizerListener mTtsListener);/*** 取消播放*/void stopSpeaking();/*** 暂停播放*/void pauseSpeaking();/*** 继续播放*/void resumeSpeaking();/*** 销毁对象*/void destroyObj();

初始化

  @Overridepublic boolean createSynthesizer(InitListener mTtsInitListener) {// 初始化合成对象mTts = SpeechSynthesizer.createSynthesizer(context, mTtsInitListener);return mTts != null;}

开始播放

 @Overridepublic int startSpeaking(String message, SynthesizerListener mTtsListener) {setParam();int code = mTts.startSpeaking(message, mTtsListener);return code;}

取消播放

@Overridepublic void stopSpeaking() {mTts.stopSpeaking();}

暂停播放

   @Overridepublic void pauseSpeaking() {mTts.pauseSpeaking();}

继续播放

  @Overridepublic void resumeSpeaking() {mTts.resumeSpeaking();}

销毁对象

   @Overridepublic void destroyObj() {if (null != mTts) {mTts.stopSpeaking();// 退出时释放连接mTts.destroy();}}

暂停播放和继续播放俩个方法,可以视情况取消,不影响操作。当然也可以读取本地的文件,这样就实现了小说朗读功能了。也可以做成服务,实现听书功能。

##三、离线唤醒

离线唤醒,就是当手机处于待机黑屏状态,还能接受到特定的语音.

目前我的唤醒词为:

1.启动语音

2.八戒醒来

3.开机开机

4.来客人了

5.浩创科技

上代码:

public interface IWakeBIZ {/*** 初始化** @return*/boolean createWakeUp();/*** 开启唤醒** @param mWakeuperListener* @param onInit*/void startWakeUp(WakeuperListener mWakeuperListener, OnInit onInit);/*** 停止唤醒*/void stopWakeUp();/*** 销毁对象*/void destroyObj();}
 //初始化@Overridepublic boolean createWakeUp() {mIvw = VoiceWakeuper.createWakeuper(context, null);return null != mIvw;}//启动唤醒@Overridepublic void startWakeUp(WakeuperListener mWakeuperListener, OnInit onInit) {//非空判断,防止因空指针使程序崩溃mIvw = VoiceWakeuper.getWakeuper();if (mIvw != null) {// 清空参数mIvw.setParameter(SpeechConstant.PARAMS, null);// 唤醒门限值,根据资源携带的唤醒词个数按照“id:门限;id:门限”的格式传入mIvw.setParameter(SpeechConstant.IVW_THRESHOLD, "0:" + curThresh);// 设置唤醒模式mIvw.setParameter(SpeechConstant.IVW_SST, "wakeup");// 设置持续进行唤醒mIvw.setParameter(SpeechConstant.KEEP_ALIVE, keep_alive);// 设置闭环优化网络模式mIvw.setParameter(SpeechConstant.IVW_NET_MODE, ivwNetMode);// 设置唤醒资源路径mIvw.setParameter(SpeechConstant.IVW_RES_PATH, getResource());// 设置唤醒录音保存路径,保存最近一分钟的音频mIvw.setParameter(SpeechConstant.IVW_AUDIO_PATH, Environment.getExternalStorageDirectory().getPath() + "/hyco/ivw.wav");mIvw.setParameter(SpeechConstant.AUDIO_FORMAT, "wav");// 如有需要,设置 NOTIFY_RECORD_DATA 以实时通过 onEvent 返回录音音频流字节//mIvw.setParameter( SpeechConstant.NOTIFY_RECORD_DATA, "1" );// 启动唤醒mIvw.startListening(mWakeuperListener);} else {onInit.InitError("初始化唤醒对象失败");}}//停止唤醒@Overridepublic void stopWakeUp() {mIvw.stopListening();}//销毁对象@Overridepublic void destroyObj() {mIvw = VoiceWakeuper.getWakeuper();if (mIvw != null) {mIvw.destroy();}}

##三、语音在线听写

讯飞很早以前关闭了离线语音听写,但是使用以前的jar可以实现离线听写功能。但是二者不可混淆:离线语音demo下载:http://download.csdn.net/download/weixin_39923324/10209576言归正传,还是说在线听写:
public interface IRecBIZ {/*** 初始化** @param mTtsInitListener* @return*/boolean createRec(InitListener mTtsInitListener);/*** 开始听写** @param mRecognizerListener* @return*/int startSpeaking(RecognizerListener mRecognizerListener);/*** 停止听写*/void stopSpeaking();/*** 取消听写*/void cancelSpeaking();/*** 销毁对象*/void destroyObj();
}
 @Overridepublic boolean createRec(InitListener mTtsInitListener) {mIat = SpeechRecognizer.createRecognizer(context, mTtsInitListener);return mIat != null;}@Overridepublic int startSpeaking(RecognizerListener mRecognizerListener) {setParam();return mIat.startListening(mRecognizerListener);}@Overridepublic void stopSpeaking() {mIat.stopListening();}@Overridepublic void cancelSpeaking() {mIat.cancel();}@Overridepublic void destroyObj() {if (null != mIat) {// 退出时释放连接mIat.cancel();mIat.destroy();}}

想象一下,自己的手机由自己所写的语音控制,那成就感有多么棒。

DEMO:http://download.csdn.net/download/weixin_39923324/10209490

转注注明出处。

强烈推荐

分享一个大神的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来! 网址:http://www.captainbed.net/yancyang

集成讯飞SDK,实现离线命令词、离线语音合成、离线唤醒,语音在线/离线听写相关推荐

  1. Android Studio快速集成讯飞SDK实现文字朗读功能

    今天,我们来学习一下怎么在Android Studio快速集成讯飞SDK实现文字朗读功能,先看一下效果图: 第一步 :了解TTS语音服务 TTS的全称为Text To Speech,即"从文 ...

  2. 讯飞语音——离线命令词+语义识别

    讯飞语音--离线命令词+语义识别 意思就是先走离线命令词识别,如果离线命令词识别没有识别到结果,那么就再走语义接口,如果已开通对应场景,则转为语义,如果没有开通对应场景,则将语音转为文字 效果图 说的 ...

  3. 讯飞语音——离线命令词识别

    离线命令词识别 效果图 示例源码 地址:http://download.csdn.net/detail/q4878802/9023825 步骤: 1. 下载SDK 前面文章有,就不在复述了.这里要选择 ...

  4. 【C++】QT调用VS封装的dll(以科大讯飞离线命令词识别SDK为例)

    QT调用VS封装的dll(以科大讯飞离线命令词识别SDK为例) 1.说明: 跨平台调用dll出现各种坑,谨以此文避坑. 参考博文:https://www.cnblogs.com/seer/p/4789 ...

  5. java 集成讯飞语音 pc_【报Bug】sdk集成 讯飞语音输入jar包报错

    sdk集成 讯飞语音输入jar包报错 Caused by: org.gradle.api.internal.artifacts.transform.TransformException: Execut ...

  6. 离线语音识别软件_6.语音板使用科大讯飞离线命令词识别

    0x00 离线命令词识别简介 语音识别技术(Auto Speech Recognize,简称ASR),就是把人的自然语言音频数据转换成文本数据的技术.理论上在线ASR是可以把所有的语音转换成对应的文本 ...

  7. android 科大讯飞离线命令词的使用

    这篇博客主要讲解如何实现离线命令词的功能 科大讯飞离线命令词这个功能还是比较好用的 , 它可以配合着语音唤醒一起使用,这个时候就可以做出来你想要的效果 ,如智能音响什么的 !  不多说, 直接上代码! ...

  8. 科大讯飞离线命令词的使用

    公司内部有需求,需要在项目中加上离线命令词的使用,之前做过了在线语音识别,而离线的语音识别和在线的最大区别是离线需要对应的离线资源包!当然,离线识别的识别度和在线是有一定的差距的,很多时候识别不准,不 ...

  9. 科大讯飞离线命令词识别

    一.进入科大讯飞官网,下载自己所需要的SDK----以离线命令词识别为例: 二.分析代码-----主要有以下四大函数 const char *get_audio_file(void); //选择进行离 ...

最新文章

  1. java+script+当前日期_javascript获取当前时间
  2. 程序员必读10本算法书推荐
  3. XML publisher 填充空白行数
  4. 卸载 插件_永远都不会卸载的CAD插件,好用到怀疑人生
  5. 如何使用 FFmpeg 减小视频大小
  6. Web browser的发展演变
  7. 更改hadoop集群yarn的webui中的开始时间和结束时间为本地时间
  8. linux之同时监控多个日志文件变化
  9. DVD-Cloner 2022 for mac(DVD光盘刻录工具)
  10. iview2.0 bug之+8 区的 DatePicker
  11. Windows 定时关机命令
  12. matlab中的求导函数diff
  13. Laravel模型中的fillable和guarded属性
  14. Spring Boot 接入支付宝,实战来了
  15. HDUOJ 1847 Good Luck in CET-4 Everybody!(尼姆博奕)
  16. python支持使用字典的键作为下标,Python 支持使用字典的“键”作为下标来访问字典中的值。...
  17. iMazing2023官网中文版下载及许可证附使用教程
  18. java毕业设计——基于java+JSP+sqlserver的智能在线考试信息管理系统设计与实现(毕业论文+程序源码)——智能在线考试信息管理系统
  19. 【学习资料】红蓝紫队视角下的实战攻防演习
  20. 2009年学术造假事件汇总,纯洁的几片圣土已经沦陷

热门文章

  1. 使用微信公众号对接阿里妈妈后台,实现查卷返利机器人功能
  2. w7电脑蓝屏怎么解决_电脑蓝屏,教您电脑蓝屏怎么办
  3. word文档中的勾怎样打
  4. 为什么websocket没有被广泛使用,他解决了前后端数据没有实时刷新的问题,原因来了。
  5. BACnet协议简要说明及组网简介
  6. APM飞控板增加继电器控制
  7. 【关系抽取-mre-in-one-pass】加载数据(一)
  8. 2017乌鲁木齐网络赛 j 题
  9. 硬件基础与云计算基础
  10. 中国艺术《先得月》孙溟㠭篆刻作品