kunfei před 4 roky
rodič
revize
70d6d50e8a

+ 9 - 0
app/src/main/java/io/legado/app/data/entities/Book.kt

@@ -189,6 +189,14 @@ data class Book(
         config().imageStyle = imageStyle
     }
 
+    fun setTtsEngine(ttsEngine: String?) {
+        config().ttsEngine = ttsEngine
+    }
+
+    fun getTtsEngine(): String? {
+        return config().ttsEngine
+    }
+
     fun getDelTag(tag: Long): Boolean {
         return config().delTag and tag == tag
     }
@@ -287,6 +295,7 @@ data class Book(
         var imageStyle: String? = null,
         var useReplaceRule: Boolean? = null,// 正文使用净化替换规则
         var delTag: Long = 0L,//去除标签
+        var ttsEngine: String? = null,
     ) : Parcelable
 
     class Converters {

+ 2 - 1
app/src/main/java/io/legado/app/model/ReadAloud.kt

@@ -14,10 +14,11 @@ import splitties.init.appCtx
 
 object ReadAloud {
     private var aloudClass: Class<*> = getReadAloudClass()
+    val ttsEngine get() = ReadBook.book?.getTtsEngine() ?: AppConfig.ttsEngine
     var httpTTS: HttpTTS? = null
 
     private fun getReadAloudClass(): Class<*> {
-        val ttsEngine = AppConfig.ttsEngine
+        val ttsEngine = ttsEngine
         if (ttsEngine.isNullOrBlank()) {
             return TTSReadAloudService::class.java
         }

+ 2 - 1
app/src/main/java/io/legado/app/service/TTSReadAloudService.kt

@@ -12,6 +12,7 @@ import io.legado.app.help.AppConfig
 import io.legado.app.help.MediaHelp
 import io.legado.app.lib.dialogs.SelectItem
 import io.legado.app.model.NoStackTraceException
+import io.legado.app.model.ReadAloud
 import io.legado.app.model.ReadBook
 import io.legado.app.utils.*
 import java.util.*
@@ -36,7 +37,7 @@ class TTSReadAloudService : BaseReadAloudService(), TextToSpeech.OnInitListener
     @Synchronized
     private fun initTts() {
         ttsInitFinish = false
-        val engine = GSON.fromJsonObject<SelectItem<String>>(AppConfig.ttsEngine)?.value
+        val engine = GSON.fromJsonObject<SelectItem<String>>(ReadAloud.ttsEngine)?.value
         textToSpeech = if (engine.isNullOrBlank()) {
             TextToSpeech(this, this)
         } else {