From 7e0a85073f2655c3fe15f6993002483f66990e33 Mon Sep 17 00:00:00 2001 From: chenfufeng Date: Tue, 25 Oct 2022 16:10:52 +0800 Subject: [PATCH] =?UTF-8?q?[Feat]=E5=A2=9E=E5=8A=A0Tts=E5=9B=9E=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/mogo/commons/voice/AIAssist.java | 7 +++++++ .../main/java/com/mogo/tts/base/IMogoTTS.java | 2 ++ .../main/java/com/mogo/tts/pad/PadTTS.java | 19 +++++++++++++++++++ 3 files changed, 28 insertions(+) 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 90866ce120..74d0fc2ec7 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 @@ -5,6 +5,7 @@ import android.content.Context; 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.PreemptType; /** @@ -90,6 +91,12 @@ public class AIAssist { } } + public void speakTTSVoiceWithLevel(String text, int level, IMogoTTSCallback callBack) { + if (mTTS != null) { + mTTS.speakTTSVoiceWithLevel(text, level, callBack); + } + } + /** * 等级由低到高为0、1、2、3,分别对应p3、p2、p1、p0 * @param text diff --git a/tts/tts-base/src/main/java/com/mogo/tts/base/IMogoTTS.java b/tts/tts-base/src/main/java/com/mogo/tts/base/IMogoTTS.java index bb0da53d07..14e78ec55f 100644 --- a/tts/tts-base/src/main/java/com/mogo/tts/base/IMogoTTS.java +++ b/tts/tts-base/src/main/java/com/mogo/tts/base/IMogoTTS.java @@ -41,6 +41,8 @@ interface IMogoTTS extends IProvider { void speakTTSVoiceWithLevel( String tts, int level); + void speakTTSVoiceWithLevel( String tts, int level, IMogoTTSCallback callBack); + /** * 播放 tts 语音 * diff --git a/tts/tts-pad/src/main/java/com/mogo/tts/pad/PadTTS.java b/tts/tts-pad/src/main/java/com/mogo/tts/pad/PadTTS.java index a2530a1286..68dac7476f 100644 --- a/tts/tts-pad/src/main/java/com/mogo/tts/pad/PadTTS.java +++ b/tts/tts-pad/src/main/java/com/mogo/tts/pad/PadTTS.java @@ -63,6 +63,8 @@ public class PadTTS implements IMogoTTS, VoiceClient.VoiceCmdCallBack, OnTtsList // 等级由低到高为0、1、2、3,默认为-1表示没有正在tts的 private int curTtsLevel = -1; + // 由于主动打断不会有回调事件,所以主动打断时清掉map中被打断的text和callback + private String curTtsContent = ""; private LinkedList> linkedList = new LinkedList<>(); public void release() { @@ -79,6 +81,7 @@ public class PadTTS implements IMogoTTS, VoiceClient.VoiceCmdCallBack, OnTtsList } mQAndAMap.clear(); mVoiceClient.release(); + curTtsContent = ""; curTtsLevel = -1; if (mEngine != null) { mEngine.destroy(); @@ -351,6 +354,7 @@ public class PadTTS implements IMogoTTS, VoiceClient.VoiceCmdCallBack, OnTtsList if (mSpeakVoiceMap.containsKey(text)) { mSpeakVoiceMap.remove(text); } + curTtsContent = ""; curTtsLevel = -1; mEngine.stop(); } @@ -358,7 +362,11 @@ public class PadTTS implements IMogoTTS, VoiceClient.VoiceCmdCallBack, OnTtsList public void stopTts() { if (mEngine != null && mHasAuth) { + if (mSpeakVoiceMap.containsKey(curTtsContent)) { + mSpeakVoiceMap.remove(curTtsContent); + } // tts过程中调用stop不会有回调事件 + curTtsContent = ""; curTtsLevel = -1; mEngine.stop(); } @@ -410,12 +418,21 @@ public class PadTTS implements IMogoTTS, VoiceClient.VoiceCmdCallBack, OnTtsList } } curTtsLevel = ttsLevel; + curTtsContent = text; // 合成并播放 CallerLogger.INSTANCE.d(TAG, "tts准备合成:" + text + ",curTtsLevel为:" + curTtsLevel); mEngine.speak(text, text, mAILocalTTSIntent); } } + @MainThread + public void speakTTSVoiceWithLevel(String text, int ttsLevel, IMogoTTSCallback callBack) { + if (mHasFlush && mEngine != null) { + mSpeakVoiceMap.put(text, callBack); + } + speakTTSVoiceWithLevel(text, ttsLevel); + } + // 降序插入Tts(目前Level0、1可排队) private void insertTts(String text, int level) { int index = -1; @@ -741,6 +758,7 @@ public class PadTTS implements IMogoTTS, VoiceClient.VoiceCmdCallBack, OnTtsList public void onError(String utteranceId, AIError aiError) { CallerLogger.INSTANCE.d(TAG, "检测到错误:" + aiError.toString()); curTtsLevel = -1; + curTtsContent = ""; IMogoTTSCallback callBack = PadTTS.this.mSpeakVoiceMap.remove(utteranceId); if (callBack != null) { callBack.onSpeakError(utteranceId, aiError.getError()); @@ -755,6 +773,7 @@ public class PadTTS implements IMogoTTS, VoiceClient.VoiceCmdCallBack, OnTtsList @Override public void onCompletion(String utteranceId) { curTtsLevel = -1; + curTtsContent = ""; CallerLogger.INSTANCE.d(TAG, "播放完成"); ttsNext(); IMogoTTSCallback callBack = PadTTS.this.mSpeakVoiceMap.remove(utteranceId);