1 登录讯飞平台,申请账号,创建一个应用
具体步骤可以百度查找
2 进入“我的应用”,下载相应的SDK文件
选择语音听写(流式版)-> Android MSC在这里插入图片描述
3 打开安卓,新建项目
创建一个EditText和一个Button
<androidx.constraintlayout.widget.ConstraintLayout 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”
tools:context=".MainActivity">
<EditText
android:id="@+id/textShow1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="what heard will be shown here"
android:text=""
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.344" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="SPEAK"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textShow1"
app:layout_constraintVertical_bias="0.284" />
</androidx.constraintlayout.widget.ConstraintLayout>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
4 将在官网下载的Android SDK 压缩包中libs目录下所有子文件拷贝至Android工程的libs目录下
5 在安卓项目文件中添加.so文件
在build.gradle(Module:XXX)文件中,在android节点下加入下面的内容(代码的作用是使得项目找到libs下的libmsc.so文件)
sourceSets {
main {
jniLibs.srcDirs = [‘libs’]
}
}
1
2
3
4
5
在这里插入图片描述
比较新的Gradle版本,已经自动实现打包.so文件的功能(在拷贝libs目录下文件后,配置上面的代码,即可完成在项目中添加.so文件)
6 右击libs目录下的msc.jar文件,选择Add As Library
7 sdk下文件夹main/assets/,自带UI页面(iflytek文件夹)和相关其他服务资源文件(语法文件、音频示例、词表),将该文件夹拷贝到项目main目录下
8 在工程 AndroidManifest.xml 文件中添加如下用户权限
APPID
需要在讯飞平台“我的应用”界面中寻找
在这里插入图片描述
package XXXXXXXX;
import androidx.appcompat.app.AppCompatActivity;
import android.nfc.Tag;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.iflytek.cloud.ErrorCode;
import com.iflytek.cloud.InitListener;
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;
public class MainActivity extends AppCompatActivity {
private EditText mResultText;
private Button button;
private static String TAG = "speech"; // 输出log信息
private String engineType = "cloud"; // 语音识别引擎类型
private String resultType = "plain"; // 语音识别结果类型,plain或json
private StringBuffer buffer = new StringBuffer(); // 用于存储结果
private Toast mToast; // 用于输出提示
int ret = 0; // 函数调用返回值
SpeechRecognizer mIat; // 语音识别模型
private RecognizerDialog mIatDialog; // 语音识别对话框
@Override
protected void onCreate(Bundle savedInstanceState) {
SpeechUtility.createUtility(this, SpeechConstant.APPID +"=XXX"); // 在讯飞平台查找
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mResultText = findViewById(R.id.textShow1);
button = findViewById(R.id.button1);
mToast = Toast.makeText(this, "",Toast.LENGTH_SHORT);
// 初始化识别无UI识别对象
// 使用 SpeechRecognizer 对象,即语音识别对话框
mIat = SpeechRecognizer.createRecognizer(this, mInitListener);
// 初始化识别有UI识别对象,即语音识别对话框
mIatDialog = new RecognizerDialog(this, mInitListener);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
buffer.setLength(0);
mResultText.setText(null);
setParam();
mIatDialog.setListener(mRecognizerDialogListener);
mIatDialog.show();
showTip("请开始说话");
}
});
}
/**
* 初始化监听器。
*/
private InitListener mInitListener = new InitListener() {
@Override
public void onInit(int code) {
Log.d(TAG, "SpeechRecognizer init() code = " + code);
if (code != ErrorCode.SUCCESS) {
showTip("初始化失败,错误码:" + code+",请点击网址https://www.xfyun.cn/document/error-code查询解决方案");
}
}
};
// 语音识别对话框监听器
private RecognizerDialogListener mRecognizerDialogListener = new RecognizerDialogListener() {
@Override
public void onResult(RecognizerResult recognizerResult, boolean b) {
//得到识别结果 results, 显示到界面EditText中
if(resultType.equals("plain")) {
buffer.append(recognizerResult.getResultString());
mResultText.setText(buffer.toString());
mResultText.setSelection(mResultText.length());
}
}
@Override
/**
* 识别回调错误.
*/
public void onError(SpeechError error) {
showTip(error.getPlainDescription(true));
}
};
public void setParam() {
mIat.setParameter( SpeechConstant.CLOUD_GRAMMAR, null );
mIat.setParameter( SpeechConstant.SUBJECT, null );
mIat.setParameter(SpeechConstant.RESULT_TYPE, resultType);
mIat.setParameter( SpeechConstant.ENGINE_TYPE, engineType );
mIat.setParameter(SpeechConstant.LANGUAGE, "zh_cn");
mIat.setParameter(SpeechConstant.ACCENT, "mandarin");
mIat.setParameter(SpeechConstant.VAD_BOS, "4000");
mIat.setParameter(SpeechConstant.VAD_EOS, "1000");
mIat.setParameter(SpeechConstant.ASR_PTT,"0");
}
@Override
protected void onDestroy() {
super.onDestroy();
if( null != mIat ){
// 退出时释放连接
mIat.cancel();
mIat.destroy();
}
}
private void showTip(final String str) {
mToast.setText(str);
mToast.show();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
10 拓展-添加语音识别的方言/语种
在这里插入图片描述
11 拓展-开通高级功能
在这里插入图片描述
12 拓展-添加个性化热词
在这里插入图片描述