离线命令词出现2,2100错误。
cupid_qs 发布于2018-06 浏览:3040 回复:2
0
收藏
最后编辑于2022-04

06-22 17:27:50.159 8857-8857/com.baiduspeechtest I/MyRecognizer.Debug: asr params(识别参数,反馈请带上此行日志):{"accept-audio-volume":true,"accept-audio-data":false,"disable-punctuation":false,"pid":1736}
06-22 17:27:50.174 8857-8857/com.baiduspeechtest I/RecogEventAdapter: name:asr.finish; params:{"origin_result":{"sn":"","error":2,"desc":"Network is not available","sub_error":2100},"error":2,"desc":"Network is not available","sub_error":2100}
06-22 17:27:50.175 8857-8857/com.baiduspeechtest E/RecogEventAdapter: asr error:{"origin_result":{"sn":"","error":2,"desc":"Network is not available","sub_error":2100},"error":2,"desc":"Network is not available","sub_error":2100}
06-22 17:27:50.176 8857-8857/com.baiduspeechtest I/RecogEventAdapter: name:asr.exit; params:{"origin_result":{"sn":"","error":2,"desc":"Network is not available","sub_error":2100},"error":2,"desc":"Network is not available","sub_error":2100}

===================================代码部分(修改自demo)=====================================================

package com.baiduspeechtest.activity;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.baidu.android.voicedemo.control.MyRecognizer;
import com.baidu.android.voicedemo.recognization.IStatus;
import com.baidu.android.voicedemo.recognization.MessageStatusRecogListener;
import com.baidu.android.voicedemo.recognization.StatusRecogListener;
import com.baidu.speech.asr.SpeechConstant;
import com.baiduspeechtest.R;

import java.lang.ref.WeakReference;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

public class MainActivity extends Activity implements IStatus {


    @BindView(R.id.button_main)
    Button mbtn;
    @BindView(R.id.tv_log)
    TextView tvLog;

    @BindView(R.id.tv_status)
    TextView tvStatus;
    MyRecognizer myRecognizer;


    /*
     * 本Activity中是否需要调用离线命令词功能。根据此参数,判断是否需要调用SDK的ASR_KWS_LOAD_ENGINE事件
     */
    protected boolean enableOffline = false;
    protected Handler handler;
    Context mContext;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        mContext = getApplicationContext();
        handler = new MyHandler(this);
        initRecog();
    }

    /**
     * 在onCreate中调用。初始化识别控制类MyRecognizer
     */
    protected void initRecog() {
        StatusRecogListener listener = new MessageStatusRecogListener(handler);
        myRecognizer = new MyRecognizer(this, listener);
        Map map = new HashMap();
        map.put(SpeechConstant.DECODER, 2);
        map.put(SpeechConstant.ASR_OFFLINE_ENGINE_GRAMMER_FILE_PATH, "assets:///baidu_speech_grammar.bsg");
        myRecognizer.loadOfflineEngine(map);
    }


    @OnClick(R.id.button_main)
    public void onClick(View view) {
        start();
    }

    private static class MyHandler extends  Handler{
        private final WeakReference  mActivity;

        public MyHandler(MainActivity activity) {
            mActivity = new WeakReference(activity);
        }

        @Override
        public void handleMessage(Message msg) {
           MainActivity mainActivity = mActivity.get();
            if (mainActivity!=null){
                mainActivity.handleMsg(msg);
            }
        }
    }

    /**
     * 开始录音,点击“开始”按钮后调用。
     */
    protected void start() {

// 下面这段可选,用于生成SLOT_DATA参数, 用于动态覆盖ASR_OFFLINE_ENGINE_GRAMMER_FILE_PATH文件的词条部分
//        JSONObject json = new JSONObject();
//        json.put("name", new JSONArray().put("王自强").put("叶问")).put("appname", new JSONArray().put("手百").put("度秘"));
//        map.put(SpeechConstant.SLOT_DATA, json.toString());
// SLOT_DATA 参数添加完毕
        Map params = new LinkedHashMap();
        params.put(SpeechConstant.ACCEPT_AUDIO_VOLUME, false);
        params.put("accept-audio-data",false);
        params.put("disable-punctuation",false);
        params.put("accept-audio-volume",true);
        params.put("pid",1736);
        myRecognizer.start(params);
    }

    @Override
    protected void onDestroy() {
        myRecognizer.release();

        super.onDestroy();
    }

    protected void handleMsg(Message msg) {

        switch (msg.what) { // 处理MessageStatusRecogListener中的状态回调
            case STATUS_FINISHED:
                if (msg.arg2 == 1) {
                    tvLog.setText(msg.obj.toString());
                }
//                tvStatus.append(msg.obj.toString() + "\n");
                tvStatus.setText(msg.obj.toString());
                break;
            case STATUS_NONE:
//                tvStatus.append(msg.obj.toString() + "\n");
                tvStatus.setText(msg.obj.toString());
            case STATUS_READY:
//                Toast.makeText(this,"等待输入",Toast.LENGTH_LONG).show();
//                tvStatus.append(msg.obj.toString() + "\n");
                tvStatus.setText(msg.obj.toString());
            case STATUS_SPEAKING:
//                Toast.makeText(this,"正在输入",Toast.LENGTH_LONG).show();
//                tvStatus.append(msg.obj.toString() + "\n");
                tvStatus.setText(msg.obj.toString());
            case STATUS_RECOGNITION:
//                tvStatus.append(msg.obj.toString() + "\n");
                tvStatus.setText(msg.obj.toString());
                break;
            default:
                break;

        }
    }
}

 

 

============================================================================================

其实运行官方demo的时候也出现过这个错误,但是在断网情况下退出demo重新进入之后,后来就好了。但是自己写的就不行,工具类和封装全都是照搬demo的。

收藏
点赞
0
个赞
共2条回复 最后由用户已被禁言回复于2022-04
#2cupid_qs回复于2018-07

结案了,测试发现是这:

params.put(SpeechConstant.ACCEPT_AUDIO_VOLUME, false);
params.put("accept-audio-data",false);
params.put("disable-punctuation",false);
params.put("accept-audio-volume",true);
params.put("pid",1736);

参数的问题,去掉参数直接默认初始化就可以跑通,之后改改代码,再排一排这几个参数对离线的影响到底是为什么...

0
TOP
切换版块