Dark Mode
Image

Android Fragments

Android Service

Android AlarmManager

Camera Tutorial

Sensor Tutorial

Android Graphics

Android Animation

Android Web Service

Android MCQ

Android Quiz

TextToSpeech

TextToSpeech class is responsible to convert text into speech. It provides a lot of methods to control the speech such as setSpeedRate(), setPitch() etc.

In this example, we are going to see the android texttospeech example with speed and pitch option.

activity_main.xml

Drag 2 textviews, 1 edittext, 1 spinner and 1 button for the layout. Now the activity_main.xml file will look like this:

File: activity_main.xml

<RelativeLayout xmlns:androclass="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=".MainActivity" >  
  
    <EditText  
        android:id="@+id/editText1"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_alignBaseline="@+id/textView1"  
        android:layout_alignBottom="@+id/textView1"  
        android:layout_alignParentRight="true"  
        android:layout_marginRight="58dp"  
        android:ems="10" >  
  
        <requestFocus />  
    </EditText>  
  
    <Button  
        android:id="@+id/button1"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_below="@+id/editText1"  
        android:layout_centerHorizontal="true"  
        android:layout_marginTop="28dp"  
        android:text="Speak" />  
  
    <TextView  
        android:id="@+id/textView2"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_below="@+id/button1"  
        android:layout_marginTop="62dp"  
        android:layout_toLeftOf="@+id/editText1"  
        android:text="Speed:" />  
  
    <TextView  
        android:id="@+id/textView1"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_alignLeft="@+id/textView2"  
        android:layout_alignParentTop="true"  
        android:layout_marginTop="42dp"  
        android:text="Text:" />  
  
    <Spinner  
        android:id="@+id/spinner1"  
        android:layout_width="200dp"  
        android:layout_height="wrap_content"  
        android:layout_below="@+id/button1"  
        android:layout_centerHorizontal="true"  
        android:layout_marginTop="43dp" />  
  
</RelativeLayout>  

Activity class

Let's see the code to speak the given text.

File: MainActivity.java

package com.example.texttospeechspeed;  
  
import android.os.Bundle;  
import android.app.Activity;  
import android.view.Menu;  
  
import java.util.ArrayList;  
import java.util.List;  
import java.util.Locale;  
import android.speech.tts.TextToSpeech;  
import android.util.Log;  
import android.view.View;  
import android.widget.AdapterView;  
import android.widget.AdapterView.OnItemSelectedListener;  
import android.widget.ArrayAdapter;  
import android.widget.Button;  
import android.widget.EditText;  
import android.widget.Spinner;  
import android.widget.Toast;  
public class MainActivity extends Activity implements  
TextToSpeech.OnInitListener,OnItemSelectedListener {  
/** Called when the activity is first created. */  
  
private TextToSpeech tts;  
private Button buttonSpeak;  
private EditText editText;  
private Spinner speedSpinner,pitchSpinner;  
  
private static String speed="Normal";  
@Override  
public void onCreate(Bundle savedInstanceState) {  
super.onCreate(savedInstanceState);  
setContentView(R.layout.activity_main);  
  
tts = new TextToSpeech(this, this);  
buttonSpeak = (Button) findViewById(R.id.button1);  
editText = (EditText) findViewById(R.id.editText1);  
speedSpinner = (Spinner) findViewById(R.id.spinner1);  
  
//load data in spinner  
loadSpinnerData();  
speedSpinner.setOnItemSelectedListener(this);  
  
//button click event  
buttonSpeak.setOnClickListener(new View.OnClickListener() {  
    @Override  
    public void onClick(View arg0) {  
        setSpeed();  
        speakOut();  
    }  
  
});  
}  
  
  
@Override  
public void onInit(int status) {  
  
if (status == TextToSpeech.SUCCESS) {  
  
    int result = tts.setLanguage(Locale.US);  
  
    if (result == TextToSpeech.LANG_MISSING_DATA  
            || result == TextToSpeech.LANG_NOT_SUPPORTED) {  
        Log.e("TTS", "This Language is not supported");  
    } else {  
        buttonSpeak.setEnabled(true);  
        speakOut();  
    }  
  
} else { Log.e("TTS", "Initilization Failed!");}  
  
}  
  
@Override  
public void onDestroy() {  
// Don't forget to shutdown tts!  
if (tts != null) {  
    tts.stop();  
    tts.shutdown();  
}  
super.onDestroy();  
}  
  
private void setSpeed(){  
    if(speed.equals("Very Slow")){  
        tts.setSpeechRate(0.1f);  
    }  
    if(speed.equals("Slow")){  
        tts.setSpeechRate(0.5f);  
    }  
    if(speed.equals("Normal")){  
        tts.setSpeechRate(1.0f);//default 1.0  
    }  
    if(speed.equals("Fast")){  
        tts.setSpeechRate(1.5f);  
    }  
    if(speed.equals("Very Fast")){  
        tts.setSpeechRate(2.0f);  
    }  
    //for setting pitch you may call   
    //tts.setPitch(1.0f);//default 1.0  
}  
  
private void speakOut() {  
String text = editText.getText().toString();  
tts.speak(text, TextToSpeech.QUEUE_FLUSH, null);  
}  
  
private void loadSpinnerData() {  
    //Data for speed Spinner  
    List<String> lables = new ArrayList<String>();  
    lables.add("Very Slow");  
    lables.add("Slow");  
    lables.add("Normal");  
    lables.add("Fast");  
    lables.add("Very Fast");  
      
    // Creating adapter for spinner  
    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, lables);  
  
    // Drop down layout style - list view with radio button  
    dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);  
  
    // attaching data adapter to spinner  
    speedSpinner.setAdapter(dataAdapter);  
      
  }  
  
@Override  
public void onItemSelected(AdapterView<?> parent, View view, int position,  
        long id) {  
    // On selecting a spinner item  
    speed = parent.getItemAtPosition(position).toString();  
  
    Toast.makeText(parent.getContext(), "You selected: " + speed,  
            Toast.LENGTH_LONG).show();  
}  
  
@Override  
public void onNothingSelected(AdapterView<?> arg0) {  
     
}  
  
  
@Override  
public boolean onCreateOptionsMenu(Menu menu) {  
        // Inflate the menu; this adds items to the action bar if it is present.  
        getMenuInflater().inflate(R.menu.activity_main, menu);  
        return true;  
}  
  
}  

You need to run it on the Real Device (e.g. Mobile) to test the application.

Comment / Reply From