1.到http://www.xfyun.cn/?token=838b6419-6f9c-4644-a636-56785e709db8&account_id=3588587452   讯飞官网注册然后创建应用

得到appid






2.下载第一个语音识别的SDK    然后解压





3.解压出来之后把assets和libs里面的都复制到你的项目中






4.然后在导入一个json解析类到时候得到字符串用到解析        链接:https://pan.baidu.com/s/1geDouS7 密码:tlbf


 




5.当然还要在清单文件里面配置一哈           添加权限

<!--连接网络权限,用于执行云端语音能力 -->
    <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.WRITE_EXTERNAL_STORAGE"/>
    <!--外存储读权限,构建语法需要用到此权限 -->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <!--配置权限,用来记录应用配置信息 -->
    <uses-permission android:name="android.permission.WRITE_SETTINGS"/>
    <!--手机定位信息,用来为语义等功能提供定位,提供更精准的服务-->
    <!--定位信息是敏感信息,可通过Setting.setLocationEnable(false)关闭定位请求 -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <!--如需使用人脸识别,还要添加:摄相头权限,拍照需要用到 -->
    <uses-permission android:name="android.permission.CAMERA" />




6.在项目的build.gradle里面配置

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





7.然后在主函数里面写代码

import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
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;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.HashMap;
import java.util.LinkedHashMap;


public class MainActivity extends AppCompatActivity {
     private TextView tv1;
     private SpeechRecognizer speechRecognizer;
     private RecognizerDialog recognizerDialog;
     private HashMap<String, String> hashMap= new LinkedHashMap<String, String>();


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv1=findViewById(R.id.tv1);
       // 将“12345678”替换成您申请的APPID,申请地址:http://www.xfyun.cn
        // 请勿在“=”与appid之间添加任何空字符或者转义符
        SpeechUtility.createUtility(this, SpeechConstant.APPID + "=这里写你的APPID   等于号别删除");
        // 初始化识别对象
        speechRecognizer = SpeechRecognizer.createRecognizer(this,ini);
         //创建语言识别对话框
        recognizerDialog = new RecognizerDialog(this, ini);
        // 缓存
       getSharedPreferences(getPackageName(),MODE_PRIVATE);
    }

      private InitListener ini=new InitListener(){
        @Override
        public void onInit(int i) {
            if(i!= ErrorCode.SUCCESS){
                Toast.makeText(MainActivity.this, "初始化失败", Toast.LENGTH_SHORT).show();
            }
        }
    };

    public void cc(View view){
        switch (view.getId()) {
            case R.id.but1:
                // 清空参数
                speechRecognizer.setParameter(SpeechConstant.PARAMS, null);

                // 设置听写引擎,在线引擎.
                speechRecognizer.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD);
                // 设置返回结果格式
                speechRecognizer.setParameter(SpeechConstant.RESULT_TYPE, "json");

                // 设置语言
                speechRecognizer.setParameter(SpeechConstant.LANGUAGE, "zh_cn");
                // 设置语言区域
                speechRecognizer.setParameter(SpeechConstant.ACCENT, "mandarin");
                // 设置语音前端点:静音超时时间,即用户多长时间不说话则当做超时处理
                speechRecognizer.setParameter(SpeechConstant.VAD_BOS, "4000");

                // 设置语音后端点:后端点静音检测时间,即用户停止说话多长时间内即认为不再输入, 自动停止录音
                speechRecognizer.setParameter(SpeechConstant.VAD_EOS, "1000");

                // 设置标点符号,设置为"0"返回结果无标点,设置为"1"返回结果有标点
                speechRecognizer.setParameter(SpeechConstant.ASR_PTT,  "1");


//                //设置云端识别使用的语法id
//                String grammarId = mSharedPreferences.getString("grammar_abnf_id", null);
//                speechRecognizer.setParameter(SpeechConstant.CLOUD_GRAMMAR, grammarId);

                // 设置音频保存路径,保存音频格式支持pcm、wav,设置路径为sd卡请注意WRITE_EXTERNAL_STORAGE权限
                // 注:AUDIO_FORMAT参数语记需要更新版本才能生效
                speechRecognizer.setParameter(SpeechConstant.AUDIO_FORMAT,"wav");
                speechRecognizer.setParameter(SpeechConstant.ASR_AUDIO_PATH, Environment.getExternalStorageDirectory()+"/msc/asr.wav");
                tv1.setText("");
                recognizerDialog.setListener(new RecognizerDialogListener() {
                    //识别成功的时候回调
                    @Override
                    public void onResult(RecognizerResult recognizerResult, boolean b) {
                         printResult(recognizerResult);

                    }
                    //识别错误的时候回调
                    @Override
                    public void onError(SpeechError speechError) {
                        Toast.makeText(MainActivity.this, "识别失败", Toast.LENGTH_SHORT).show();
                    }
                });
                recognizerDialog.show();//这个别忘记了     不然录音对话框出不来

//                 //识别监听器
//                speechRecognizer.startListening(new RecognizerListener() {
//                    @Override
//                    public void onVolumeChanged(int i, byte[] bytes) {
//                        Toast.makeText(MainActivity.this, "正在说话中,音量大小:"+i, Toast.LENGTH_SHORT).show();
//                    }
//
//                    @Override
//                    public void onBeginOfSpeech() {
//                        Toast.makeText(MainActivity.this, "开始说话", Toast.LENGTH_SHORT).show();
//
//                    }
//
//                    @Override
//                    public void onEndOfSpeech() {
//                        Toast.makeText(MainActivity.this, "说话结束", Toast.LENGTH_SHORT).show();
//                    }
//
//                    @Override
//                    public void onResult(RecognizerResult recognizerResult, boolean b) {
//
//                    }
//
//                    @Override
//                    public void onError(SpeechError speechError) {
//
//                    }
//
//                    @Override
//                    public void onEvent(int i, int i1, int i2, Bundle bundle) {
//
//                    }
//                });






                break;
            case R.id.but2:
                break;
        }
    }
    private void printResult(RecognizerResult results) {
        String text = JsonParser.parseIatResult(results.getResultString());

        String sn = null;
        // 读取json结果中的sn字段
        try {
            JSONObject resultJson = new JSONObject(results.getResultString());
            sn = resultJson.optString("sn");
        } catch (JSONException e) {
            e.printStackTrace();
        }

        hashMap.put(sn, text);

        StringBuffer resultBuffer = new StringBuffer();
        for (String key : hashMap.keySet()) {
            resultBuffer.append(mIatResults.get(key));
        }

        tv1.setText(resultBuffer.toString());
    }



}





8.主布局

<LinearLayout
    android:orientation="vertical" 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="comqq.example.hasee.myapplication.MainActivity">
    <TextView
        android:id="@+id/tv1"
        android:layout_width="match_parent"
        android:layout_height="400dp" />
    <Button
        android:id="@+id/but1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="cc"/>
    <Button
        android:id="@+id/but2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="cc"/>

</LinearLayout>




9.要是还想在写文字转语言的话    只要在第二个buttton点击事件里面写下面代码

case R.id.but2:
                //实例化文字转语言对象
                SpeechSynthesizer syn = SpeechSynthesizer.createSynthesizer(this, ini);
                // 清空参数
                syn.setParameter(SpeechConstant.PARAMS,null);
                // 根据合成引擎设置相应参数
                if(SpeechConstant.TYPE_CLOUD.equals(SpeechConstant.TYPE_CLOUD)){
                    syn.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD);
                    //设置合成语速
                    syn.setParameter(SpeechConstant.SPEED, "50");
                    //设置合成音调
                    syn.setParameter(SpeechConstant.PITCH, "50");
                    //设置合成音量
                    syn.setParameter(SpeechConstant.VOLUME, "50");
                }else {
                    syn.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_LOCAL);
                    // 设置本地合成发音人 voicer为空,默认通过语记界面指定发音人。
                    syn.setParameter(SpeechConstant.VOICE_NAME, "");
                    /**
                     * TODO 本地合成不设置语速、音调、音量,默认使用语记设置
                     * 开发者如需自定义参数,请参考在线合成参数设置
                     */
                }
                //设置播放器音频流类型
                syn.setParameter(SpeechConstant.STREAM_TYPE, "3");
                // 设置播放合成音频打断音乐播放,默认为true
                syn.setParameter(SpeechConstant.KEY_REQUEST_FOCUS, "true");

                // 设置音频保存路径,保存音频格式支持pcm、wav,设置路径为sd卡请注意WRITE_EXTERNAL_STORAGE权限
                // 注:AUDIO_FORMAT参数语记需要更新版本才能生效
                syn.setParameter(SpeechConstant.AUDIO_FORMAT, "wav");
                syn.setParameter(SpeechConstant.TTS_AUDIO_PATH, Environment.getExternalStorageDirectory()+"/msc/tts.wav");


                //这个就是获取到tv1控件上面的文字然后转成语言
                syn.startSpeaking(tv1.getText().toString(), new SynthesizerListener() {
                    @Override
                    public void onSpeakBegin() {

                    }

                    @Override
                    public void onBufferProgress(int i, int i1, int i2, String s) {

                    }

                    @Override
                    public void onSpeakPaused() {

                    }

                    @Override
                    public void onSpeakResumed() {

                    }

                    @Override
                    public void onSpeakProgress(int i, int i1, int i2) {

                    }

                    @Override
                    public void onCompleted(SpeechError speechError) {

                    }

                    @Override
                    public void onEvent(int i, int i1, int i2, Bundle bundle) {

                    }
                });
                break;







Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐