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的。
http://s.auto.sohu.com/search.at?suggest=%BD%F5%B8%A3%D3%E9%C0%D6%CE%A2%D0%C5%BF%AA%BB%A7%B5%E7%BB%B0%CB%CD%BF%AA%BB%A7%D6%B1%D3%AA%BF%AA%BB%A7%3ATL262%A1%A4C%A3%CFM%C4%CF%B2%FD%BD%DA%C4%BF%B1%ED%A3%F2%A3%B9 http://v.qq.com/x/search/?q=%E6%96%B0%E7%99%BE%E5%88%A9%E5%A8%B1%E4%B9%90%E5%B9%B3%E5%8F%B0%E6%89%BE%E4%BB%A3%E7%90%86%E7%BD%91%E5%9D%80TL262.%EF%BC%A3%EF%BC%AF%EF%BC%AD%E5%8C%97%E6%B5%B7%E7%83%AD%E6%90%9C%EF%BD%9A%EF%BC%A1&type=2 https://unsplash.com/s/users/%E7%9A%87%E5%AE%B6%E5%9B%BD%E9%99%85%E5%9C%A8%E7%BA%BF%E7%82%B9%E5%87%BB%E5%8F%B0%E5%85%AC%E5%8F%B8%E7%BD%91%E6%8A%95B2024%C2%B7CN%E5%A8%81%E6%B5%B7%E9%AB%98%E6%A0%A1%EF%BC%9A https://quanmin.baidu.com/wise/growth/querypage?keyword=%E6%B5%B7%E5%A4%A9%E5%9B%BD%E9%99%85%E5%A8%B1%E4%B9%90%E5%AE%98%E7%BD%91TL262%C2%B7C%EF%BC%AFM%E5%91%A8%E5%8F%A3%E7%BD%91%E7%BA%A2%EF%BC%A2%EF%BC%B2.htm http://www.huanqiu.cc/search/index.html?keyword=%E6%B3%B0%E6%9D%A5%E5%A8%B1%E4%B9%90%E6%B8%B8%E6%88%8F%E7%BD%91%E5%9D%80TL262%C2%B7C%EF%BC%AFM%E7%8E%89%E6%BA%AA%E7%94%B5%E5%8F%B0%EF%BC%95%EF%BC%85%EF%BD%99
结案了,测试发现是这:
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);
参数的问题,去掉参数直接默认初始化就可以跑通,之后改改代码,再排一排这几个参数对离线的影响到底是为什么...