这几天在搞一个语音识别的项目 用到i的是科大讯飞的语音服务,第一次搞语音识别,在这里记录一下,也希望对大家有用。废话不多说进入正题

一、要用到科大讯飞的语音识别功能,肯定是要他的开发者平台申请账号,创建应用,拿到对应的8位数的key

然后下载语音识别的sdk(上图中左边有sdk下载)

二、为自己的应用开通语音识别服务

在科大讯飞开放平台里左上角的产品服务里面选择语音识别进入到里面的页面,立即开通,选择自己的应用确定开通即可

三、sdk在android studio中的集成

官方网站有给出具体的集成方案给出链接(点击打开链接)

四、具体代码

初始化

把12345678换为你申请的应用的八位数key

SpeechUtility.createUtility(context, SpeechConstant.APPID +"=12345678");

Main'Act'ivi

    // 语音听写对象private SpeechRecognizer mIat;// 语音听写UIprivate RecognizerDialog mIatDialog;// 用HashMap存储听写结果private HashMap<String, String> mIatResults = new LinkedHashMap<String, String>();// 引擎类型private String mEngineType = SpeechConstant.TYPE_CLOUD;
 @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initSpeech();btn_in_message.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {speech();}});btn_sent_pro.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {send(et_in_message.getText().toString());}});}


//初始化语音private void initSpeech() {mIat = SpeechRecognizer.createRecognizer(MainActivity.this, mInitListener);mIatDialog = new RecognizerDialog(MainActivity.this, mInitListener);mSharedPreferences = MainActivity.this.getSharedPreferences("com.iflytek.setting",      Activity.MODE_PRIVATE);}
    /**** 初始化听写*/private InitListener mInitListener = new InitListener() {@Overridepublic void onInit(int code) {if (code != ErrorCode.SUCCESS) {showTip("初始化失败,错误码:" + code);}}};



/*** 语音监听器。*/private RecognizerListener mRecognizerListener = new RecognizerListener() {@Overridepublic void onBeginOfSpeech() {// 此回调表示:sdk内部录音机已经准备好了,用户可以开始语音输入showTip("开始说话");}@Overridepublic void onError(SpeechError error) {// Tips:// 错误码:10118(您没有说话),可能是录音机权限被禁,需要提示用户打开应用的录音权限。// 如果使用本地功能(语记)需要提示用户开启语记的录音权限。showTip(error.getPlainDescription(true));}@Overridepublic void onEndOfSpeech() {showTip("结束说话");}@Overridepublic void onResult(RecognizerResult results, boolean isLast) {Log.d("音频", results.getResultString());}@Overridepublic void onVolumeChanged(int volume, byte[] data) {showTip("当前正在说话,音量大小:" + volume);Log.d("音频", "返回音频数据:" + 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 speech() {
 FlowerCollector.onEvent(MainActivity.this, "iat_recognize");// 设置参数setParam();boolean isShowDialog = mSharedPreferences.getBoolean(getString(R.string.pref_key_iat_show), true);if (isShowDialog) {// 显示听写对话框mIatDialog.setListener(mRecognizerDialogListener);mIatDialog.show();txt = (TextView)mIatDialog.getWindow().getDecorView().findViewWithTag("textlink");txt.setText("");showTip(getString(R.string.text_begin));} else {// 不显示听写对话框retCode = mIat.startListening(mRecognizerListener);if (retCode != ErrorCode.SUCCESS) {showTip("听写失败,错误码:" + retCode);} else {Log.e("tingxie:", "失败");showTip(getString(R.string.text_begin));}}}

    /*** 听写回调监听器*/private RecognizerDialogListener mRecognizerDialogListener = new RecognizerDialogListener() {public void onResult(RecognizerResult results, boolean isLast) {printResult(results); //结果解释在后面给出工具类}/*** 识别回调错误.*/public void onError(SpeechError error) {showTip(error.getPlainDescription(true));}};

工具类
    private void printResult(RecognizerResult results) {String text = Tool.parseIatResult(results.getResultString());Log.e("结果:", text);if (!"".equals(text)) {send(text);}
    String sn = null;// 读取json结果中的sn字段try {JSONObject resultJson = new JSONObject(results.getResultString());sn = resultJson.optString("sn");} catch (JSONException e) {e.printStackTrace();}mIatResults.put(sn, text);StringBuffer resultBuffer = new StringBuffer();for (String key : mIatResults.keySet()) {resultBuffer.append(mIatResults.get(key));}et_in_message.setText(resultBuffer.toString());et_in_message.setSelection(et_in_message.length());
 }
解释Tool
public static String parseIatResult(String json) {StringBuffer ret = new StringBuffer();try {JSONTokener tokener = new JSONTokener(json);JSONObject joResult = new JSONObject(tokener);JSONArray words = joResult.getJSONArray("ws");for (int i = 0; i < words.length(); i++) {// 转写结果词,默认使用第一个结果JSONArray items = words.getJSONObject(i).getJSONArray("cw");JSONObject obj = items.getJSONObject(0);ret.append(obj.getString("w"));
//              如果需要多候选结果,解析数组其他字段
//              for(int j = 0; j < items.length(); j++)
//              {
//                  JSONObject obj = items.getJSONObject(j);
//                  ret.append(obj.getString("w"));
//              }}} catch (Exception e) {e.printStackTrace();}return ret.toString();}
代码就到这里了,大家可以去试下 ,有什么问题欢迎提问(写的可能有错误欢迎提出错误)

Android 科大讯飞 语音听写相关推荐

  1. android集成科大讯飞语音听写和语音合成

    android集成科大讯飞语音听写和语音合成 集成科大讯飞语音听写和语音合成,语音听写只是语音识别下面的一部分,别弄混淆了,由于科大讯飞暂未开放gradle引包方式,所以目前集成还是手动引包.我的流程 ...

  2. Android 科大讯飞 语音转文字

    Android 科大讯飞 语音转文字 语音听写SDK适配安卓6.0需要手动申请权限,各位可以自信查询资料实现,关于语音听写SDK的开发,参考科大讯飞开放平台官网为准 第一,首先去科大讯飞官网注册一个账 ...

  3. 接入科大讯飞语音听写,增加语音动画,类似京东语音搜索功能

    前言:小白第一次接入科大讯飞语音听写,接入还是比较简单的,先看效果图无UI界面 Demo地址拿去 效果图有两部分,一是接入科大讯飞语音听写功能,可以实现将语音转换成文字. 二是看到的语音音量动画效果, ...

  4. 集成科大讯飞语音听写功能

    一.准备工作 1.创建应用,并获取appId: 2.下载科大讯飞语音听写功能的jar包和so包(http://www.xfyun.cn/sdk/dispatcher): 3.将jar包添加到libs中 ...

  5. 科大讯飞语音听写app闪退

    运用科大讯飞的SDK写了一个语音听写的app,然后遇到了一个问题,弄过了好几天,终于解决了,运用Android Studio写的,问题如下: 解决方法: 在你用AS创建的项目中libs文件夹下,新建一 ...

  6. Android科大讯飞语音按队列播报

    在Android开发中,语音播报经常使用,但是,在使用过程中会发现,如果语音来源过于块,频率过高,在前一条没有播放完的情况下会执行第二条播放,本篇文章用来解决这个问题. 一.科大讯飞语音集成: 1.在 ...

  7. Android 科大讯飞语音SDK集成步骤

    前言 科大讯飞语音虽好,其严格的认证与校验确实精密,不过也大大提高了开发者的集成难度,并非危言耸听,我想大多数人都有经历过 11210(用户ID与离线资源不匹配) 21480( 离线引擎GUID不一致 ...

  8. 909422229_科大讯飞语音听写Java web API接口

    技术交流群:958923746,有学习视频,文档等. 1. 接口说明 语音听写接口可将语音(≤60秒)转换成对应的文字信息.本接口适用于将音频一次性发送至云端,块式传输. 2. 接口地址 POST h ...

  9. python实现调用科大讯飞语音听写(将音频识别成文字输出)

    一.大致流程 1)申请科大讯飞账号(https://passport.xfyun.cn/register) 2)创建应用(应用平台选择WebAPI) 3)查看开发文档 4)根据开发文档和示例代码进行调 ...

最新文章

  1. JPA入门到精通 - JPA入门
  2. java中override快捷键_【基础回溯1】面试又被 Java 基础难住了?推荐你看看这篇文章。...
  3. C++——《算法分析与设计》实验报告——箱子装载问题
  4. ARKit从入门到精通(2)-ARKit工作原理及流程介绍
  5. Qt Creator创建自定义效果和材质
  6. 屌丝笔记本玩Windows Phone 8开发(在Windows Server 2012中安装WP8 SDK)
  7. 热烈庆祝个人博客突破1万人!
  8. c++对象模型大总结:第1-4章、对象初探与构造函数
  9. python+seleniun+pyqt5 易班经验刷取开发记录
  10. VC6.0 2 VC2008 移植 中多字节字符集和Unicode之间的互换
  11. 数据结构算法常见面试考题
  12. baidumap vue 判断范围_vue-baidu-map 行政区域划分
  13. 百度关键词排名查询源码_推荐4个Google关键词排名查询工具
  14. Linus 一生只为寻找欢笑(下)-转
  15. Matlab中统计灰度值出现的次数
  16. Windows连接ssh时 Permissions for ‘.pem‘ are too open解决方法
  17. 破解苹果电脑开机密码
  18. linux根据端口限速,Linux 中限制网络带宽使用trickle或wondershaper
  19. Matlab的residuez和residue的区别,举例
  20. linq和lambda_最小起订量:应用于模拟对象的Linq,Lambda和谓词

热门文章

  1. 身份证OCR识别是什么?
  2. PHP检查端口是否可以被绑定
  3. 「GoCN酷Go推荐」高性能内存缓存 ristretto
  4. markdown 高级复杂表格技巧
  5. 问题:npm如何设置仓库地址?
  6. JAVA Set 交集,差集,并集
  7. css3实现下拉列表框
  8. 惊闻!同学被诈骗2万美金!骗子的良心不会痛吗?
  9. TSQL与PL/SQL的比较(不完全版)
  10. ArcGIS空间数据查询与处理