最近Boss让我开发一个离线语音听写功能 , 可是我发现科大讯飞的离线版本下架了 , 也看了很多地方如百度语音.......

都没发现有离线版本 , 然而今天突然发现科大讯飞的离线听写又上架了  这就让我很开心 . 我就立马把它下载了下来,集成到我的项目中去 . 然后经过一个小时的努力 , 我把它简单的封装了一下 , 然后很方便的就可以到处调用了 !

下面我就把我的那个类发上来你们可以直接拷过去用 . 具体有哪些不懂 , 里面传的东西不清楚可以在下方留言 , 我会给你们讲解.

emmmm~很久没发博客了 , 现在给大家带来些福利 .

下面就是这个类:

public class LatYuYin {private static String TAG = "IatDemo";// 语音听写对象private SpeechRecognizer mIat;// 语音听写UIprivate RecognizerDialog mIatDialog;// 用HashMap存储听写结果private HashMap<String, String> mIatResults = new LinkedHashMap<String, String>();private Toast mToast;private Context mContext;private SharedPreferences mSharedPreferences;private boolean mTranslateEnable = false;private EditText mEditText;public LatYuYin(Context context) {mContext = context;// 初始化识别无UI识别对象// 使用SpeechRecognizer对象,可根据回调消息自定义界面;mIat = SpeechRecognizer.createRecognizer(mContext, mInitListener);// 初始化听写Dialog,如果只使用有UI听写功能,无需创建SpeechRecognizer// 使用UI听写功能,请根据sdk文件目录下的notice.txt,放置布局文件和图片资源mIatDialog = new RecognizerDialog(mContext, mInitListener);mToast = Toast.makeText(context, "", Toast.LENGTH_SHORT);mSharedPreferences = mContext.getSharedPreferences(IatSettings.PREFER_NAME, Activity.MODE_PRIVATE);}public void cancelmLat() {mIat.cancel();showTip("取消听写");}public void stopmLat() {mIat.stopListening();showTip("停止听写");}int ret = 0;// 函数调用返回值//开始听写public void startmLat(View view) {mEditText = (EditText) view.findViewById(R.id.activity_chat_et_text);mEditText.setText(null);mIatResults.clear();// 设置参数setParam();boolean isShowDialog = mSharedPreferences.getBoolean(mContext.getString(R.string.pref_key_iat_show), true);if (isShowDialog) {// 显示听写对话框mIatDialog.setListener(mRecognizerDialogListener);mIatDialog.show();showTip(mContext.getString(R.string.text_begin));} else {// 不显示听写对话框ret = mIat.startListening(mRecognizerListener);if (ret != ErrorCode.SUCCESS) {showTip("听写失败,错误码:" + ret);} else {showTip(mContext.getString(R.string.text_begin));}}}private void showTip(final String str) {Toast.makeText(mContext, str, Toast.LENGTH_SHORT).show();}/*** 参数设置** @return*/public void setParam() {// 清空参数mIat.setParameter(SpeechConstant.PARAMS, null);String lag = mSharedPreferences.getString("iat_language_preference", "mandarin");// 设置引擎mIat.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD);// 设置返回结果格式mIat.setParameter(SpeechConstant.RESULT_TYPE, "json");this.mTranslateEnable = mSharedPreferences.getBoolean(mContext.getString(R.string.pref_key_translate), false);if (mTranslateEnable) {Log.i(TAG, "translate enable");mIat.setParameter(SpeechConstant.ASR_SCH, "1");mIat.setParameter(SpeechConstant.ADD_CAP, "translate");mIat.setParameter(SpeechConstant.TRS_SRC, "its");}if (lag.equals("en_us")) {// 设置语言mIat.setParameter(SpeechConstant.LANGUAGE, "en_us");mIat.setParameter(SpeechConstant.ACCENT, null);if (mTranslateEnable) {mIat.setParameter(SpeechConstant.ORI_LANG, "en");mIat.setParameter(SpeechConstant.TRANS_LANG, "cn");}} else {// 设置语言mIat.setParameter(SpeechConstant.LANGUAGE, "zh_cn");// 设置语言区域mIat.setParameter(SpeechConstant.ACCENT, lag);if (mTranslateEnable) {mIat.setParameter(SpeechConstant.ORI_LANG, "cn");mIat.setParameter(SpeechConstant.TRANS_LANG, "en");}}// 设置语音前端点:静音超时时间,即用户多长时间不说话则当做超时处理mIat.setParameter(SpeechConstant.VAD_BOS, mSharedPreferences.getString("iat_vadbos_preference", "4000"));// 设置语音后端点:后端点静音检测时间,即用户停止说话多长时间内即认为不再输入, 自动停止录音mIat.setParameter(SpeechConstant.VAD_EOS, mSharedPreferences.getString("iat_vadeos_preference", "1000"));// 设置标点符号,设置为"0"返回结果无标点,设置为"1"返回结果有标点mIat.setParameter(SpeechConstant.ASR_PTT, mSharedPreferences.getString("iat_punc_preference", "1"));// 设置音频保存路径,保存音频格式支持pcm、wav,设置路径为sd卡请注意WRITE_EXTERNAL_STORAGE权限mIat.setParameter(SpeechConstant.AUDIO_FORMAT, "wav");mIat.setParameter(SpeechConstant.ASR_AUDIO_PATH, Environment.getExternalStorageDirectory() + "/msc/iat.wav");//此处engineType为“local”mIat.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_LOCAL);if (SpeechConstant.TYPE_LOCAL.equals(SpeechConstant.TYPE_LOCAL)) {// 设置本地识别资源mIat.setParameter(ResourceUtil.ASR_RES_PATH, getResourcePath());}}private String getResourcePath() {StringBuffer tempBuffer = new StringBuffer();//识别通用资源tempBuffer.append(ResourceUtil.generateResourcePath(mContext, ResourceUtil.RESOURCE_TYPE.assets, "iat/common.jet"));tempBuffer.append(";");tempBuffer.append(ResourceUtil.generateResourcePath(mContext, ResourceUtil.RESOURCE_TYPE.assets, "iat/sms_16k.jet"));//识别8k资源-使用8k的时候请解开注释return tempBuffer.toString();}/*** 初始化监听器。*/private InitListener mInitListener = new InitListener() {@Overridepublic void onInit(int code) {Log.d(TAG, "SpeechRecognizer init() code = " + code);if (code != ErrorCode.SUCCESS) {showTip("初始化失败,错误码:" + code);}}};/*** 听写UI监听器*/private RecognizerDialogListener mRecognizerDialogListener = new RecognizerDialogListener() {public void onResult(RecognizerResult results, boolean isLast) {Log.d(TAG, "recognizer result:" + results.getResultString());if (mTranslateEnable) {printTransResult(results);} else {String text = JsonParser.parseIatResult(results.getResultString());mEditText.append(text);mEditText.setSelection(mEditText.length());}}/*** 识别回调错误.*/public void onError(SpeechError error) {if (mTranslateEnable && error.getErrorCode() == 14002) {showTip(error.getPlainDescription(true) + "\n请确认是否已开通翻译功能");} else {showTip(error.getPlainDescription(true));}}};/*** 听写监听器。*/private RecognizerListener mRecognizerListener = new RecognizerListener() {@Overridepublic void onBeginOfSpeech() {// 此回调表示:sdk内部录音机已经准备好了,用户可以开始语音输入showTip("开始说话");}@Overridepublic void onError(SpeechError error) {// Tips:// 错误码:10118(您没有说话),可能是录音机权限被禁,需要提示用户打开应用的录音权限。if (mTranslateEnable && error.getErrorCode() == 14002) {showTip(error.getPlainDescription(true) + "\n请确认是否已开通翻译功能");} else {showTip(error.getPlainDescription(true));}}@Overridepublic void onEndOfSpeech() {// 此回调表示:检测到了语音的尾端点,已经进入识别过程,不再接受语音输入showTip("结束说话");}@Overridepublic void onResult(RecognizerResult results, boolean isLast) {if (mTranslateEnable) {printTransResult(results);} else {String text = JsonParser.parseIatResult(results.getResultString());}if (isLast) {//TODO 最后的结果}}@Overridepublic void onVolumeChanged(int volume, byte[] data) {showTip("当前正在说话,音量大小:" + volume);Log.d(TAG, "返回音频数据:" + data.length);}@Overridepublic void onEvent(int eventType, int arg1, int arg2, Bundle obj) {// 以下代码用于获取与云端的会话id,当业务出错时将会话id提供给技术支持人员,可用于查询会话日志,定位出错原因// 若使用本地能力,会话id为null// if (SpeechEvent.EVENT_SESSION_ID == eventType) {//    String sid = obj.getString(SpeechEvent.KEY_EVENT_SESSION_ID);//    Log.d(TAG, "session id =" + sid);// }}};private void printTransResult(RecognizerResult results) {String trans = JsonParser.parseTransResult(results.getResultString(), "dst");String oris = JsonParser.parseTransResult(results.getResultString(), "src");if (TextUtils.isEmpty(trans) || TextUtils.isEmpty(oris)) {showTip("解析结果失败,请确认是否已开通翻译功能。");}}
}

以上就是这个类的代码 , 基本你们拷过去就能用 .  同时你们附加了这两个类你们需要科大讯飞里面的开发包里面拷出来.

然后具体调用很简单如下:

以上就是调用的代码简单吧  然后你们不知道还要考哪些东西就把这几个文件都拷进去 , 或者看官方文档

好了  .........基本就是这些 , 如果还是没成功就在底下留言 , 我看到我会很快的回复你的!

希望大家工作顺利!!!!!!!

Android 科大讯飞离线语音识别相关推荐

  1. GEC6818开发板JPG图像显示,科大讯飞离线语音识别包Linux_aitalk_exp1227_1398d7c6运行demo程序,开发板实现录音

    GEC6818开发板JPG图像显示 | 开发板实现录音 一.GEC6818开发板JPG图像显示 1.jpg图片特性 2.如何解压缩jpg图片 1.对jpegsrc.v8c.tar.gz进行arm移植 ...

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

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

  3. 科大讯飞离线语音识别安装与运行

    先从官网下载sdk,有点不懂下载的逻辑.. 文件解析: bin/inc下有四个头文件:msp_errors.h msp_types.h qisr.h qtts.h msp_errors.h msp_t ...

  4. Android应用离线中文语音识别PocketSphinx (免费哦~)

    该文章重点在中文语音识别的应用上 目录 前言 一.不太推荐的知名demo 1.官方demo PocketSphinx (https://github.com/cmusphinx/pocketsphin ...

  5. Android平台使用PocketSphinx做离线语音识别,小范围语音99%识别率

    为什么80%的码农都做不了架构师?>>>    最近语音识别很火,但是都是用的在线语音识别,研究了一下离线语音识别,小范围内的语音识别率还不错,在此记录一下 首先本文要说的两个前提1 ...

  6. 安卓Android科大讯飞语音识别代码使用详解

    科大讯飞的语音识别功能用在安卓代码中,我把语音识别写成了Service,然后在Fragment直接调用service服务.科大讯飞语音识别用的是带对话框的那个,直接调用科大讯飞的语音接口,代码采用链表 ...

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

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

  8. android 语音识别 离线,Android离线语音识别 PocketSphinx

    本文将使用PocketSphinx来实现Android平台的离线语音识别 优点: 离线,不用联网 识别较准(大家都说99%  我觉得只有80%) 缺点: 自定义语音命令麻烦  只能小范围识别 网上看了 ...

  9. 手把手的操作——用java调用科大讯飞的离线语音识别dll实现离线识别(JNA实现)(二)

    上一篇的地址手把手的操作--用java调用科大讯飞的离线语音识别dll实现离线识别(JNA实现)(一) 上一篇讲到了最难的地方,参数的转换,这里单独写出来 ** 三.参数的转换(难点) ** 注:本文 ...

  10. 干货:科大讯飞最新语音识别系统和框架深度剖析

    雷锋网按:本文作者魏思,博士,科大讯飞研究院副院长,主要研究领域为语音信号处理.模式识别.人工智能等,并拥有多项业界领先的科研成果.张仕良,潘嘉,张致江科大讯飞研究院研究员.刘聪,王智国科大讯飞研究院 ...

最新文章

  1. 从零开始一起学习SLAM | 为什么要用齐次坐标?
  2. 哈勃望远镜进一步确认宇宙在加速膨胀
  3. 滑丝杠上的无触点感应行程开关 SN04-N
  4. 线程:suspend与resume方法
  5. Linux Shell 通配符、元字符、转义符使用实例介绍
  6. 互掐!美团“抛弃”支付宝,背后的真相到底是啥?
  7. 只让输入数字、字母、中文的输入框
  8. HDU4349--Xiao Ming's Hope(数论)
  9. C#串口SerialPort常用属性方法
  10. 苹果Mac专业的字体管理应用:​​​​RightFont
  11. 《魔鬼搭讪学》读书笔记
  12. linux内核之时间子系统
  13. ZeroBrane Studio远程调试Lua程序(转)
  14. sqlserver Month()函数取日期不足两位的加 0(转载)
  15. email邮箱格式校验
  16. github图书馆座位预约_GitHub上排名前100的图书馆
  17. 生成树协议中的五种状态Spanning Tree
  18. CAD中插入外部参照字体会变繁体_CAD快速入门(二十七):外部参照
  19. 五笔中词组的输入技巧
  20. CDH6.3.2环境搭建

热门文章

  1. 《MySQL技术内幕》读书笔记
  2. C++ API 设计 15 第十章 测试
  3. GitHub 标星 15.3k,Java 编程思想最新中文版
  4. oracle数据库配置连接,Oracle数据库的连接配置(学习笔记)
  5. [渝粤教育] 中国农业大学 大学计算机基础 参考 资料
  6. Java自学要多久?
  7. Eclipse主题插件:Eclipse Color Theme
  8. Python设计模式:策略模式
  9. 中缀表达式求值,中缀表达式转化为二叉树
  10. python常用函数及用法