要做到语音识别,大概可以分为四步:
初始化–>设置参数–>开始识别–>解析

1.首先我们要去官网注册一个讯飞登录账号,,在用户菜单栏里就有创建我的应用.这里的登陆也可以采用第三方的方式.在创建应用的界面填写相关的信息即可.然后就会有一个SDK下载的链接.如果没有,直接去SDK下载中心按照三步选项去进行新的下载即可.这里不做过多的描述;
传送门 讯飞安卓SDK用户指南
2.然后将下载下来的SDK,打开libs文件夹,里面有很多文件,这里我们暂时只需要armeabi文件夹和Msc.jar包拷贝到工程的libs下。

这里需要注意的是,如果使用的开发工具为Android Studio需要打开app下面的build.gradle在android节点下复制上以下代码。

sourceSets {
    main {
        jniLibs.srcDirs = ['libs']
    }
}
  1. 接下来就是代码部分了,在所有操作之前都要设置APPID,即你在讯飞官网上创建的应用的ID,用于登录。这句话必须放在oncreate方法里
SpeechUtility.createUtility(MainActivity.this, SpeechConstant.APPID + "=12345678");

4.起初我看了网上很多别人的demo源码,发现看不懂,然后我就参照讯飞官方的demo。我们这里只实现听写的功能,只需要参照一下TatDemo里的代码。我们直接在讯飞的demo上找到那个语音听写的button,再在代码里
找到此按钮的监听事件。我们这里做一个无界面识别的(就是点击识别button不会弹出听写界面),所以有Dialog的代码全部不考虑。然后其实就是挨片的赋值筛选代码了。。。。
5.声明并且初始化识别对象

// 初始化识别无UI识别对象
        // 使用SpeechRecognizer对象,可根据回调消息自定义界面;
        mIat = SpeechRecognizer.createRecognizer(getApplicationContext(), mInitListener);

6.初始化完成后,设置参数在setParam()函数里,官方说是只需要三个参数就可以分别是Domain识别领域设置为iat,Lanage国家语言zh_cn表示中文 ,Accent语言区域mandarin表示普通话
这里我不管直接从他的代码里扒

public void setParam() {
    // 清空参数
    mIat.setParameter(SpeechConstant.PARAMS, null);

    // 设置听写引擎
    mIat.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD);
    // 设置返回结果格式
    mIat.setParameter(SpeechConstant.RESULT_TYPE, "json");
    // 设置语言
    mIat.setParameter(SpeechConstant.LANGUAGE, "zh_cn");
    // 设置语言区域
    mIat.setParameter(SpeechConstant.ACCENT, "mandarin");
    // 设置语音前端点:静音超时时间,即用户多长时间不说话则当做超时处理
    mIat.setParameter(SpeechConstant.VAD_BOS, "4000");
    // 设置语音后端点:后端点静音检测时间,即用户停止说话多长时间内即认为不再输入, 自动停止录音
    mIat.setParameter(SpeechConstant.VAD_EOS, "1000");
    // 设置标点符号,设置为"0"返回结果无标点,设置为"1"返回结果有标点
    mIat.setParameter(SpeechConstant.ASR_PTT, "1");
    // 设置音频保存路径,保存音频格式支持pcm、wav,设置路径为sd卡请注意WRITE_EXTERNAL_STORAGE权限
    // 注:AUDIO_FORMAT参数语记需要更新版本才能生效
    mIat.setParameter(SpeechConstant.AUDIO_FORMAT, "wav");
    mIat.setParameter(SpeechConstant.ASR_AUDIO_PATH, Environment.getExternalStorageDirectory() + "/msc/iat.wav");
}

7.然后就是开始识别了

int ret = mIat.startListening(mRecognizerListener);

8.在开始识别的时候我们可以看到,后面带了一个recognizerlistener的回调函数,我们再把回调函数的代码扒出来

private RecognizerListener mRecognizerListener = new RecognizerListener() {

    @Override
    public void onBeginOfSpeech() {
        // 此回调表示:sdk内部录音机已经准备好了,用户可以开始语音输入
        Toast.makeText(MainActivity.this, "开始说话", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onError(SpeechError error) {
        // Tips:
        // 错误码:10118(您没有说话),可能是录音机权限被禁,需要提示用户打开应用的录音权限。
        // 如果使用本地功能(语记)需要提示用户开启语记的录音权限。
        Toast.makeText(MainActivity.this, "" + error.getPlainDescription(true), Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onEndOfSpeech() {
        // 此回调表示:检测到了语音的尾端点,已经进入识别过程,不再接受语音输入
        Toast.makeText(MainActivity.this, "结束说话", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onResult(RecognizerResult results, boolean isLast) {
        printResult(results);
        if (isLast) {
            // TODO 最后的结果
        }
    }

    @Override
    public void onVolumeChanged(int volume, byte[] data) {
    }

    @Override
    public void onEvent(int eventType, int arg1, int arg2, Bundle obj) {

    }
};

这里的onBeginOfSpeech就是开始录音的时候会回调,

onEndOfSpeech结束录音会回调,onResult在一次录音中会回调很多次,onVolumeChanged是返回音量,onError是返回的错误码
9.把讯飞的JsonParser类拷贝过来,如果里面有用不到的方法直接删了
10.写一个打印结果的方法,这里我用的一个textview

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();
    }
    mIatResults.put(sn, text);
    StringBuffer resultBuffer = new StringBuffer();
    for (String key : mIatResults.keySet()) {
        resultBuffer.append(mIatResults.get(key));
    }
    textView.setText(resultBuffer.toString());
}

11.添加录音网络等权限,这个直接复制上面那个传送门里的就行

另附上源码下载链接AS工程。源码下载

OK,结束。

Logo

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

更多推荐