From 4f9b11c3404a9d76be114bbb0b7cb2040cb39cd1 Mon Sep 17 00:00:00 2001 From: chenfufeng Date: Tue, 7 Nov 2023 19:37:41 +0800 Subject: [PATCH] =?UTF-8?q?[6.2.0][Feat]=E6=8E=A5=E5=85=A5=E5=B0=8F?= =?UTF-8?q?=E6=99=BATts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/mogo/commons/voice/AIAssist.java | 5 +- .../main/java/com/mogo/tts/pad/ZhiTTS.java | 54 ++++++++++++++++++- 2 files changed, 57 insertions(+), 2 deletions(-) diff --git a/foudations/mogo-commons/src/main/java/com/mogo/commons/voice/AIAssist.java b/foudations/mogo-commons/src/main/java/com/mogo/commons/voice/AIAssist.java index ce60b58cb7..03ac91e278 100644 --- a/foudations/mogo-commons/src/main/java/com/mogo/commons/voice/AIAssist.java +++ b/foudations/mogo-commons/src/main/java/com/mogo/commons/voice/AIAssist.java @@ -56,6 +56,7 @@ public class AIAssist { // 暂时换成反射,解决死锁问题 Class clazz1 = null; Class clazz2 = null; + Class clazz3 = null; try { clazz1 = Class.forName("com.mogo.tts.pad.PadTTS"); } catch (Exception ignored) {} @@ -64,13 +65,15 @@ public class AIAssist { clazz2 = Class.forName("com.mogo.tts.iflytek.IFlyTekTts"); } catch (Exception ignored) {} try { - clazz2 = Class.forName("com.mogo.tts.pad.ZhiTTS"); + clazz3 = Class.forName("com.mogo.tts.pad.ZhiTTS"); } catch (Exception ignored) {} if (clazz1 != null) { mTTS = (IMogoTTS) clazz1.getConstructor().newInstance(); } else if (clazz2 != null) { mTTS = (IMogoTTS) clazz2.getConstructor().newInstance(); + } else if (clazz3 != null) { + mTTS = (IMogoTTS) clazz3.getConstructor().newInstance(); } if (mTTS != null) { mTTS.init(context); diff --git a/tts/tts-zhi/src/main/java/com/mogo/tts/pad/ZhiTTS.java b/tts/tts-zhi/src/main/java/com/mogo/tts/pad/ZhiTTS.java index beba84816d..b12e78c35f 100644 --- a/tts/tts-zhi/src/main/java/com/mogo/tts/pad/ZhiTTS.java +++ b/tts/tts-zhi/src/main/java/com/mogo/tts/pad/ZhiTTS.java @@ -2,6 +2,8 @@ package com.mogo.tts.pad; import android.content.Context; import android.os.Build; +import android.os.IBinder; +import android.os.RemoteException; import android.provider.Settings; import androidx.annotation.MainThread; @@ -11,6 +13,7 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.util.ToastUtils; import com.mogo.tts.base.IMogoTTS; import com.mogo.tts.base.IMogoTTSCallback; +import com.mogo.tts.base.LangTtsEntity; import com.mogo.tts.base.MultiLangTtsEntity; import com.mogo.tts.base.PreemptType; import com.mogo.tts.base.zhi.AvatarManager; @@ -19,8 +22,11 @@ import com.mogo.xiaozhi.sdk.engine.DMStatusListener; import com.mogo.xiaozhi.sdk.engine.RecorderDMManager; import com.mogo.xiaozhi.sdk.engine.tts.AILocalTTS; import com.mogo.xiaozhi.sdk.module.show.ZDCloudDMManager; +import com.mogo.xiaozhi.sdk.module.tts.ZDTtsManager; import com.zhidao.mogo.speech.sdk.ActionExecutor; +import com.zhidao.mogo.speech.sdk.MOSTtsManager; import com.zhidao.speech.adapter.AdapterApp; +import com.zhidao.voicesdk.ITtsListener; import com.zhidao.voicesdk.callback.OnTtsListener; import java.util.concurrent.atomic.AtomicBoolean; @@ -112,10 +118,14 @@ public class ZhiTTS implements IMogoTTS, OnTtsListener { public void stopSpeakTts(String text) { CallerLogger.d(TAG, "text"); + // 停止小智语音识别和语音合成 + ZDTtsManager.getInstance().shutUp(text); } public void stopTts() { CallerLogger.d(TAG, "stopTts"); + // 停止小智语音识别和语音合成 + ActionExecutor.getInstance().action("mos.action.config.cancel", null); } /** @@ -130,14 +140,50 @@ public class ZhiTTS implements IMogoTTS, OnTtsListener { @MainThread public void speakTTSVoiceWithLevel(String text, int ttsLevel) { CallerLogger.d(TAG, "speakTTSVoiceWithLevel"); + ZDTtsManager.getInstance().speak(text, getZhiLevel(ttsLevel)); } @MainThread public void speakTTSVoiceWithLevel(String text, int ttsLevel, IMogoTTSCallback callBack) { CallerLogger.d(TAG, "speakTTSVoiceWithLevel"); + ZDTtsManager.getInstance().speak(text, getZhiLevel(ttsLevel), new ITtsListener() { + @Override + public void onTtsStart(String s, String s1) throws RemoteException {} + + @Override + public void onTtsFinish(String s, String s1) throws RemoteException { + if (callBack != null) { + callBack.onSpeakEnd(s); + } + } + + @Override + public void onTtsError(String s, String s1) throws RemoteException { + if (callBack != null) { + callBack.onSpeakError(s, s1); + } + } + + @Override + public IBinder asBinder() { + return null; + } + }); } - + private int getZhiLevel(int ttsLevel) { + if (ttsLevel == 3) { + return MOSTtsManager.PRIORITY_XIAOZHI_EMERGENCY; + } else if (ttsLevel == 2) { + return MOSTtsManager.PRIORITY_EMERGENCY; + } else if (ttsLevel == 1) { + return MOSTtsManager.PRIORITY_IMPORTANT; + } else if (ttsLevel == 0) { + return MOSTtsManager.PRIORITY_NORMAL; + } else { + return MOSTtsManager.PRIORITY_NORMAL; + } + } /** * 语音播报 @@ -152,6 +198,12 @@ public class ZhiTTS implements IMogoTTS, OnTtsListener { @Override public void speakMultiLangTTSWithLevel(MultiLangTtsEntity ttsEntity, int level, IMogoTTSCallback callback) { CallerLogger.d(TAG, "speakMultiLangTTSWithLevel"); + if (ttsEntity != null) { + LangTtsEntity langTtsEntity = ttsEntity.ttsNext(); + if (langTtsEntity != null) { + speakTTSVoiceWithLevel(langTtsEntity.getTtsContent(), level, callback); + } + } } /**