Android讯飞实现语音转文字功能

一,前言

近期新版本的需求中添加了语音转文字的功能 ,经过综合的对比我还是选择了讯飞,下面记录一下大概的步骤吧

二,去讯飞官网下载语音听写sdk

https://www.xfyun.cn/services/voicedictation
Android讯飞实现语音转文字功能_第1张图片

三,下载完打开是这样的

Android讯飞实现语音转文字功能_第2张图片

我们需要把jar 和v7、v8包粘到我们项目对应的位置

Android讯飞实现语音转文字功能_第3张图片
并在app的build.radle 中 android{}里添加

sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }

四,检查添加权限

 
 
 
 
 
 
 
 
 

五,布局文件

Android讯飞实现语音转文字功能_第4张图片




    


        

            
        

        
    


六,代码

public class MainActivity extends AppCompatActivity {

    private TextView toText;
    private EditText resultText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        toText = findViewById(R.id.toText);
        resultText = findViewById(R.id.result_text);
        SpeechUtility.createUtility(this, SpeechConstant.APPID + "=你在讯飞官网获取的AppID");


        //长按
        toText.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                getPermission();
                return true;
            }
        });
    }

    private void getPermission() {
        //申请动态权限
        new RxPermissions((Activity) this)
                .requestEachCombined(Manifest.permission.RECORD_AUDIO, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)
                .subscribe(new Consumer() {
                    @Override
                    public void accept(com.tbruyelle.rxpermissions2.Permission permission) throws Exception {
                        if (permission.granted) {
                            btnVoice();
                            //权限已经都通过了,可以将程序继续打开了
                        } else if (permission.shouldShowRequestPermissionRationale) {
                            Log.e("onFail: ", "权限被拒绝");
                        } else {
                            Log.e("onFail: ", "权限被始终拒绝");
                        }
                    }
                });


    }
    
    //第三方讯飞语音转文字 赋值
    private void btnVoice() {

        RecognizerDialog dialog = new RecognizerDialog(this, null);
        dialog.setParameter(SpeechConstant.LANGUAGE, "zh_cn");
        dialog.setParameter(SpeechConstant.ACCENT, "mandarin");

        dialog.setListener(new RecognizerDialogListener() {
            @Override
            public void onResult(RecognizerResult recognizerResult, boolean b) {
                printResult(recognizerResult);
            }

            @Override
            public void onError(SpeechError speechError) {

            }
        });
        dialog.show();
        Toast.makeText(this,"请开始说话",Toast.LENGTH_LONG).show();
    }

    //回调结果:
    private void printResult(RecognizerResult results) {
        String text = parseIatResult(results.getResultString());
        // 自动填写地址
        resultText.append(text);
    }

    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"));
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return ret.toString();
    }


}

你可能感兴趣的:(个人,android,app,安卓,语音识别)