Android 添加百度语音识别

下载demo

首先要下载demo获取sdk,下载地址
下载下来的项目是这样的(如果更新后不适用,建议查看官方文档自己摸索)
demo图片

依赖core

在自己需要的添加语音识别的项目里面依赖core这个包

具体依赖方法可以参考demo文件夹中的
sdk_asr_baidu_speech_ASR_V3_20191210_81acdf5_3.1.6\doc_integration_DOCUMENT\ASR-INTEGRATION-TTS-DEMO V3.0.docx中的(二)

添加实现代码

依赖成功后在需要添加的Avtivity里面添加如下代码:

   protected MyRecognizer myRecognizer;
    /**
     * 控制UI按钮的状态
     */
    protected int status;
  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Handler handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                handleMsg(msg);
            }
        };
        IRecogListener listener = new MessageStatusRecogListener(handler);
        myRecognizer = new MyRecognizer(this, listener);
        }
         protected void handleMsg(Message msg) {
        switch (msg.what) { // 处理MessageStatusRecogListener中的状态回调
            case STATUS_FINISHED:
                if (msg.arg2 == 1) {
                //这里会出现错误弹窗
                //同时这里也是输出结果
                    if (msg.obj.toString().contains("识别错误")) {
                        Toast.show(msg.obj.toString());//弹窗
                    } else {
                        mEtSearch.setText(msg.obj.toString());
                    }
                    dialog.dismiss();
                }
                status = msg.what;
                updateBtnTextByStatus();
                break;
            case STATUS_NONE:
            case STATUS_READY:
            case STATUS_SPEAKING:
            case STATUS_RECOGNITION:
                status = msg.what;
                updateBtnTextByStatus();
                break;
            default:
                break;

        }
    }

    private void updateBtnTextByStatus() {
        switch (status) {
            case STATUS_NONE:
               //开始录音时候页面状态可以在这里修改
                break;
            case STATUS_WAITING_READY:
            case STATUS_READY:
            case STATUS_SPEAKING:
            case STATUS_RECOGNITION:
//停止录音时候页面状态可以在这里修改
                break;
            case STATUS_LONG_SPEECH_FINISHED:
            case STATUS_STOPPED:
            //取消整个识别过程页面状态可以在这里修改

                break;
            default:
                break;
        }
    }

    /**
     * 开始录音,点击“开始”按钮后调用。
     * 基于DEMO集成2.1, 2.2 设置识别参数并发送开始事件
     */
    protected void start() {
        // DEMO集成步骤2.1 拼接识别参数: 此处params可以打印出来,直接写到你的代码里去,最终的json一致即可。
        final Map<String, Object> params = new HashMap<>();
        // params 也可以根据文档此处手动修改,参数会以json的格式在界面和logcat日志中打印
        //params为语音等设置
        int language = 123456;
//        params.put("pid", language);
        Log.i(TAG, "设置的start输入参数:" + params);
        // 复制此段可以自动检测常规错误
        (new AutoCheck(getApplicationContext(), new Handler() {
            public void handleMessage(Message msg) {
                if (msg.what == 100) {
                    AutoCheck autoCheck = (AutoCheck) msg.obj;
                    synchronized (autoCheck) {
                        String message = autoCheck.obtainErrorMessage(); // autoCheck.obtainAllMessage();
//                        txtLog.append(message + "\n");
                        ; // 可以用下面一行替代,在logcat中查看代码
                        Log.w("AutoCheckMessage", message);
                    }
                }
            }
        }, false)).checkAsr(params);

        // 这里打印出params, 填写至您自己的app中,直接调用下面这行代码即可。
        // DEMO集成步骤2.2 开始识别
        myRecognizer.start(params);
    }

    /**
     * 开始录音后,手动点击“停止”按钮。
     * SDK会识别不会再识别停止后的录音。
     * 基于DEMO集成4.1 发送停止事件 停止录音
     */
    protected void stop() {

        myRecognizer.stop();
    }

    /**
     * 开始录音后,手动点击“取消”按钮。
     * SDK会取消本次识别,回到原始状态。
     * 基于DEMO集成4.2 发送取消事件 取消本次识别
     */
    protected void cancel() {

        myRecognizer.cancel();
    }

    /**
     * 销毁时需要释放识别资源。
     */
    @Override
    protected void onDestroy() {

        // 如果之前调用过myRecognizer.loadOfflineEngine(), release()里会自动调用释放离线资源
        // 基于DEMO5.1 卸载离线资源(离线时使用) release()方法中封装了卸载离线资源的过程
        // 基于DEMO的5.2 退出事件管理器
        myRecognizer.release();

        Log.i(TAG, "onDestory");

        // BluetoothUtil.destory(this); // 蓝牙关闭

        super.onDestroy();
    }

使用方法

只要调用start();方法就可以使用,调用stop();就能手动停止录音
需要动态获取录音、读写文件的动态权限后才能使用,可以在获取权限成功的时候调用start方法

返回数据

语音识别后的数据会出现在handleMsg中的case STATUS_FINISHED:
数据格式在MessageStatusRecogListener.java 中

onAsrFinalResult的 String message是成功的格式

onAsrFinishError的 String message是失败的格式

注意事项

当跳转了同样需要语音的页面时候当前页面需要用myRecognizer.release();来结束当前的进程,不然会闪退/报错8001

错误代码

https://ai.baidu.com/ai-doc/SPEECH/qk38lxh1q

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值