pull/2339/head
parent
719155b2ce
commit
49f286313f
@ -0,0 +1,100 @@ |
||||
package io.legado.app.help |
||||
|
||||
import android.speech.tts.TextToSpeech |
||||
import android.speech.tts.UtteranceProgressListener |
||||
import io.legado.app.R |
||||
import io.legado.app.constant.AppLog |
||||
import io.legado.app.utils.splitNotBlank |
||||
import io.legado.app.utils.toastOnUi |
||||
import splitties.init.appCtx |
||||
|
||||
class TTS { |
||||
|
||||
private val tag = "legado_tts" |
||||
|
||||
private var textToSpeech: TextToSpeech? = null |
||||
|
||||
private var text: String? = null |
||||
|
||||
private val initListener by lazy { |
||||
InitListener() |
||||
} |
||||
|
||||
private val utteranceListener by lazy { |
||||
TTSUtteranceListener() |
||||
} |
||||
|
||||
fun speak(text: String) { |
||||
this.text = text |
||||
if (textToSpeech == null) { |
||||
|
||||
} else { |
||||
|
||||
} |
||||
} |
||||
|
||||
private fun initTts() { |
||||
textToSpeech == TextToSpeech(appCtx, initListener) |
||||
} |
||||
|
||||
private fun clearTts() { |
||||
textToSpeech?.let { tts -> |
||||
tts.stop() |
||||
tts.shutdown() |
||||
} |
||||
textToSpeech = null |
||||
} |
||||
|
||||
private fun addTextToSpeakList() { |
||||
textToSpeech?.let { tts -> |
||||
kotlin.runCatching { |
||||
var result = tts.speak("", TextToSpeech.QUEUE_FLUSH, null, null) |
||||
if (result == TextToSpeech.ERROR) { |
||||
clearTts() |
||||
textToSpeech = TextToSpeech(appCtx, initListener) |
||||
return |
||||
} |
||||
text?.splitNotBlank("\n")?.forEachIndexed { i, s -> |
||||
result = tts.speak(s, TextToSpeech.QUEUE_ADD, null, tag + i) |
||||
if (result == TextToSpeech.ERROR) { |
||||
AppLog.put("tts朗读出错:$text") |
||||
} |
||||
} |
||||
}.onFailure { |
||||
AppLog.put("tts朗读出错", it) |
||||
appCtx.toastOnUi(it.localizedMessage) |
||||
} |
||||
} |
||||
} |
||||
|
||||
private inner class InitListener : TextToSpeech.OnInitListener { |
||||
|
||||
override fun onInit(status: Int) { |
||||
if (status == TextToSpeech.SUCCESS) { |
||||
textToSpeech?.setOnUtteranceProgressListener(utteranceListener) |
||||
} else { |
||||
appCtx.toastOnUi(R.string.tts_init_failed) |
||||
} |
||||
} |
||||
|
||||
} |
||||
|
||||
/** |
||||
* 朗读监听 |
||||
*/ |
||||
private inner class TTSUtteranceListener : UtteranceProgressListener() { |
||||
|
||||
override fun onStart(utteranceId: String?) { |
||||
TODO("Not yet implemented") |
||||
} |
||||
|
||||
override fun onDone(utteranceId: String?) { |
||||
TODO("Not yet implemented") |
||||
} |
||||
|
||||
override fun onError(utteranceId: String?) { |
||||
TODO("Not yet implemented") |
||||
} |
||||
|
||||
} |
||||
} |
Loading…
Reference in new issue