|
|
@ -1,7 +1,6 @@ |
|
|
|
package io.legado.app.service |
|
|
|
package io.legado.app.service |
|
|
|
|
|
|
|
|
|
|
|
import android.app.PendingIntent |
|
|
|
import android.app.PendingIntent |
|
|
|
import android.os.Build |
|
|
|
|
|
|
|
import android.speech.tts.TextToSpeech |
|
|
|
import android.speech.tts.TextToSpeech |
|
|
|
import android.speech.tts.UtteranceProgressListener |
|
|
|
import android.speech.tts.UtteranceProgressListener |
|
|
|
import io.legado.app.R |
|
|
|
import io.legado.app.R |
|
|
@ -33,6 +32,8 @@ class TTSReadAloudService : BaseReadAloudService(), TextToSpeech.OnInitListener |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private val ttsUtteranceListener = TTSUtteranceListener() |
|
|
|
|
|
|
|
|
|
|
|
override fun onCreate() { |
|
|
|
override fun onCreate() { |
|
|
|
super.onCreate() |
|
|
|
super.onCreate() |
|
|
|
initTts() |
|
|
|
initTts() |
|
|
@ -41,7 +42,9 @@ class TTSReadAloudService : BaseReadAloudService(), TextToSpeech.OnInitListener |
|
|
|
|
|
|
|
|
|
|
|
private fun initTts() { |
|
|
|
private fun initTts() { |
|
|
|
ttsInitFinish = false |
|
|
|
ttsInitFinish = false |
|
|
|
textToSpeech = TextToSpeech(this, this) |
|
|
|
textToSpeech = TextToSpeech(this, this).apply { |
|
|
|
|
|
|
|
setOnUtteranceProgressListener(ttsUtteranceListener) |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
override fun onDestroy() { |
|
|
|
override fun onDestroy() { |
|
|
@ -54,10 +57,9 @@ class TTSReadAloudService : BaseReadAloudService(), TextToSpeech.OnInitListener |
|
|
|
if (status == TextToSpeech.SUCCESS) { |
|
|
|
if (status == TextToSpeech.SUCCESS) { |
|
|
|
textToSpeech?.let { |
|
|
|
textToSpeech?.let { |
|
|
|
it.language = Locale.CHINA |
|
|
|
it.language = Locale.CHINA |
|
|
|
it.setOnUtteranceProgressListener(TTSUtteranceListener()) |
|
|
|
|
|
|
|
ttsInitFinish = true |
|
|
|
ttsInitFinish = true |
|
|
|
} |
|
|
|
|
|
|
|
play() |
|
|
|
play() |
|
|
|
|
|
|
|
} |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
launch { |
|
|
|
launch { |
|
|
|
toast(R.string.tts_init_failed) |
|
|
|
toast(R.string.tts_init_failed) |
|
|
@ -73,28 +75,17 @@ class TTSReadAloudService : BaseReadAloudService(), TextToSpeech.OnInitListener |
|
|
|
if (requestFocus()) { |
|
|
|
if (requestFocus()) { |
|
|
|
MediaHelp.playSilentSound(this) |
|
|
|
MediaHelp.playSilentSound(this) |
|
|
|
super.play() |
|
|
|
super.play() |
|
|
|
|
|
|
|
textToSpeech?.stop() |
|
|
|
for (i in nowSpeak until contentList.size) { |
|
|
|
for (i in nowSpeak until contentList.size) { |
|
|
|
if (i == 0) { |
|
|
|
|
|
|
|
speak(contentList[i], TextToSpeech.QUEUE_FLUSH, AppConst.APP_TAG + i) |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
speak(contentList[i], TextToSpeech.QUEUE_ADD, AppConst.APP_TAG + i) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private fun speak(content: String, queueMode: Int, utteranceId: String) { |
|
|
|
|
|
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { |
|
|
|
|
|
|
|
textToSpeech?.speak(content, queueMode, null, utteranceId) |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
@Suppress("DEPRECATION") |
|
|
|
|
|
|
|
textToSpeech?.speak( |
|
|
|
textToSpeech?.speak( |
|
|
|
content, |
|
|
|
contentList[i], |
|
|
|
queueMode, |
|
|
|
TextToSpeech.QUEUE_ADD, |
|
|
|
hashMapOf(Pair(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, utteranceId)) |
|
|
|
null, |
|
|
|
|
|
|
|
AppConst.APP_TAG + i |
|
|
|
) |
|
|
|
) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* 更新朗读速度 |
|
|
|
* 更新朗读速度 |
|
|
@ -161,9 +152,9 @@ class TTSReadAloudService : BaseReadAloudService(), TextToSpeech.OnInitListener |
|
|
|
pageIndex++ |
|
|
|
pageIndex++ |
|
|
|
ReadBook.moveToNextPage() |
|
|
|
ReadBook.moveToNextPage() |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
postEvent(EventBus.TTS_PROGRESS, readAloudNumber + 1) |
|
|
|
postEvent(EventBus.TTS_PROGRESS, readAloudNumber + 1) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
override fun onDone(s: String) { |
|
|
|
override fun onDone(s: String) { |
|
|
|
readAloudNumber += contentList[nowSpeak].length + 1 |
|
|
|
readAloudNumber += contentList[nowSpeak].length + 1 |
|
|
|