Text to Speech – Kotlin Android
To convert Text to Speech in Android, you may use speak() method of android.speech.tts.TextToSpeech class.
In this tutorial – Android Text To Speech, we will learn how to use TextToSpeech class and convert text to speech (audio) with the help of a Kotlin Android Application.
Steps – Text to Speech Conversion
Following are the steps we have to take while using speak() method of TextToSpeech.
Step 1: Extend your activity with TextToSpeech.OnInitListener.
class MainActivity : AppCompatActivity(),TextToSpeech.OnInitListener
Step 2: Initialize TextToSpeech class variable.
tts = TextToSpeech(this, this)
TextToSpeech(Context, OnInitListener)
Step 3: You may set an event, which can trigger the Speech output. A button onClickListener is used in this example.
buttonSpeak!!.setOnClickListener { speakOut() }
private fun speakOut() { val text = editText!!.text.toString() tts!!.speak(text, TextToSpeech.QUEUE_FLUSH, null,"") }
Step 4: When your application is started, TextToSpeech Engine may take some duration of time for initialization. To avoid speaking out, you may initially disable the button to speak. When the TextToSpeech Engine is initialized, onInit() function is called, which should be overridden and you may enable the button here.
Step 5: And finally, when your Activity is destroyed, stop and shutdown TextToSpeech Engine.
public override fun onDestroy() { // Shutdown TTS if (tts != null) { tts!!.stop() tts!!.shutdown() } super.onDestroy() }
Android Text To Speech – Kotlin Example
Following are the details of the Android Application we created for this example.
Application Name | TextToSpeechApp |
Company name | tutorialkart.com |
Minimum SDK | API 21: Android 5.0 (Lollipop) |
Activity | Empty Activity |
You may keep rest of the values as default and create Android Application with Kotlin Support.
Following are the MainActivity.kt (class file) and activity_main.xml (layout file).
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.tutorialkart.texttospeechapp.MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center"> <EditText android:id="@+id/edittext_input" android:layout_width="wrap_content" android:layout_height="wrap_content" android:ems="10" > <requestFocus /> </EditText> <Button android:id="@+id/button_speak" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Speak" /> </LinearLayout> </android.support.constraint.ConstraintLayout>
MainActivity.kt
package com.tutorialkart.texttospeechapp import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.speech.tts.TextToSpeech import android.util.Log import android.widget.Button import android.widget.EditText import kotlinx.android.synthetic.main.activity_main.* import java.util.* class MainActivity : AppCompatActivity(),TextToSpeech.OnInitListener { private var tts: TextToSpeech? = null private var buttonSpeak: Button? = null private var editText: EditText? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) buttonSpeak = this.button_speak editText = this.edittext_input buttonSpeak!!.isEnabled = false; tts = TextToSpeech(this, this) buttonSpeak!!.setOnClickListener { speakOut() } } override fun onInit(status: Int) { if (status == TextToSpeech.SUCCESS) { // set US English as language for tts val result = tts!!.setLanguage(Locale.US) if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) { Log.e("TTS","The Language specified is not supported!") } else { buttonSpeak!!.isEnabled = true } } else { Log.e("TTS", "Initilization Failed!") } } private fun speakOut() { val text = editText!!.text.toString() tts!!.speak(text, TextToSpeech.QUEUE_FLUSH, null,"") } public override fun onDestroy() { // Shutdown TTS if (tts != null) { tts!!.stop() tts!!.shutdown() } super.onDestroy() } }
Run the application, and you will get the following output in the screen.
Output

Type in some text into the text input.

Click on SPEAK button, and you will hear the Speech.
Conclusion
In this Kotlin Android Tutorial, we learned how to use TextToSpeech class to convert text to audio.