The Android text to speech engine still seems to be a pretty underused
resource in Android apps. However, implementing it in your own
applications is straightforward. There are a few potential issues and
choices you need to consider, but for most purposes, the process is not a
complex one. In this tutorial we jump around a bit within one Android
Activity, but don’t worry, the complete code is listed at the end. The
aim is to give you a clear idea of the what’s going on at each
processing stage so that you can successfully use the function in any
app.
import
android.app.Activity;
import
android.os.Bundle;
import
android.view.View.OnClickListener;
import
android.widget.Button;
import
android.view.View;
import
android.widget.EditText;
import
android.speech.tts.TextToSpeech;
import
android.speech.tts.TextToSpeech.OnInitListener;
import
android.content.Intent;
import
java.util.Locale;
import
android.widget.Toast;
public
class
SpeakingAndroid
extends
Activity
implements
OnClickListener, OnInitListener {
//TTS object
private
TextToSpeech myTTS;
//status check code
private
int
MY_DATA_CHECK_CODE =
0
;
//create the Activity
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.main);
//get a reference to the button element listed in the XML layout
Button speakButton = (Button)findViewById(R.id.speak);
//listen for clicks
speakButton.setOnClickListener(
this
);
//check for TTS data
Intent checkTTSIntent =
new
Intent();
checkTTSIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
startActivityForResult(checkTTSIntent, MY_DATA_CHECK_CODE);
}
//respond to button clicks
public
void
onClick(View v) {
//get the text entered
EditText enteredText = (EditText)findViewById(R.id.enter);
String words = enteredText.getText().toString();
speakWords(words);
}
//speak the user text
private
void
speakWords(String speech) {
//speak straight away
myTTS.speak(speech, TextToSpeech.QUEUE_FLUSH,
null
);
}
//act on result of TTS data check
protected
void
onActivityResult(
int
requestCode,
int
resultCode, Intent data) {
if
(requestCode == MY_DATA_CHECK_CODE) {
if
(resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {
//the user has the necessary data - create the TTS
myTTS =
new
TextToSpeech(
this
,
this
);
}
else
{
//no data - install it now
Intent installTTSIntent =
new
Intent();
installTTSIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
startActivity(installTTSIntent);
}
}
}
//setup TTS
public
void
onInit(
int
initStatus) {
//check for successful instantiation
if
(initStatus == TextToSpeech.SUCCESS) {
if
(myTTS.isLanguageAvailable(Locale.US)==TextToSpeech.LANG_AVAILABLE)
myTTS.setLanguage(Locale.US);
}
else
if
(initStatus == TextToSpeech.ERROR) {
Toast.makeText(
this
,
"Sorry! Text To Speech failed..."
, Toast.LENGTH_LONG).show();
}
}
}
Remember to use your own class name and to indicate your application package at the top of the file. If you are using Eclipse, you should not need to add all of the import statements manually, as the IDE will insert some of them automatically. Run your app in the Android emulator and hear it in action.
This is a basic overview of implementing Text To Speech in your Android apps. The TTS resource provides a wide range of additional options you may want to explore depending on the nature of your apps. When calling the TextToSpeech object “speak” method for example, you can pass a HashMap object indicating the details of more complex playback options.
Official Android text to speech Documentation. Details
Mobile tut plus tutorials. Details
Android Hive full video and code. Details
0 comments
Thanks for your comment