TtsService.kt
2.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package com.tools.tts.service
import android.speech.tts.SynthesisCallback
import android.speech.tts.SynthesisRequest
import android.speech.tts.TextToSpeech
import android.speech.tts.TextToSpeechService
import android.util.Log
import com.tools.tts.tts.TtsManager
import java.util.*
class TtsService : TextToSpeechService() {
private val currentLanguage: MutableList<String> = mutableListOf("zho", "CHN", "")
override fun onCreate() {
super.onCreate()
// Initialize the TtsManager here, as this is the entry point of the service.
TtsManager.initModels(this)
}
override fun onIsLanguageAvailable(_lang: String?, _country: String?, _variant: String?): Int {
val lang = _lang ?: ""
val country = _country ?: ""
val variant = _variant ?: ""
// Log.i("Test", "======》$lang, $country, $variant")
return if (Locale.SIMPLIFIED_CHINESE.isO3Language == lang
|| Locale.US.isO3Language == lang
) {
if (Locale.SIMPLIFIED_CHINESE.isO3Country == country
|| Locale.US.isO3Country == country
)
TextToSpeech.LANG_COUNTRY_AVAILABLE
else
TextToSpeech.LANG_AVAILABLE
} else TextToSpeech.LANG_NOT_SUPPORTED
}
override fun onGetLanguage(): Array<String> {
Log.i("Test", "onGetLanguage: ${currentLanguage.toTypedArray()}")
return currentLanguage.toTypedArray()
}
override fun onLoadLanguage(_lang: String?, _country: String?, _variant: String?): Int {
val lang = _lang ?: ""
val country = _country ?: ""
val variant = _variant ?: ""
Log.i("Test", "$lang, $country, $variant")
val result = onIsLanguageAvailable(lang, country, variant)
currentLanguage.clear()
currentLanguage.addAll(arrayOf<String>(lang, country, variant))
return result
}
override fun onStop() {
TtsManager.stop()
}
override fun onSynthesizeText(request: SynthesisRequest?, callback: SynthesisCallback?) {
if (request == null || callback == null) return
val language = request.language
val country = request.country
val variant = request.variant
val text = request.charSequenceText.toString()
Log.d("Test", "---->onSynthesizeText: $language, $country, $variant")
val load = onIsLanguageAvailable(language, country, variant)
if (load == TextToSpeech.LANG_NOT_SUPPORTED) {
callback.error()
Log.d("Test", "---->LANG_NOT_SUPPORTED")
return
}
if (!TtsManager.isReady) {
Log.d("Test", "---->TtsManager.isReady - false")
callback.error()
return
}
Log.e("Test", "---->text=$text")
TtsManager.speechAsync(text, callback)
}
}