前提说明:讯飞SDK与appID(后台申请)是一一对应的、否则就会导致初始化不成功!

1、创建appID并下载SDK(没有账号的先行注册)

https://console.xfyun.cn/app/myapp

创建完成后、如图

下载解压包

simple就是官方demo、默认会填写你已经申请好的appid、你可以比这官方Demo写


2、自己再封装lib、仅保留语音转文字功能、

语音转换核心控制类:

/*** 音频读写转换*/
public class RecognizeSpeechManager implements RecognizerListener, InitListener {private static final String TAG = "RecognizeSpeechManager";private RecognizeListener recognizeListener;// 语音听写对象private SpeechRecognizer iat;private StringBuffer charBufffer = new StringBuffer();private WeakReference<Context> bindContext;private static RecognizeSpeechManager instance;private RecognizeSpeechManager() {}public static RecognizeSpeechManager instance() {if (instance == null) {instance = new RecognizeSpeechManager();}return instance;}public void setRecognizeListener(RecognizeListener recognizeListener) {this.recognizeListener = recognizeListener;}public void init(Context context) {if (bindContext == null) {bindContext = new WeakReference<Context>(context);}if (iat == null) {iat = SpeechRecognizer.createRecognizer(bindContext.get(), this);}}@Overridepublic void onInit(int code) {if (code != ErrorCode.SUCCESS) {Log.d(TAG, "init error code " + code);}}/*** 开始监听* ErrorCode.SUCCESS 监听成功状态码*/public int startRecognize() {setParam();return iat.startListening(this);}/*** 取消听写*/public void cancelRecognize() {iat.cancel();}/*** 停止听写*/public void stopRecognize() {iat.stopListening();}public void release() {iat.cancel();iat.destroy();iat = null;bindContext.clear();bindContext = null;charBufffer.delete(0, charBufffer.length());}@Overridepublic void onVolumeChanged(int i, byte[] bytes) {}@Overridepublic void onBeginOfSpeech() {Log.d(TAG, "onBeginOfSpeech");}@Overridepublic void onEndOfSpeech() {Log.d(TAG, "onEndOfSpeech isListening " + iat.isListening());}@Overridepublic void onResult(RecognizerResult results, boolean b) {if (recognizeListener != null) {recognizeListener.onNewResult(printResult(results));recognizeListener.onTotalResult(charBufffer.toString(), iat.isListening());}}@Overridepublic void onError(SpeechError speechError) {if (recognizeListener != null) {recognizeListener.onError(speechError);}}@Overridepublic void onEvent(int i, int i1, int i2, Bundle bundle) {Log.d(TAG, "onEvent type " + i);}private String printResult(RecognizerResult results) {String text = JsonParser.parseIatResult(results.getResultString());Log.d(TAG, "printResult " + text + " isListening " + iat.isListening());String sn = null;// 读取json结果中的sn字段try {JSONObject resultJson = new JSONObject(results.getResultString());sn = resultJson.optString("sn");} catch (JSONException e) {e.printStackTrace();}if (!TextUtils.isEmpty(text)) {charBufffer.append(text);}return text;}/*** 参数设置** @return*/private void setParam() {// 清空参数iat.setParameter(SpeechConstant.PARAMS, null);// 设置听写引擎iat.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD);// 设置返回结果格式iat.setParameter(SpeechConstant.RESULT_TYPE, "json");iat.setParameter(SpeechConstant.LANGUAGE, "zh_cn");iat.setParameter(SpeechConstant.ACCENT, "mandarin");//此处用于设置dialog中不显示错误码信息//iat.setParameter("view_tips_plain","false");// 设置语音前端点:静音超时时间,即用户多长时间不说话则当做超时处理iat.setParameter(SpeechConstant.VAD_BOS, "10000");// 设置语音后端点:后端点静音检测时间,即用户停止说话多长时间内即认为不再输入, 自动停止录音iat.setParameter(SpeechConstant.VAD_EOS, "10000");// 设置标点符号,设置为"0"返回结果无标点,设置为"1"返回结果有标点iat.setParameter(SpeechConstant.ASR_PTT, "1");// 设置音频保存路径,保存音频格式支持pcm、wav,设置路径为sd卡请注意WRITE_EXTERNAL_STORAGE权限/* iat.setParameter(SpeechConstant.AUDIO_FORMAT, "wav");iat.setParameter(SpeechConstant.ASR_AUDIO_PATH, Environment.getExternalStorageDirectory() + "/msc/iat.wav");*/}}
RecognizeListener 接口、用于语音转换成功后、文本回调
/*** 听写回调*/
public interface RecognizeListener {void onNewResult(String result);void onTotalResult(String result,boolean isLast);void onError(SpeechError speechError);
}

解析工具类、来自官方Demo

/*** Json结果解析类*/
public class JsonParser {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();}public static String parseGrammarResult(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");for(int j = 0; j < items.length(); j++){JSONObject obj = items.getJSONObject(j);if(obj.getString("w").contains("nomatch")){ret.append("没有匹配结果.");return ret.toString();}ret.append("【结果】" + obj.getString("w"));ret.append("【置信度】" + obj.getInt("sc"));ret.append("\n");}}} catch (Exception e) {e.printStackTrace();ret.append("没有匹配结果.");} return ret.toString();}public static String parseLocalGrammarResult(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");for(int j = 0; j < items.length(); j++){JSONObject obj = items.getJSONObject(j);if(obj.getString("w").contains("nomatch")){ret.append("没有匹配结果.");return ret.toString();}ret.append("【结果】" + obj.getString("w"));ret.append("\n");}}ret.append("【置信度】" + joResult.optInt("sc"));} catch (Exception e) {e.printStackTrace();ret.append("没有匹配结果.");} return ret.toString();}public static String parseTransResult(String json,String key) {StringBuffer ret = new StringBuffer();try {JSONTokener tokener = new JSONTokener(json);JSONObject joResult = new JSONObject(tokener);String errorCode = joResult.optString("ret");if(!errorCode.equals("0")) {return joResult.optString("errmsg");}JSONObject transResult = joResult.optJSONObject("trans_result");ret.append(transResult.optString(key));/*JSONArray words = joResult.getJSONArray("results");for (int i = 0; i < words.length(); i++) {JSONObject obj = words.getJSONObject(i);ret.append(obj.getString(key));}*/} catch (Exception e) {e.printStackTrace();}return ret.toString();}
}

 权限配置

   <!--连接网络权限,用于执行云端语音能力 --><uses-permission android:name="android.permission.INTERNET"/><!--获取手机录音机使用权限,听写、识别、语义理解需要用到此权限 --><uses-permission android:name="android.permission.RECORD_AUDIO"/><!--读取网络信息状态 --><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><!--获取当前wifi状态 --><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.WRITE_EXTERNAL_STORAGE"/><!--外存储读权限,构建语法需要用到此权限 --><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/><!--配置权限,用来记录应用配置信息 --><uses-permission android:name="android.permission.WRITE_SETTINGS"/><!--手机定位信息,用来为语义等功能提供定位,提供更精准的服务--><!--定位信息是敏感信息,可通过Setting.setLocationEnable(false)关闭定位请求 --><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

 3、主工程Application中初始化 、并依赖recognizespeech lib库

//注意、appid=xxxx 不能省略(xxxx 写上自己的appid)
SpeechUtility.createUtility(this,"appid=xxxxx"
)

如图:

测试类代码

class MainActivity : AppCompatActivity(),RecognizeListener {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)RecognizeSpeechManager.instance().init(this)RecognizeSpeechManager.instance().setRecognizeListener(this)btStart.setOnClickListener {RecognizeSpeechManager.instance().startRecognize()}btCancel.setOnClickListener {RecognizeSpeechManager.instance().cancelRecognize()}btStop.setOnClickListener {RecognizeSpeechManager.instance().stopRecognize()}}override fun onDestroy() {super.onDestroy()RecognizeSpeechManager.instance().release()}@SuppressLint("SetTextI18n")override fun onNewResult(result: String?) {tvContent.append("最新翻译:$result \n")}@SuppressLint("SetTextI18n")override fun onTotalResult(result: String, isLast: Boolean) {tvContent.append("所有翻译:$result \n")}override fun onError(speechError: SpeechError?) {Toast.makeText(this,"出错了 $speechError",Toast.LENGTH_SHORT).show()}
}

 activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:gravity="center"tools:context=".MainActivity"><TextViewandroid:id="@+id/tvContent"android:padding="20dp"android:layout_gravity="top"android:layout_width="match_parent"android:layout_height="wrap_content"/><Buttonandroid:layout_marginTop="50dp"android:id="@+id/btStart"android:text="开始识别"android:layout_width="wrap_content"android:layout_height="wrap_content"/><Buttonandroid:id="@+id/btCancel"android:layout_marginTop="20dp"android:text="取消"android:layout_width="wrap_content"android:layout_height="wrap_content"/><Buttonandroid:id="@+id/btStop"android:text="停止"android:layout_marginTop="20dp"android:layout_width="wrap_content"android:layout_height="wrap_content"/></LinearLayout>

至此OVer、Demo https://download.csdn.net/download/BirdEatBug/19714846?spm=1001.2014.3001.5501

Android 科大讯飞、语音听写集成指南相关推荐

  1. Android 科大讯飞 语音听写

    这几天在搞一个语音识别的项目 用到i的是科大讯飞的语音服务,第一次搞语音识别,在这里记录一下,也希望对大家有用.废话不多说进入正题 一.要用到科大讯飞的语音识别功能,肯定是要他的开发者平台申请账号,创 ...

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

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

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

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

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

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

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

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

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

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

  7. Android科大讯飞语音集成,非常详细的使用讲解

    讯飞语音开发集成地址http://www.xfyun.cn/ 解压后的doc文件夹下的msc develop 文件中有详细集成步骤    AppId:   1.先要注册开发者账户, 添加我的应用 , ...

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

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

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

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

  10. 安卓TTS语音合成经验分享(科大讯飞语音+)集成

    应用场景:足浴软件,技师钟房安排调派和队列排序查看,语音播报提醒.老程序是使用双屏显卡,windows系统PC上运行一个无人值守桌面程序.如今安卓机顶盒(WIFI)和MINI电视棒通过HDMI接口和支 ...

最新文章

  1. 喷涂机器人保养应该注意的七个事项
  2. 我写的第一本书《TypeScript 入门教程》
  3. CentOS 6.7安装Storm 0.9.7
  4. SAP UI5 调试模式标志位的持久化原理 - local storage
  5. 如何保护你的linux操作系统
  6. afreecatv 回放下载_行车记录仪怎么看回放?行车记录仪停车后能自动录像吗
  7. 【2016年第6期】数据产品在线定制平台的探索实践
  8. oracle_Grid Infrastructure 启动的五大问题
  9. IT的2017,面临数字生态系统新挑战,该怎么办?
  10. freetype字体位图转距离场_关于freetype的移植和其官方demos的使用总结
  11. TFS2018环境搭建一硬件要求
  12. qt实现抽屉效果,类似qq的好友功能
  13. 《腾讯产品启示录》学习笔记
  14. 17届智能车竞赛技术报告 | 常熟理工学院-昆承湖二队
  15. Seven languages in seven weeks (notes on Scala)
  16. Numpy.fromfunction用法
  17. Everything Toolbar - 文件搜索神器everything的增强插件
  18. 通过修改环境变量修改当前进程使用的系统 Temp 文件夹的路径
  19. bugly怎么读_腾讯Bugly巨坑:使用不当造成UI界面卡死
  20. STM32CubeMX学习笔记(50)——USB接口使用(DFU固件升级)

热门文章

  1. Java 的下载安装教程
  2. 流氓软件的完全卸载的一些方法
  3. c语言程序运行时可以从键盘上读入,C语言程序设计题库之
  4. 大型网站应用之海量数据解决方案
  5. mysql是应用软件还是系统软件_数据库管理系统属于应用软件吗?
  6. Android Sublime源码阅读姿势
  7. HFSS脚本建模入门
  8. 3dsmax2021软件安装教程
  9. 编程与python的区别_python与其他编程语言区别全在这
  10. python基本语句大全_python常见语句汇总