需求来源:当我们在不方便敲键盘打字的情况下,可以通过说话发出的语音转文字,该功能极大的方便了我们的生活。
首先,你需要去讯飞开放平台注册一个账号。
然后,找到图片中语音听写(流式版)的位置:
下载SDK,如下图所示:
最后创建一个新应用,如下图所示:
记住你的APPID,后面需要用的。
你刚才不是下载了SDK文件的吗,找到它在电脑中的位置,解压,目录如下:
新建一个MainActivity.java文件,把这个assets文件,libs文件,添加到你的Android项目中,如下图所示:
libs下的Msc.jar文件怎么添加到自己的项目中,自己去查哈!
然后,我们到build.gradle文件中,
位置如下:
添加如下代码:
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
顺便检查一下上面的Msc.jar文件是否添加成功:
新建一个接口XunFeiCallbackListener.java:
package com.application.screenshot;
import com.iflytek.cloud.RecognizerResult;
public interface XunFeiCallbackListener {
void onFinish(RecognizerResult results);
}
创建一个工具类XunFeiUtil.java:
package com.application.screenshot;
import android.content.Context;
import com.iflytek.cloud.RecognizerResult;
import com.iflytek.cloud.SpeechConstant;
import com.iflytek.cloud.SpeechError;
import com.iflytek.cloud.SpeechUtility;
import com.iflytek.cloud.ui.RecognizerDialog;
import com.iflytek.cloud.ui.RecognizerDialogListener;
import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONTokener;
public class XunFeiUtil {
public static String appid = "自己的APPID";
public static void initXunFei(Context context){
SpeechUtility.createUtility(context, SpeechConstant.APPID+"="+appid);
}
//有问题
public static void startVoice(Context context,final XunFeiCallbackListener callbackListener){
RecognizerDialog dialog=new RecognizerDialog(context,null);
dialog.setParameter(SpeechConstant.LANGUAGE,"zh_cn");
dialog.setParameter(SpeechConstant.ACCENT, "mandarin");
dialog.setParameter(SpeechConstant.ASR_PTT, "0");
dialog.setListener(new RecognizerDialogListener() {
@Override
public void onResult(RecognizerResult recognizerResult, boolean b) {
callbackListener.onFinish(recognizerResult);
}
@Override
public void onError(SpeechError speechError) {
}
});
dialog.show();
}
public static String parseInResult(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"));
}
}catch (Exception e){
e.printStackTrace();
}
return ret.toString();
}
}
activity_main.xml布局如下:
<Button
android:id="@+id/btn_click"
android:text="点击打开讯飞语音识别"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<EditText
android:id="@+id/result"
android:layout_below="@id/btn_click"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="此处显示你所录下的内容"
/>
MainActivity.java代码如下:
package com.application.screenshot;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.media.MediaScannerConnection;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.DisplayMetrics;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.iflytek.cloud.RecognizerResult;
import static com.application.screenshot.XunFeiUtil.*;
import java.io.File;
import java.io.FileOutputStream;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button btn_click;
private EditText mResultText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initXunFei(this);
btn_click=findViewById(R.id.btn_click);
mResultText=findViewById(R.id.result);
btn_click.setOnClickListener(this);
}
@Override
public void onClick(View view) {
startVoice(this,new XunFeiCallbackListener(){
@Override
public void onFinish(RecognizerResult results) {
String text =parseInResult(results.getResultString());
mResultText.append(text);
}
});
}
}
最后,重构一下代码,检查是否有问题,
如果是在自己的手机上运行,那你需要先到设置里去打开你的录音权限!
运行效果如下:
如果你的代码运行出现闪退等问题的,欢迎大家评论区讨论或滴滴我!