AS项目集成科大讯飞语音识别功能
关于如何注册、下载SDK Demo的操作,请参考其他高手的文档,本文集中精力在如何将语音识别功能集成到AS项目。
1、将SpeechDemo下的Msc.jar包拷贝到新建项目的libs下
文章图片
文章图片
2、将SpeechDemo下的arm文件夹拷贝到新建项目main下
文章图片
新建项目下面的main新建Jnilibs文件夹,将两个arm文件拷贝进去
文章图片
3、将SpeechDemo main下的assets文件夹拷贝到新建项目main下
assets包含的是一些运行时的动态效果
文章图片
文章图片
4、修改gradle文件
增加如下语句:
【AS项目集成科大讯飞语音识别功能】
文章图片
5、书写activity_main.xml文件
6、书写MainActivity.java文件
package com.example.administrator.testlistener;
import java.util.HashMap;
import java.util.LinkedHashMap;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONTokener;
import com.iflytek.cloud.RecognizerResult;
import com.iflytek.cloud.SpeechConstant;
import com.iflytek.cloud.SpeechError;
import com.iflytek.cloud.SpeechRecognizer;
import com.iflytek.cloud.SpeechUtility;
import com.iflytek.cloud.ui.RecognizerDialog;
import com.iflytek.cloud.ui.RecognizerDialogListener;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {//存放听写分析结果文本
private HashMap, String> hashMapTexts = new LinkedHashMap<>();
private Button btn;
//初始化控件
private TextView txt;
SpeechRecognizer hearer;
//听写对象RecognizerDialog dialog;
//讯飞提示框@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 语音配置对象初始化
SpeechUtility.createUtility(MainActivity.this, SpeechConstant.APPID + "=xxxxxx【注:替换成你的appid】");
btn = findViewById(R.id.btn);
txt = findViewById(R.id.txt);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 1.创建SpeechRecognizer对象,第2个参数:本地听写时传InitListener
hearer = SpeechRecognizer.createRecognizer( MainActivity.this, null);
// 交互动画
dialog = new RecognizerDialog(MainActivity.this, null);
// 2.设置听写参数,详见《科大讯飞MSC API手册(Android)》SpeechConstant类
hearer.setParameter(SpeechConstant.DOMAIN, "iat");
// domain:域名
hearer.setParameter(SpeechConstant.LANGUAGE, "zh_cn");
hearer.setParameter(SpeechConstant.ACCENT, "mandarin");
// mandarin:普通话//3.开始听写
dialog.setListener(new RecognizerDialogListener() {//设置对话框@Override
public void onResult(RecognizerResult results, boolean isLast) {
// TODO 自动生成的方法存根
Log.d("Result", results.getResultString());
//(1) 解析 json 数据<< 一个一个分析文本 >>
StringBuffer strBuffer = new StringBuffer();
try {
JSONTokener tokener = new JSONTokener(results.getResultString());
Log.i("TAG", "Test"+results.getResultString());
Log.i("TAG", "Test"+results.toString());
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);
strBuffer.append(obj.getString("w"));
}
} catch (Exception e) {
e.printStackTrace();
}
//String text = strBuffer.toString();
// (2)读取json结果中的sn字段
String sn = null;
try {
JSONObject resultJson = new JSONObject(results.getResultString());
sn = resultJson.optString("sn");
} catch (JSONException e) {
e.printStackTrace();
}//(3) 解析语音文本<< 将文本叠加成语音分析结果>>
hashMapTexts.put(sn, strBuffer.toString());
StringBuffer resultBuffer = new StringBuffer();
//最后结果
for (String key : hashMapTexts.keySet()) {
resultBuffer.append(hashMapTexts.get(key));
}txt.setText(resultBuffer.toString());
}@Override
public void onError(SpeechError error) {
// TODO 自动生成的方法存根
error.getPlainDescription(true);
}
});
dialog.show();
//显示对话框
}
});
}
}
7、效果图
文章图片
推荐阅读
- Activiti(一)SpringBoot2集成Activiti6
- 私有化轻量级持续集成部署方案--03-部署web服务(下)
- 17|17 关山松 第二课作业#公众号项目# D20
- RxJava|RxJava 在Android项目中的使用(一)
- Hacking|Hacking with iOS: SwiftUI Edition - SnowSeeker 项目(一)
- 靠QQ月入上万灰色暴利偏门的项目
- spring|spring boot项目启动websocket
- Spring集成|Spring集成 Mina
- vuex|vuex 基础结构
- 区块链开发平台(以太坊)