Skip to content

Text To Speech (TTS)

var tts by remember { mutableStateOf<TextToSpeech?>(null) }
var ttsReady by remember { mutableStateOf(false) }
LaunchedEffect(Unit) {
tts = TextToSpeech(context) { status ->
if (status == TextToSpeech.SUCCESS) {
tts?.language = Locale.US
ttsReady = true
}
}
}
DisposableEffect(Unit) {
onDispose {
tts?.stop()
tts?.shutdown()
}
}
tts?.speak(text, TextToSpeech.QUEUE_FLUSH, null, null)

The second parameter decides the TTS engine behavior when there’s new text to speak:

UsageDescription
TextToSpeech.QUEUE_FLUSHSpeak immediately
TextToSpeech.QUEUE_ADDSpeak right after the current speech is done