[Opt3.0]内部封装TTS在主线程中调用

This commit is contained in:
chenfufeng
2023-03-09 16:27:11 +08:00
parent 0349a4925a
commit bebcddee31

View File

@@ -68,8 +68,15 @@ class IFlyTekTts : IMogoTTS, InitListener {
} }
override fun release() { override fun release() {
ttsEngine?.stopSpeaking() if (Thread.currentThread() != Looper.getMainLooper().thread) {
ttsEngine?.destroy() UiThreadHandler.post {
ttsEngine?.stopSpeaking()
ttsEngine?.destroy()
}
} else {
ttsEngine?.stopSpeaking()
ttsEngine?.destroy()
}
} }
override fun flush() { override fun flush() {
@@ -91,7 +98,16 @@ class IFlyTekTts : IMogoTTS, InitListener {
override fun speakTTSVoiceWithLevel(tts: String?, level: Int, callBack: IMogoTTSCallback?) { override fun speakTTSVoiceWithLevel(tts: String?, level: Int, callBack: IMogoTTSCallback?) {
if (tts.isNullOrEmpty()) return if (tts.isNullOrEmpty()) return
speakMultiLangTTSWithLevel(MultiLangTtsEntity(listOf(LangTtsEntity(tts, LanguageType.CHINESE))), level, callBack) speakMultiLangTTSWithLevel(
MultiLangTtsEntity(
listOf(
LangTtsEntity(
tts,
LanguageType.CHINESE
)
)
), level, callBack
)
} }
override fun speakMultiLangTTSWithLevel( override fun speakMultiLangTTSWithLevel(
@@ -99,10 +115,19 @@ class IFlyTekTts : IMogoTTS, InitListener {
level: Int, level: Int,
callBack: IMogoTTSCallback? callBack: IMogoTTSCallback?
) { ) {
if (callBack != null) { if (Thread.currentThread() != Looper.getMainLooper().thread) {
speakVoiceMap[ttsEntity.toString()] = callBack UiThreadHandler.post {
if (callBack != null) {
speakVoiceMap[ttsEntity.toString()] = callBack
}
speakMultiLangTTSWithLevel(ttsEntity, level)
}
} else {
if (callBack != null) {
speakVoiceMap[ttsEntity.toString()] = callBack
}
speakMultiLangTTSWithLevel(ttsEntity, level)
} }
speakMultiLangTTSWithLevel(ttsEntity, level)
} }
override fun stopSpeakTts(text: String?) { override fun stopSpeakTts(text: String?) {
@@ -110,6 +135,16 @@ class IFlyTekTts : IMogoTTS, InitListener {
} }
override fun stopTts() { override fun stopTts() {
if (Thread.currentThread() != Looper.getMainLooper().thread) {
UiThreadHandler.post {
realStop()
}
} else {
realStop()
}
}
private fun realStop() {
curTtsEntity?.let { curTtsEntity?.let {
val string = it.toString() val string = it.toString()
if (speakVoiceMap.containsKey(string)) { if (speakVoiceMap.containsKey(string)) {