Сначала я скопировал следующую функцию:
Код: Выделить всё
@Composable
fun rememberTextToSpeech(ttsLocale: Locale): MutableState {
val context = LocalContext.current
val tts = remember { mutableStateOf(null) }
DisposableEffect(context) {
val textToSpeech = TextToSpeech(context) { status ->
if (status == TextToSpeech.SUCCESS) {
tts.value?.language = ttsLocale
}
}
tts.value = textToSpeech
onDispose {
tts.value?.stop()
tts.value?.shutdown()
}
}
return tts
}
Код: Выделить всё
@Composable
fun AudioButton(
language: Language,
text: String
) {
val ttsLocale = when (language) {
Language.EN -> Locale("en", "GB")
...
}
var isSpeaking by remember { mutableStateOf(false) }
val tts = rememberTextToSpeech(ttsLocale)
isSpeaking = false
Button(
onClick = {
if (tts.value?.isSpeaking == true) {
tts.value?.stop()
isSpeaking = false
} else {
tts.value?.speak(text, TextToSpeech.QUEUE_FLUSH, null, null)
isSpeaking = true
}
},
modifier = Modifier.size(48.dp),
...
) {
Icon(
modifier = Modifier.size(24.dp),
imageVector = AudioIcon,
...
)
}
}
Мне хотелось бы, чтобы звук начинался, как только я нажимаю кнопку, и автоматически прекращался, как только слово было произнесено.
Подробнее здесь: https://stackoverflow.com/questions/794 ... ck-compose
Мобильная версия