第一步:将下载好的Sdk解压,将压缩文件中的libs下的jar文件放到项目中的libs包下,将压缩文件中的lisb下除jar文件放到main下的jniLibs包中
第二步:Sdk初始化,建议选择在自定义的application中初始化。
//初始化讯飞语音
SpeechUtility.createUtility(getApplicationContext(), SpeechConstant.APPID + "=5bbf3e23");
第三步:添加权限,建议自己看文档
<!-- 连接网络权限,用于执行云端语音能力 -->
<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.READ_CONTACTS" />
<!-- 外存储写权限,构建语法需要用到此权限 -->
<uses-permission android:name="android.permission.VIBRATE" />
<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"
tools:ignore="ProtectedPermissions" />
<!-- 手机定位信息,用来为语义等功能提供定位,提供更精准的服务 -->
<!-- 定位信息是敏感信息,可通过Setting.setLocationEnable(false)关闭定位请求 -->
<!-- <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> -->
<!-- 如需使用人脸识别,还要添加:摄相头权限,拍照需要用到 -->
<uses-permission android:name="android.permission.CAMERA" />
打包或者生成APK的时候进行混淆
-keep class com.iflytek.**{*;}
-keepattributes Signature
无Ui界面
//语音听写
private void voice(){
//初始化识别无UI识别对象
//使用SpeechRecognizer对象,可根据回调消息自定义界面;
SpeechRecognizer mIat = SpeechRecognizer.createRecognizer(this, mInitListener);
//设置语法ID和 SUBJECT 为空,以免因之前有语法调用而设置了此参数;或直接清空所有参数,具体可参考 DEMO 的示例。
mIat.setParameter(SpeechConstant.CLOUD_GRAMMAR, null);
mIat.setParameter(SpeechConstant.SUBJECT, null);
//设置返回结果格式,目前支持json,xml以及plain 三种格式,其中plain为纯听写文本内容
mIat.setParameter(SpeechConstant.RESULT_TYPE, "json");
//此处engineType为“cloud”
mIat.setParameter(SpeechConstant.ENGINE_TYPE, "cloud");
//设置语音输入语言,zh_cn为简体中文
mIat.setParameter(SpeechConstant.LANGUAGE, "zh_cn");
//设置结果返回语言
mIat.setParameter(SpeechConstant.ACCENT, "zh_cn");
// 设置语音前端点:静音超时时间,单位ms,即用户多长时间不说话则当做超时处理
//取值范围{1000~10000}
mIat.setParameter(SpeechConstant.VAD_BOS, "4000");
//设置语音后端点:后端点静音检测时间,单位ms,即用户停止说话多长时间内即认为不再输入,
//自动停止录音,范围{0~10000}
mIat.setParameter(SpeechConstant.VAD_EOS, "1000");
//设置标点符号,设置为"0"返回结果无标点,设置为"1"返回结果有标点
mIat.setParameter(SpeechConstant.ASR_PTT, "0");
//开始识别,并设置监听器
mIat.startListening(new RecogListener());
}
private class RecogListener implements RecognizerListener {
//音量变化
@Override
public void onVolumeChanged(int i, byte[] bytes) {
//实现麦克风随着音量的变化而变化
image.getDrawable().setLevel(9000 * i / 100);
}
//开始录音
@Override
public void onBeginOfSpeech() {
}
//结束录音
@Override
public void onEndOfSpeech() {
}
//解析数据
@Override
public void onResult(RecognizerResult recognizerResult, boolean b) {
String text = JsonParser.parseIatResult(recognizerResult.getResultString());
String sn = null;
// 读取json结果中的sn字段
try {
JSONObject resultJson = new JSONObject(recognizerResult.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));
}
text.setText(resultBuffer.toString());
}
//会话发生错误回调接口
@Override
public void onError(SpeechError speechError) {
}
// 扩展用接口
@Override
public void onEvent(int i, int i1, int i2, Bundle bundle) {
}
}
解析Json类
/**
* Json结果解析类
*/
public class JsonParser {
private static StringBuffer ret;
public static String parseIatResult(String json) {
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"));
}
} catch (Exception e) {
e.printStackTrace();
}
return ret.toString();
}
实现麦克风效果滚动
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@android:id/background"
//前背景图
android:drawable="@drawable/background" />
<item android:id="@android:id/progress">
<clip
android:clipOrientation="vertical"
//背景图
android:drawable="@drawable/progress"
android:gravity="bottom" />
</item>
</layer-list>