Преобразование текста в речь в Jetpack ComposeAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Преобразование текста в речь в Jetpack Compose

Сообщение Anonymous »

Основываясь на статье, я попытался интегрировать функцию преобразования текста в речь в свое приложение. Однако я не могу сказать, что она работает хорошо, так как все еще сталкиваюсь с некоторыми ошибками.
Сначала я скопировал следующую функцию:

Код: Выделить всё

@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
}
Затем я создал компонент многократного использования для своей кнопки. В зависимости от экрана его можно отрендерить 2–3 раза с разными параметрами.

Код: Выделить всё

@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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»