kunfei před 4 roky
rodič
revize
241067cd2e

+ 1 - 0
app/src/main/java/io/legado/app/constant/PreferKey.kt

@@ -27,6 +27,7 @@ object PreferKey {
     const val precisionSearch = "precisionSearch"
     const val readAloudByPage = "readAloudByPage"
     const val ttsEngine = "appTtsEngine"
+    const val ttsFollowSys = "ttsFollowSys"
     const val ttsSpeechRate = "ttsSpeechRate"
     const val prevKeys = "prevKeyCodes"
     const val nextKeys = "nextKeyCodes"

+ 11 - 1
app/src/main/java/io/legado/app/help/config/AppConfig.kt

@@ -169,12 +169,22 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
             }
         }
 
+    var ttsFlowSys: Boolean
+        get() = appCtx.getPrefBoolean(PreferKey.ttsFollowSys, true)
+        set(value) {
+            appCtx.putPrefBoolean(PreferKey.ttsFollowSys, value)
+        }
+
+    const val defaultSpeechRate = 5
+
     var ttsSpeechRate: Int
-        get() = appCtx.getPrefInt(PreferKey.ttsSpeechRate, 5)
+        get() = appCtx.getPrefInt(PreferKey.ttsSpeechRate, defaultSpeechRate)
         set(value) {
             appCtx.putPrefInt(PreferKey.ttsSpeechRate, value)
         }
 
+    val speechRatePlay: Int get() = if (ttsFlowSys) defaultSpeechRate else ttsSpeechRate
+
     var chineseConverterType: Int
         get() = appCtx.getPrefInt(PreferKey.chineseConverterType)
         set(value) {

+ 4 - 2
app/src/main/java/io/legado/app/service/HttpReadAloudService.kt

@@ -41,6 +41,7 @@ class HttpReadAloudService : BaseReadAloudService(),
     private val ttsFolderPath: String by lazy {
         cacheDir.absolutePath + File.separator + "httpTTS" + File.separator
     }
+    private var speechRate: Int = AppConfig.speechRatePlay
     private val cacheFiles = hashSetOf<String>()
     private var task: Coroutine<*>? = null
     private var playIndexJob: Job? = null
@@ -113,7 +114,7 @@ class HttpReadAloudService : BaseReadAloudService(),
             contentList.forEachIndexed { index, content ->
                 ensureActive()
                 val fileName =
-                    md5SpeakFileName(httpTts.url, AppConfig.ttsSpeechRate.toString(), content)
+                    md5SpeakFileName(httpTts.url, speechRate.toString(), content)
                 val speakText = content.replace(AppPattern.notReadAloudRegex, "")
                 if (hasSpeakFile(fileName)) { //已经下载好的语音缓存
                     if (index == nowSpeak) {
@@ -131,7 +132,7 @@ class HttpReadAloudService : BaseReadAloudService(),
                         val analyzeUrl = AnalyzeUrl(
                             httpTts.url,
                             speakText = speakText,
-                            speakSpeed = AppConfig.ttsSpeechRate,
+                            speakSpeed = speechRate,
                             source = httpTts,
                             headerMapF = httpTts.getHeaderMap(true)
                         )
@@ -317,6 +318,7 @@ class HttpReadAloudService : BaseReadAloudService(),
     override fun upSpeechRate(reset: Boolean) {
         task?.cancel()
         exoPlayer.stop()
+        speechRate = AppConfig.speechRatePlay
         downloadAudio()
     }
 

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

@@ -106,13 +106,14 @@ class TTSReadAloudService : BaseReadAloudService(), TextToSpeech.OnInitListener
      * 更新朗读速度
      */
     override fun upSpeechRate(reset: Boolean) {
-        if (this.getPrefBoolean("ttsFollowSys", true)) {
+        if (AppConfig.ttsFlowSys) {
             if (reset) {
                 clearTTS()
                 initTts()
             }
         } else {
-            textToSpeech?.setSpeechRate((AppConfig.ttsSpeechRate + 5) / 10f)
+            val speechRate = (AppConfig.ttsSpeechRate + 5) / 10f
+            textToSpeech?.setSpeechRate(speechRate)
         }
     }
 

+ 1 - 2
app/src/main/java/io/legado/app/ui/book/read/config/ReadAloudDialog.kt

@@ -22,7 +22,6 @@ import io.legado.app.ui.widget.seekbar.SeekBarChangeListener
 import io.legado.app.utils.ColorUtils
 import io.legado.app.utils.getPrefBoolean
 import io.legado.app.utils.observeEvent
-import io.legado.app.utils.putPrefBoolean
 import io.legado.app.utils.viewbindingdelegate.viewBinding
 
 
@@ -110,7 +109,7 @@ class ReadAloudDialog : BaseDialogFragment(R.layout.dialog_read_aloud) {
         llCatalog.setOnClickListener { callBack?.openChapterList() }
         llToBackstage.setOnClickListener { callBack?.finish() }
         cbTtsFollowSys.setOnCheckedChangeListener { _, isChecked ->
-            requireContext().putPrefBoolean("ttsFollowSys", isChecked)
+            AppConfig.ttsFlowSys = isChecked
             seekTtsSpeechRate.isEnabled = !isChecked
             upTtsSpeechRate()
         }