From 59c02705dd79a2d2de639a71580f25b70966a847 Mon Sep 17 00:00:00 2001 From: chenfufeng Date: Tue, 19 Mar 2024 17:28:17 +0800 Subject: [PATCH] =?UTF-8?q?[6.3.0][Feat]=E6=96=B0=E5=A2=9E=E5=85=A8?= =?UTF-8?q?=E5=B1=80Tts=E4=BA=8B=E4=BB=B6=E7=9B=91=E5=90=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/mogo/commons/voice/AIAssist.java | 8 ++++++ .../com/mogo/tts/base/IGlobalTtsCallback.kt | 7 +++++ .../main/java/com/mogo/tts/base/IMogoTTS.java | 2 ++ .../java/com/mogo/tts/iflytek/IFlyTekTts.kt | 27 ++++++++++++++++--- .../main/java/com/mogo/tts/pad/PadTTS.java | 17 +++++++++++- .../main/java/com/mogo/tts/pad/ZhiTTS.java | 6 +++++ 6 files changed, 63 insertions(+), 4 deletions(-) create mode 100644 tts/tts-base/src/main/java/com/mogo/tts/base/IGlobalTtsCallback.kt 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 03ac91e278..df826a640e 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.util.Log; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.util.ToastUtils; +import com.mogo.tts.base.IGlobalTtsCallback; import com.mogo.tts.base.IMogoTTS; import com.mogo.tts.base.IMogoTTSCallback; import com.mogo.tts.base.MultiLangTtsEntity; @@ -28,6 +29,7 @@ public class AIAssist { public static final int LEVEL3 = 0;//P3 private IMogoTTS mTTS; + private IGlobalTtsCallback mTTSCallback; public static AIAssist getInstance(Context context) { if (sInstance == null) { @@ -260,6 +262,12 @@ public class AIAssist { } } + public void setGlobalTtsListener(IGlobalTtsCallback callback) { + if (mTTS != null) { + mTTS.registerTtsListener(callback); + } + } + public void startAssistant(Context context) { startAssistant(context, 1); } diff --git a/tts/tts-base/src/main/java/com/mogo/tts/base/IGlobalTtsCallback.kt b/tts/tts-base/src/main/java/com/mogo/tts/base/IGlobalTtsCallback.kt new file mode 100644 index 0000000000..5b021acc7d --- /dev/null +++ b/tts/tts-base/src/main/java/com/mogo/tts/base/IGlobalTtsCallback.kt @@ -0,0 +1,7 @@ +package com.mogo.tts.base + +interface IGlobalTtsCallback { + fun onTtsSpeakStart() + + fun onTtsSpeakEnd() +} \ No newline at end of file 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 03334594db..876c5ad21f 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 @@ -125,6 +125,8 @@ interface IMogoTTS extends IProvider { */ void unregisterUnWakeupCommand( String cmd, IMogoTTSCallback callback ); + void registerTtsListener(IGlobalTtsCallback callback); + /** * 启动语音 * diff --git a/tts/tts-iflytek/src/main/java/com/mogo/tts/iflytek/IFlyTekTts.kt b/tts/tts-iflytek/src/main/java/com/mogo/tts/iflytek/IFlyTekTts.kt index ddcc785d84..1897430cd1 100644 --- a/tts/tts-iflytek/src/main/java/com/mogo/tts/iflytek/IFlyTekTts.kt +++ b/tts/tts-iflytek/src/main/java/com/mogo/tts/iflytek/IFlyTekTts.kt @@ -5,13 +5,25 @@ import android.os.Bundle import android.os.Looper import android.util.Pair import androidx.annotation.Keep -import com.iflytek.cloud.* +import com.iflytek.cloud.ErrorCode +import com.iflytek.cloud.InitListener +import com.iflytek.cloud.SpeechConstant +import com.iflytek.cloud.SpeechError +import com.iflytek.cloud.SpeechSynthesizer +import com.iflytek.cloud.SynthesizerListener import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.i import com.mogo.eagle.core.utilcode.util.UiThreadHandler -import com.mogo.tts.base.* -import java.util.* +import com.mogo.tts.base.IGlobalTtsCallback +import com.mogo.tts.base.IMogoTTS +import com.mogo.tts.base.IMogoTTSCallback +import com.mogo.tts.base.LangTtsEntity +import com.mogo.tts.base.LanguageType +import com.mogo.tts.base.MultiLangTtsEntity +import com.mogo.tts.base.PreemptType +import com.mogo.tts.base.SpeechUtils +import java.util.LinkedList @Keep class IFlyTekTts : IMogoTTS, InitListener { @@ -42,6 +54,8 @@ class IFlyTekTts : IMogoTTS, InitListener { HashMap() } + private var mGlobalTtsCallback: IGlobalTtsCallback? = null + override fun init(context: Context) { this.context = context SpeechUtils.init(context) @@ -175,6 +189,10 @@ class IFlyTekTts : IMogoTTS, InitListener { override fun unregisterUnWakeupCommand(cmd: String?, callback: IMogoTTSCallback?) { } + override fun registerTtsListener(callback: IGlobalTtsCallback?) { + mGlobalTtsCallback = callback + } + override fun startAIAssist(context: Context?) { } @@ -263,11 +281,13 @@ class IFlyTekTts : IMogoTTS, InitListener { // speakVoiceMap[curTtsEntity.toString()]?.onSpeakEnd(curTtsEntity.toString()) ttsNextLanguage(langTtsEntity) } else { + mGlobalTtsCallback?.onTtsSpeakEnd() speakVoiceMap.remove(curTtsEntity.toString())?.onSpeakEnd(curTtsEntity.toString()) curTtsEntity = null ttsNextMultiLangEntity() } } else {// 单语言 + mGlobalTtsCallback?.onTtsSpeakEnd() speakVoiceMap.remove(curTtsContent)?.onSpeakEnd(curTtsContent) curTtsContent = "" ttsNextMultiLangEntity() @@ -288,6 +308,7 @@ class IFlyTekTts : IMogoTTS, InitListener { private val ttsListener = object : SynthesizerListener { override fun onSpeakBegin() { + mGlobalTtsCallback?.onTtsSpeakStart() if (Thread.currentThread() == Looper.getMainLooper().thread) { curTtsEntity?.let { speakVoiceMap[it.toString()]?.onSpeakStart(it.toString()) 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 2933b97357..79987d66f3 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 @@ -28,6 +28,7 @@ import com.elegant.utils.storage.SharedPrefsMgr; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.util.ThreadUtils; import com.mogo.eagle.core.utilcode.util.ToastUtils; +import com.mogo.tts.base.IGlobalTtsCallback; import com.mogo.tts.base.IMogoTTS; import com.mogo.tts.base.IMogoTTSCallback; import com.mogo.tts.base.LangTtsEntity; @@ -101,6 +102,7 @@ public class PadTTS implements IMogoTTS, VoiceClient.VoiceCmdCallBack { private final Map mQAndAMap = new HashMap<>(); // 单独的语音播放 private final Map mSpeakVoiceMap = new HashMap<>(); + private IGlobalTtsCallback mGlobalTtsCallback = null; private final Map mCacheUnWakeupCommands = new ConcurrentHashMap<>(); @@ -611,6 +613,11 @@ public class PadTTS implements IMogoTTS, VoiceClient.VoiceCmdCallBack { } } + @Override + public void registerTtsListener(IGlobalTtsCallback callback) { + mGlobalTtsCallback = callback; + } + public static void startAssistant(Context context) { startAssistant(context, 1); } @@ -748,6 +755,10 @@ public class PadTTS implements IMogoTTS, VoiceClient.VoiceCmdCallBack { public void onReady(String s) { CallerLogger.d(TAG, "开始播放"); IMogoTTSCallback callBack = mSpeakVoiceMap.get(s); + IGlobalTtsCallback globalCallback = mGlobalTtsCallback; + if (globalCallback != null) { + globalCallback.onTtsSpeakStart(); + } if (callBack != null) { callBack.onSpeakStart(s); } @@ -759,7 +770,11 @@ public class PadTTS implements IMogoTTS, VoiceClient.VoiceCmdCallBack { curTtsContent = ""; CallerLogger.d(TAG, "播放完成"); ttsNext(); - IMogoTTSCallback callBack = PadTTS.this.mSpeakVoiceMap.remove(utteranceId); + IMogoTTSCallback callBack = mSpeakVoiceMap.remove(utteranceId); + IGlobalTtsCallback globalCallback = mGlobalTtsCallback; + if (globalCallback != null) { + globalCallback.onTtsSpeakEnd(); + } if (callBack != null) { callBack.onSpeakEnd(utteranceId); } 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 23c28df39f..8e92540aec 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 @@ -11,6 +11,7 @@ import androidx.annotation.MainThread; import com.elegant.utils.storage.SharedPrefsMgr; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.util.ToastUtils; +import com.mogo.tts.base.IGlobalTtsCallback; import com.mogo.tts.base.IMogoTTS; import com.mogo.tts.base.IMogoTTSCallback; import com.mogo.tts.base.LangTtsEntity; @@ -265,6 +266,11 @@ public class ZhiTTS implements IMogoTTS, OnTtsListener { CallerLogger.d(TAG, "unregisterUnWakeupCommand"); } + @Override + public void registerTtsListener(IGlobalTtsCallback callback) { + + } + public synchronized void flush() { CallerLogger.d(TAG, "flush");