BaiduSpeechDemo【百度语⾳SDK集成】(基于v3.0.8.1)版权声明:本⽂为HaiyuKing原创⽂章,转载请注明出处!
前⾔
上⼀篇集成的是V3.0.7.3版本的SDK《》,这次发现官⽹的SDK进⾏了升级,感觉有必要进⾏重新集成。
1、修复了APP同时集成多个SDK,不能同时使⽤的问题;——所以需要使⽤新sdk的jar⽂件;
2、既然官⽹也使⽤了module⽅式;——那么就不需要⾃⼰创建module了,直接在官⽹的core这个module中优化;
3、修复长语⾳⽆结束回调;——增加长语⾳结束回调的监听;
本Demo中使⽤的appkey已失效,请⾃⾏创建应⽤,使⽤新的appkey。
效果图
和《》类似,这⾥就不单独截图了。
代码分析
普通话 search搜索模型:参考SpeechBottomSheetDialog.java类
普通话 input输⼊法模型,适⽤于长句及长语⾳,有逗号分割,⽆语义:参考SpeechLongBottomSheetDialog.java类
注意:关于语⾳识别状态维护,API调⽤的代码,是⾃⼰根据官⽹demo的理解进⾏整理的,可能有所偏颇,仅供参考。【希望官⽹demo可以添加百度APP的语⾳对话框效果就好了】
使⽤步骤
⼀、项⽬组织结构图
注意事项:
1、  导⼊类⽂件后需要change包名以及重新import R⽂件路径
2、  Values⽬录下的⽂件(l、l、l等),如果项⽬中存在,则复制⾥⾯的内容,不要整个覆盖
⼆、导⼊步骤
(1)在项⽬中导⼊官⽹demo中的core这个module,同时修改名称,修改为baiduspeech
(2)修改baiduspeech的l(修改官⽹申请的应⽤信息)
<manifest xmlns:android="schemas.android/apk/res/android"
package="test2.baidu.baseasr">
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application>
<meta-data
android:name="com.baidu.speech.APP_ID"
android:value="11588936"/>
<meta-data
android:name="com.baidu.speech.API_KEY"
android:value="XRF3IOf2tNGePzlv47cBnvF3"/>
<meta-data
android:name="com.baidu.speech.SECRET_KEY"
android:value="diC8lQ7XDcGBKQ6FzCpvnan54F5CnMZI"/>
</application>
</manifest>
(3)修改MessageStatusRecogListener.java⽂件【根据实际情况进⾏修改】package com.baidu.ecog.listener;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import com.baidu.ecog.RecogResult;
import com.baidu.speech.asr.SpeechConstant;
/**
* Created by fujiayi on 2017/6/16.
*/
public class MessageStatusRecogListener extends StatusRecogListener {
private Handler handler;
private long speechEndTime = 0;
private boolean needTime = true;
private static final String TAG = "MesStatusRecogListener";
public MessageStatusRecogListener(Handler handler) {
this.handler = handler;
}
@Override
public void onAsrReady() {
speechEndTime = 0;
sendStatusMessage(SpeechConstant.CALLBACK_EVENT_WAKEUP_READY, "引擎就绪,可以开始说话。");    }
@Override
public void onAsrBegin() {
sendStatusMessage(SpeechConstant.CALLBACK_EVENT_ASR_BEGIN, "检测到⽤户说话");
}
@Override
public void onAsrEnd() {
speechEndTime = System.currentTimeMillis();
sendMessage("【d事件】检测到⽤户说话结束");
}
@Override
public void onAsrPartialResult(String[] results, RecogResult recogResult) {
sendStatusMessage(SpeechConstant.CALLBACK_EVENT_ASR_PARTIAL,
"临时识别结果,结果是“" + results[0] + "”;原始json:" + OrigalJson());
}
@Override
public void onAsrFinalResult(String[] results, RecogResult recogResult) {
//String message = "识别结束,结果是”" + results[0] + "”";//why 实际中可以去掉,不需要
String message = OrigalJson();//{"results_recognition":["什么什么"],"origin_result":
{"corpus_no":6522034498058113957,"err_no":0,"result":{"word":["什么什么"]},"sn":"bfa8b286-ab0e-4f86-9209-
1d36d38b1224","voice_energy":16191.7705078125},"error":0,"best_result":"什么什么","result_type":"final_result"}
sendStatusMessage(SpeechConstant.CALLBACK_EVENT_ASR_PARTIAL,
message + ";原始json:" + OrigalJson());
if (speechEndTime > 0) {
long currentTime = System.currentTimeMillis();
long diffTime = currentTime - speechEndTime;
//message += ";说话结束到识别结束耗时【" + diffTime + "ms】";// why 实际中可以去掉,不需要
}
speechEndTime = 0;
sendMessage(message, status, true);
}
@Override
public void onAsrFinishError(int errorCode, int subErrorCode, String descMessage,
RecogResult recogResult) {
//String message = "识别错误, 错误码:" + errorCode + " ," + subErrorCode + " ; " + descMessage;// why 实际中可以去掉,不需要
String message = OrigalJson();//{"origin_result":{"sn":"","error":7,"desc":"No recognition result
match","sub_error":7001},"error":7,"desc":"No recognition result match","sub_error":7001}
sendStatusMessage(SpeechConstant.CALLBACK_EVENT_ASR_PARTIAL, message);
if (speechEndTime > 0) {
long diffTime = System.currentTimeMillis() - speechEndTime;
//message += "。说话结束到识别结束耗时【" + diffTime + "ms】";// why实际中可以去掉,不需要
}
speechEndTime = 0;
sendMessage(message, status, true);
speechEndTime = 0;
}
sdk@Override
public void onAsrOnlineNluResult(String nluResult) {
if (!nluResult.isEmpty()) {
sendStatusMessage(SpeechConstant.CALLBACK_EVENT_ASR_PARTIAL, "原始语义识别结果json:" + nluResult);
}
}
@Override
public void onAsrFinish(RecogResult recogResult) {
sendStatusMessage(SpeechConstant.CALLBACK_EVENT_ASR_FINISH, "识别⼀段话结束。如果是长语⾳的情况会继续识别下段话。");    }
/**
* 长语⾳识别结束
*/

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。