移动开发-语音识别-调用讯飞平台提供的API

1 登录 讯飞 平台,申请账号,创建一个应用

具体步骤可以百度查找

2 进入”我的应用”,下载相应的SDK文件

选择语音听写(流式版)-> Android MSC

移动开发-语音识别-调用讯飞平台提供的API

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>

4 将在官网下载的Android SDK 压缩包中libs目录下所有子文件拷贝至Android工程的libs目录下

5 在安卓项目文件中添加.so文件

在build.gradle(Module:XXX)文件中,在android节点下加入下面的内容(代码的作用是使得项目找到libs下的libmsc.so文件)

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

移动开发-语音识别-调用讯飞平台提供的API
比较新的Gradle版本,已经自动实现打包.so文件的功能(在拷贝libs目录下文件后,配置上面的代码,即可完成在项目中添加.so文件)

6 右击libs目录下的msc.jar文件,选择Add As Library

7 sdk下文件夹main/assets/,自带UI页面(iflytek文件夹)和相关其他服务资源文件(语法文件、音频示例、词表),将该文件夹拷贝到项目main目录下

8 在工程 AndroidManifest.xml 文件中添加如下用户权限


<uses-permission android:name="android.permission.INTERNET"/>

<uses-permission android:name="android.permission.RECORD_AUDIO"/>

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

<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"/>

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

<uses-permission android:name="android.permission.CAMERA" />

<uses-permission android:name="android.permission.RECORD_AUDIO" />

9 编写java代码,实现语音听写功能

包名这里就不显示了

APPID
需要在讯飞平台”我的应用”界面中寻找

移动开发-语音识别-调用讯飞平台提供的API
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";
    private String engineType = "cloud";
    private String resultType = "plain";

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

        mIat = SpeechRecognizer.createRecognizer(this, mInitListener);

        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) {

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

10 拓展-添加语音识别的方言/语种

移动开发-语音识别-调用讯飞平台提供的API

; 11 拓展-开通高级功能

移动开发-语音识别-调用讯飞平台提供的API

12 拓展-添加个性化热词

移动开发-语音识别-调用讯飞平台提供的API

Original: https://blog.csdn.net/weixin_43878652/article/details/110296876
Author: jiu_shu_
Title: 移动开发-语音识别-调用讯飞平台提供的API

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/525981/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球