Browse Source

fix: 思必驰对接

master
高志龙 7 months ago
parent
commit
5bcd5ad46a
  1. 3
      app/build.gradle
  2. BIN
      app/libs/DUI-lite-SDK-for-Android-3.5.0-466a4c77.jar
  3. BIN
      app/libs/armeabi/libailog2.so
  4. BIN
      app/libs/armeabi/libduidns.so
  5. BIN
      app/libs/armeabi/libduiitn.so
  6. BIN
      app/libs/armeabi/libduiutils.so
  7. BIN
      app/libs/armeabi/libliteca.so
  8. BIN
      app/libs/armeabi/libmp3.so
  9. BIN
      app/libs/armeabi/libopusogg.so
  10. BIN
      app/libs/armeabi/libspeex.so
  11. BIN
      app/libs/armeabi/libvad.so
  12. 342
      app/src/main/java/qianmu/container/activity/H5/WebViewActivity.java
  13. 2
      app/src/main/java/qianmu/container/app/Constant.java
  14. 30
      app/src/main/java/qianmu/container/app/MyApplication.java
  15. 117
      app/src/main/java/qianmu/container/util/TTSUtil.java

3
app/build.gradle

@ -101,7 +101,8 @@ dependencies {
implementation files('libs\\shockman.jar')//
implementation files('libs/signway.jar') //
implementation files('libs\\sdkapi.jar') //Bv-3588
implementation files('libs\\smdt.jar') //
implementation files('libs\\smdt.jar') //
implementation files('libs\\DUI-lite-SDK-for-Android-3.5.0-466a4c77.jar') //
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

BIN
app/libs/DUI-lite-SDK-for-Android-3.5.0-466a4c77.jar

Binary file not shown.

BIN
app/libs/armeabi/libailog2.so

Binary file not shown.

BIN
app/libs/armeabi/libduidns.so

Binary file not shown.

BIN
app/libs/armeabi/libduiitn.so

Binary file not shown.

BIN
app/libs/armeabi/libduiutils.so

Binary file not shown.

BIN
app/libs/armeabi/libliteca.so

Binary file not shown.

BIN
app/libs/armeabi/libmp3.so

Binary file not shown.

BIN
app/libs/armeabi/libopusogg.so

Binary file not shown.

BIN
app/libs/armeabi/libspeex.so

Binary file not shown.

BIN
app/libs/armeabi/libvad.so

Binary file not shown.

342
app/src/main/java/qianmu/container/activity/H5/WebViewActivity.java

@ -5,6 +5,7 @@ import android.app.ActivityManager;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Debug;
import android.os.Handler;
@ -26,18 +27,17 @@ import android.webkit.WebViewClient;
import androidx.annotation.NonNull;
import androidx.databinding.DataBindingUtil;
import androidx.recyclerview.widget.GridLayoutManager;
import com.aispeech.AIError;
import com.aispeech.AIResult;
import com.aispeech.common.AIConstant;
import com.aispeech.common.JSONResultParser;
import com.aispeech.export.config.AICloudASRConfig;
import com.aispeech.export.engines2.AICloudASREngine;
import com.aispeech.export.intent.AICloudASRIntent;
import com.aispeech.export.listeners.AIASRListener;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.alibaba.android.arouter.launcher.ARouter;
import com.google.gson.Gson;
import com.iflytek.cloud.ErrorCode;
import com.iflytek.cloud.InitListener;
import com.iflytek.cloud.RecognizerListener;
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.shockman.sm.vendor.IHttp;
import com.shockman.sm.vendor.SmUtils;
import com.shockman.sm.vendor.TargetVo;
@ -49,6 +49,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Locale;
import java.util.Scanner;
import java.util.concurrent.Executors;
import java.util.regex.Matcher;
@ -78,6 +79,7 @@ import qianmu.container.util.KeyboardUtil;
import qianmu.container.util.LoggerUtil;
import qianmu.container.util.SignWayUtil;
import qianmu.container.util.StringUtil;
import qianmu.container.util.TTSUtil;
import qianmu.container.util.ToastUtils;
import static qianmu.container.service.ContainerService.initFirstTime;
@ -93,20 +95,20 @@ public class WebViewActivity extends BaseActivity {
static final int TYPE_START_SERVER = 4;//重新启动web服务
static final int TYPE_SHENG_HTML_MAG = 5;//返回接口请求值给h5
static String HtmlUrl = "http://127.0.0.1:8080/index.html";//webServer服务地址
String vocMsg = "";//语音内容
// 语音听写对象
private SpeechRecognizer mIat;
int time = 0;
String interfaceRequestData="";
// 语音听写对象
private AICloudASREngine mEngine;
private AICloudASRIntent aiCloudASRIntent;
private TTSUtil ttsUtil;
private String oldString="";
Handler handler = new Handler() {
@SuppressLint("HandlerLeak")
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
switch (msg.what){
case TYPE_REFURBISH_WEBVIEW://刷新webview
try {
binding.web.clearCache(true);
@ -115,12 +117,9 @@ public class WebViewActivity extends BaseActivity {
}catch (Exception e){
}
break;
case TYPE_GO_SAVESCREEN://导视通知跳转屏保
try {
initFirstTime();
if (!ScreenSaverData.isProgramPlay()) return;
@ -142,13 +141,7 @@ public class WebViewActivity extends BaseActivity {
removeMessages(TYPE_HINT_PASSWORD);
}
time++;
try {
}catch (Exception e){
}
break;
case TYPE_START_SERVER:
removeMessages(TYPE_REFURBISH_WEBVIEW);
sendEmptyMessageDelayed(TYPE_REFURBISH_WEBVIEW,2000);
@ -172,8 +165,11 @@ public class WebViewActivity extends BaseActivity {
binding = DataBindingUtil.setContentView(this, R.layout.activity_webview);
//设置密码
initPass();
//初始化科大讯飞
initKDXF();
if("sbc".equals(Constant.TTSHome)){
initASR();
ttsUtil = new TTSUtil();
ttsUtil.initTts();
}
}
@Override
@ -192,36 +188,22 @@ public class WebViewActivity extends BaseActivity {
webSettings.setLoadsImagesAutomatically(true);
webSettings.setDefaultTextEncodingName("utf-8");
webSettings.setUserAgentString("");
//加载web
currRoute = Constant.ROUTE_WEB_VIEW;
loadH5Url(getIntent().getBooleanExtra(Constant.KEY_LOAD_H5_URL, false));
//加载语音
initVoice();
}
webSettings.setMediaPlaybackRequiresUserGesture(false); // 允许自动播放
//初始化科大讯飞
private void initKDXF(){
try {
KdxfBean kdxf = H5Data.getKdxf();
if(kdxf.getData()==null || kdxf.getData().getDeployType()==null || kdxf.getData().getDeployType().isEmpty() || kdxf.getData().getDeployType().toLowerCase().equals("saas")){
SpeechUtility.createUtility(this, SpeechConstant.APPID +"=5c2055f8");
}else {
SpeechUtility.createUtility(this, SpeechConstant.APPID + "=5c2055f8" + "," + "net_type=custom, proxy_ip="+kdxf.getData().getXfyunIp()+", proxy_port="+kdxf.getData().getXfyunPort());
}
}catch (Throwable t) {
LoggerUtil.e("初始化语音", StringUtil.getThrowableStr(t));
// 适配HTTPS/HTTP混合内容
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE);
}
}
//初始化语音
private void initVoice(){
mIat = SpeechRecognizer.createRecognizer(this, mInitListener);
//加载web
currRoute = Constant.ROUTE_WEB_VIEW;
loadH5Url(getIntent().getBooleanExtra(Constant.KEY_LOAD_H5_URL, false));
}
@Override
protected void setListener() {
binding.web.setWebViewClient(new WebViewClient() {
// @Override
// @Override
// public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
// Uri uri = request.getUrl();
// if (uri.toString().endsWith(".js")) {
@ -296,6 +278,7 @@ public class WebViewActivity extends BaseActivity {
}
binding.layoutPass.setVisibility(View.GONE);
ARouter.getInstance().build(Constant.ROUTE_DEVICE_INFO).withBoolean(Constant.INPUT_PASSWORD, false).navigation();
finish();
}else {
binding.tvPass.setText(binding.tvPass.getText().toString()+position);
}
@ -339,11 +322,6 @@ public class WebViewActivity extends BaseActivity {
protected void onDestroy() {
super.onDestroy();
LoggerUtil.e(TAG, "onDestroy()");
if (mIat != null) {
// 退出时释放连接
mIat.cancel();
mIat.destroy();
}
}
private void loadH5Url(boolean loadUrl) {
@ -408,28 +386,43 @@ public class WebViewActivity extends BaseActivity {
// h5调用android:开始识别语音
@JavascriptInterface
public void startVoice() {
LoggerUtil.e(TAG,"JS调用了Android的方法:startVoice()");
mIat.startListening(mRecognizerListener);
public void startRecord() {
LoggerUtil.e(TAG,"JS调用了Android的方法:startRecord()");
if("sbc".equals(Constant.TTSHome)){
ttsUtil.stopTTs();
stopAsr();
if(mEngine == null){
LoggerUtil.d(TAG, "未初始化");
initASR();
}
mEngine.start(aiCloudASRIntent);
}
}
// h5调用android:结束识别语音
@JavascriptInterface
public void stopVoice() {
public void stopRecord() {
LoggerUtil.e(TAG,"JS调用了Android的方法:stopVoice()");
if("sbc".equals(Constant.TTSHome)){
stopAsr();
}
}
// h5调用android:传入要播报语音
@JavascriptInterface
public void TTS(String content) {
LoggerUtil.e(TAG,"JS调用了Android的方法:TTS()");
public void startTTS(String content) {
LoggerUtil.e(TAG,"JS调用了Android的方法:startTTS()");
if("sbc".equals(Constant.TTSHome)){
ttsUtil.startTTs(content.toLowerCase(Locale.ENGLISH));
}
}
// h5调用android:停止语音播报播报语音
@JavascriptInterface
public void TTSStop() {
LoggerUtil.e(TAG,"JS调用了Android的方法:TTSStop()");
public void stopTTS() {
LoggerUtil.e(TAG,"JS调用了Android的方法:stopTTS()");
if("sbc".equals(Constant.TTSHome)){
ttsUtil.stopTTs();
}
}
// h5调用android:新版指路机传入的数据
@ -508,10 +501,15 @@ public class WebViewActivity extends BaseActivity {
/**
* android调用js传送识别语音内容
* */
public void voiceContent(String msg){
if(binding.web!=null){
binding.web.loadUrl(StringUtil.strSplice("javascript:voiceContent("+ msg +");"));
LoggerUtil.e(TAG,"android调用js方法:voiceContent(),语音内容:"+msg);
public void voiceContent(String msg) {
if (binding.web != null) {
LoggerUtil.e(TAG, "android调用js方法:giveAskText(),语音内容:" + msg);
runOnUiThread(new Runnable() {
@Override
public void run() {
binding.web.loadUrl(StringUtil.strSplice("javascript:window.giveAskText('" + msg + "');"));
}
});
}
}
@ -521,97 +519,9 @@ public class WebViewActivity extends BaseActivity {
public void getHandWriting(String msg){
if(binding.web!=null){
binding.web.loadUrl(StringUtil.strSplice("javascript:handWriting("+ msg +");"));
// LoggerUtil.e(TAG,"android调用js方法:getHandWriting(),接口请求数据:"+msg);
}
}
/**
* 初始化监听器
*/
private InitListener mInitListener = new InitListener() {
@Override
public void onInit(int code) {
LoggerUtil.e(TAG, "语音初始化"+"SpeechRecognizer init() code = " + code);
if (code == ErrorCode.SUCCESS) {
mIat.setParameter(SpeechConstant.CLOUD_GRAMMAR, null); //设置语法ID和 SUBJECT 为空,以免因之前有语法调用而设置了此参数;或直接清空所有参数,具体可参考 DEMO 的示例。
mIat.setParameter(SpeechConstant.SUBJECT, null);
mIat.setParameter(SpeechConstant.RESULT_TYPE, "plain"); //设置返回结果格式,目前支持json,xml以及plain 三种格式,其中plain为纯听写文本内容
mIat.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD); //此处engineType为“cloud”
mIat.setParameter(SpeechConstant.LANGUAGE, "zh_cn"); //设置语音输入语言,zh_cn为简体中文
// mIat.setParameter(SpeechConstant.LANGUAGE, "en_us"); //设置语音输入语言,zh_cn为简体中文
mIat.setParameter(SpeechConstant.ACCENT, "mandarin"); //设置结果返回语言
mIat.setParameter(SpeechConstant.VAD_BOS, "4000"); //取值范围{1000~10000} 设置语音前端点:静音超时时间,单位ms,即用户多长时间不说话则当做超时处理
mIat.setParameter(SpeechConstant.VAD_EOS, "1000"); //自动停止录音,范围{0~10000} 设置语音后端点:后端点静音检测时间,单位ms,即用户停止说话多长时间内即认为不再输入,
mIat.setParameter(SpeechConstant.ASR_PTT, "0"); //设置标点符号,设置为"0"返回结果无标点,设置为"1"返回结果有标点
}
}
};
/**
* 听写监听器
*/
private RecognizerListener mRecognizerListener = new RecognizerListener() {
@Override
public void onBeginOfSpeech() {
// 此回调表示:sdk内部录音机已经准备好了,用户可以开始语音输入
Log.e(TAG,"开始说话");
vocMsg="";
}
@Override
public void onError(SpeechError error) {
// Tips:
// 错误码:10118(您没有说话),可能是录音机权限被禁,需要提示用户打开应用的录音权限。
LoggerUtil.e(TAG, "onError " + error.getPlainDescription(true));
Vocbean vocbean = new Vocbean();
vocbean.setCode(error.getErrorCode()+"");
vocbean.setMsg("");
vocMsg=new Gson().toJson(vocbean);
voiceContent(vocMsg);
}
@Override
public void onEndOfSpeech() {
// 此回调表示:检测到了语音的尾端点,已经进入识别过程,不再接受语音输入
LoggerUtil.e(TAG,"结束说话");
}
@Override
public void onResult(RecognizerResult results, boolean isLast) {
Log.e(TAG, results.getResultString());
if(!results.getResultString().isEmpty()){
Vocbean vocbean = new Vocbean();
vocbean.setCode("200");
vocbean.setMsg(results.getResultString());
vocMsg= new Gson().toJson(vocbean);
voiceContent(vocMsg);
}
if (isLast) {
Log.d(TAG, "onResult 结束");
}
}
@Override
public void onVolumeChanged(int volume, byte[] data) {
// Log.e(TAG,"当前正在说话,音量大小 = " + volume + " 返回音频数据 = " + data.length);
}
@Override
public void onEvent(int eventType, int arg1, int arg2, Bundle obj) {
// 以下代码用于获取与云端的会话id,当业务出错时将会话id提供给技术支持人员,可用于查询会话日志,定位出错原因
// 若使用本地能力,会话id为null
// if (SpeechEvent.EVENT_SESSION_ID == eventType) {
// String sid = obj.getString(SpeechEvent.KEY_EVENT_SESSION_ID);
// Log.d(TAG, "session id =" + sid);
// }
}
};
/**
* 调用手臂方法
* */
@ -678,11 +588,131 @@ public class WebViewActivity extends BaseActivity {
}
break;
case Constant.VOID_STOP:
// TTS播放完成
//changeVideo("bg");
break;
case Constant.ACTION_UPDATE_PROG2://后台下发节目通知,重置导视倒计时。
LoggerUtil.e(TAG,"重启导视倒计时");
leaveScreenSave();
break;
}
}
//--------
private void initASR(){
if(mEngine == null){
AICloudASRConfig config = new AICloudASRConfig();
config.setLocalVadEnable(true);
config.setVadResource("vad_aihome_v0.11.bin");
mEngine = AICloudASREngine.createInstance();
aiCloudASRIntent = new AICloudASRIntent();
aiCloudASRIntent.setEnablePunctuation(true);
aiCloudASRIntent.setRealback(true);//打开实时反馈功能
aiCloudASRIntent.setResourceType("aihome");
aiCloudASRIntent.setEnableNumberConvert(true);//设置启用识别结果汉字数字转阿拉伯数字功能
aiCloudASRIntent.setWaitingTimeout(30000); //设置等待识别结果超时时长,默认5000ms
aiCloudASRIntent.setNoSpeechTimeOut(10000);
aiCloudASRIntent.setPauseTime(2000);
mEngine.init(config, new AIASRListenerImpl());
}
}
private class AIASRListenerImpl implements AIASRListener {
public void onError(AIError error) {
LoggerUtil.e("ASRInit: ",error.getMessage());
// 在非主线程中需要调用 WebView 方法时
runOnUiThread(new Runnable() {
@Override
public void run() {
binding.web.evaluateJavascript("javascript: window.youAskOver('');", null);
}
});
stopAsr();
}
public void onResults(AIResult results) {
LoggerUtil.e("ASRInit: ", String.valueOf(results.isLast()));
if (results.getResultType() == AIConstant.AIENGINE_MESSAGE_TYPE_JSON) {
JSONResultParser parser = new JSONResultParser((String) results.getResultObject());
if("".equals(parser.getVar()) && !"".equals(parser.getText())){
oldString = StringUtil.strSplice(oldString,parser.getText());
}
if(!"".equals(parser.getVar())){
voiceContent( StringUtil.strSplice(oldString,parser.getVar()));
}
}
}
@Override
public void onInit(int status) {
if (status == AIConstant.OPT_SUCCESS) {
LoggerUtil.e("ASRInit: ","初始化成功!");
} else {
LoggerUtil.e("ASRInit: ","初始化失败!code:" + status);
}
}
@Override
public void onBeginningOfSpeech() {
//本地vad打开时,才会执行
oldString="";
LoggerUtil.e("ASRInit: ","onBeginningOfSpeech");
}
@Override
public void onNotOneShot() {
//do nothing
LoggerUtil.e("ASRInit: ","onNotOneShot");
}
@Override
public void onEndOfSpeech() {
//本地vad打开时,才会执行
stopAsr();
runOnUiThread(new Runnable() {
@Override
public void run() {
binding.web.evaluateJavascript("javascript: window.youAskOver('');", null);
}
});
LoggerUtil.e("ASRInit: ","onEndOfSpeech");
}
@Override
public void onReadyForSpeech() {
oldString="";
LoggerUtil.e("ASRInit: ","onReadyForSpeech");
}
@Override
public void onResultDataReceived(byte[] buffer, int size, int wakeupType) {
LoggerUtil.e("ASRInit: ","onReadyForSpeech "+String.valueOf(size));
}
@Override
public void onRmsChanged(float rmsdB) {
LoggerUtil.e("ASRInit: ", "" + rmsdB);
}
@Override
public void onResultDataReceived(byte[] buffer, int size) {
//do nothing
}
@Override
public void onRawDataReceived(byte[] buffer, int size) {
//do nothing
LoggerUtil.e("ASRInit: ","onRawDataReceived "+String.valueOf(size));
}
}
private void stopAsr(){
if(mEngine != null){
mEngine.cancel();
mEngine.stop();
}
}
}

2
app/src/main/java/qianmu/container/app/Constant.java

@ -22,6 +22,7 @@ public class Constant {
public static String screenType = "HDMI"; // 欣威视通3399设备为假关机 HDMI连接:可以用来判断是否为关机状态 LVDS连接:只能用定时关机时间来判断
public static boolean newGuide = false; // 指路机类型,true:新版指路机 false:老板指路机(流花)
public static String mqttState = ""; // 屏幕连接方式
public static String TTSHome=""; // sbc-思必驰
public static String androidBoardType = ""; //设备板子型号 无固定版
// public static String androidBoardType = "ys"; // 设备板子型号 ys(亿晟) 北京颐堤港定制touch
// public static String androidBoardType = "xwst"; //设备板子型号 xwst(欣威视通3399)
@ -33,6 +34,7 @@ public class Constant {
// public static String androidBoardType = "bv"; //设备板子型号 Bv-3588M
// public static String androidBoardType = "smt"; //设备板子型号 视美泰
public static final String VOID_STOP = "void_stop";//
public static String whoActivity = ""; // 哪个activity页面
// 本地缓存地址
public static final String CACHE_PATH = StringUtil.strSplice(Environment.getExternalStorageDirectory().getPath(),

30
app/src/main/java/qianmu/container/app/MyApplication.java

@ -15,7 +15,8 @@ import com.alibaba.android.arouter.launcher.ARouter;
import com.jakewharton.processphoenix.ProcessPhoenix;
import com.lztek.toolkit.Lztek;
import com.lzy.okgo.OkGo;
import com.aispeech.DUILiteConfig;
import com.aispeech.DUILiteSDK;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.security.KeyStore;
@ -88,6 +89,7 @@ public class MyApplication extends Application {
if (Constant.androidBoardType.equals("smt")) {
smdt = SmdtManagerNew.getInstance(this);
}
//记录当前activity
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) { }
@ -118,6 +120,32 @@ public class MyApplication extends Application {
@Override
public void onActivityDestroyed(Activity activity) { }
});
if("sbc".equals(Constant.TTSHome)){ // 思必驰语音
initSbcSDK();
}
}
// 思必驰授权
private void initSbcSDK(){
// 产品认证需设置 apiKey, productId, productKey, productSecret
DUILiteConfig config = new DUILiteConfig.Builder()
.setApiKey("d823edab41b8d823edab41b868ecc552")
.setProductId("279632533")
.setProductKey("ab73065d16e11bcfac026eee3db9f6cb")
.setProductSecret("85d9490c438099acc33be7676799399f").create();
DUILiteSDK.init(getApplicationContext());
// SDK 授权
DUILiteSDK.doAuth(getApplicationContext(), config, new DUILiteSDK.InitListener() {
@Override
public void success() {
LoggerUtil.d("DUILiteSDKInit: ", "授权成功! ");
}
@Override
public void error(String errorCode,String errorInfo) {
LoggerUtil.d("DUILiteSDKInit: ", "授权失败, errorcode: "+errorCode+",errorInfo:"+errorInfo);
}
});
}
public Lztek getLztek() {

117
app/src/main/java/qianmu/container/util/TTSUtil.java

@ -0,0 +1,117 @@
package qianmu.container.util;
import android.util.Log;
import com.aispeech.AIError;
import com.aispeech.common.AIConstant;
import com.aispeech.export.config.AICloudTTSConfig;
import com.aispeech.export.engines2.AICloudTTSEngine;
import com.aispeech.export.intent.AICloudTTSIntent;
import com.aispeech.export.listeners.AITTSListener;
import org.greenrobot.eventbus.EventBus;
import org.json.JSONArray;
import qianmu.container.app.Constant;
import qianmu.container.entity.MessageEvent;
public class TTSUtil {
private static String TAG = "TTS: ";
// 语音合成对象
private AICloudTTSEngine mEngine;
private AICloudTTSIntent intent;
public void initTts(){
mEngine = AICloudTTSEngine.createInstance();
AICloudTTSConfig config = new AICloudTTSConfig();
config.setUseCache(false);
mEngine.init(config, new AITTSListener() {
@Override
public void onInit(int status) {
Log.d(TAG, "onInit()");
if (status == AIConstant.OPT_SUCCESS) {
Log.i(TAG, "初始化成功!");
} else {
Log.i(TAG, "初始化失败!");
}
}
@Override
public void onError(String utteranceId, AIError error) {
Log.e(TAG, "onError: " + utteranceId + "," + error.toString());
EventBus.getDefault().post(new MessageEvent(Constant.VOID_STOP));
}
@Override
public void onReady(String utteranceId) {
Log.e(TAG, "onReady: " + utteranceId);
}
@Override
public void onCompletion(String utteranceId) {
LoggerUtil.e(TAG, "onCompletion: " + utteranceId);
EventBus.getDefault().post(new MessageEvent(Constant.VOID_STOP));
}
@Override
public void onProgress(int currentTime, int totalTime, boolean isRefTextTTSFinished) {
}
@Override
public void onSynthesizeStart(String utteranceId) {
}
@Override
public void onSynthesizeDataArrived(String utteranceId, byte[] audioData) {
}
@Override
public void onSynthesizeFinish(String utteranceId) {
}
@Override
public void onTimestampReceived(byte[] bytes, int i) {
}
@Override
public void onPhonemesDataArrived(String s, String s1) {
}
@Override
public void onHighInfoReceived(JSONArray textArray, int curIndex, int curDuration, int curStart) {
Log.d("onHighInfoReceived", "textArray = " + textArray + ", curText="+textArray.optString(curIndex)+",duration = " + curDuration + ", curStart = " + curStart);
}
});
intent = new AICloudTTSIntent();
intent.setSpeaker("qianranfv5");
intent.setVolume("100");
intent.setSpeed("0.8");
intent.setTextType("text");
intent.setSpeakingStyle("happy");
intent.setHighLightInfo(false);
}
//开始听写
public void startTTs(String texts){
if (null == mEngine) {
LoggerUtil.d(TAG, "未初始化");
initTts();
}
mEngine.speak(intent, texts, "1024");
}
//停止听写
public void stopTTs(){
LoggerUtil.d(TAG, "手动暂停播放");
mEngine.stop();
}
}
Loading…
Cancel
Save