I used the following code to convert text to speech. In my code i stored the user input as .wav format. While i execute this code, every thing works fine, when i play the file it won't play.
TTS_AudioActivity.java
public class TTS_AudioActivity extends Activity implements OnInitListener {
private int MY_DATA_CHECK_CODE = 0;
private TextToSpeech tts;
String destFileName = "/sdcard/wakeUp.wav";
private EditText inputText;
private Button speakButton, listen;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
inputText = (EditText) findViewById(R.id.editText1);
speakButton = (Button) findViewById(R.id.button1);
listen = (Button) findViewById(R.id.button2);
speakButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String text = inputText.getText().toString();
if (text != null && text.length() > 0) {
HashMap<String, String> myHashRender = new HashMap();
myHashRender.put(
TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, text);
tts.synthesizeToFile(text, myHashRender, destFileName);
Toast.makeText(TTS_AudioActivity.this, "Saying: " + text,
Toast.LENGTH_LONG).show();
tts.speak(text, TextToSpeech.QUEUE_ADD, null);
}
}
});
listen.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (!Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
} else {
MediaPlayer mpPlayProgram = new MediaPlayer();
try {
mpPlayProgram
.setDataSource("/sdcard/wakeUp.wav");
mpPlayProgram.prepare();
mpPlayProgram.start();
mpPlayProgram.release();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// MediaPlayer mpPlayProgram = new MediaPlayer();
// try {
// mpPlayProgram.setDataSource(destFileName);
// mpPlayProgram.prepare();
// mpPlayProgram.start();
// mpPlayProgram.release();
//
// } catch (IllegalArgumentException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// } catch (IllegalStateException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// tts.addSpeech(null, "/sdcard/wakeUp.wav");
}
});
Intent checkIntent = new Intent();
checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
startActivityForResult(checkIntent, MY_DATA_CHECK_CODE);
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == MY_DATA_CHECK_CODE) {
if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {
// success, create the TTS instance
// tts.isLanguageAvailable(Locale.ENGLISH);
tts = new TextToSpeech(TTS_AudioActivity.this, this);
} else {
// missing data, install it
Intent installIntent = new Intent();
installIntent
.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
startActivity(installIntent);
}
}
}
@Override
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) {
Toast.makeText(TTS_AudioActivity.this,
"Text-To-Speech engine is initialized", Toast.LENGTH_LONG)
.show();
} else if (status == TextToSpeech.ERROR) {
Toast.makeText(TTS_AudioActivity.this,
"Error occurred while initializing Text-To-Speech engine",
Toast.LENGTH_LONG).show();
}
}
}
main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="54dp"
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="42dp"
android:text="Save" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/button1"
android:layout_below="@+id/button1"
android:layout_marginTop="32dp"
android:text="Play" />
</RelativeLayout>
Here i stored the file in sdcard. When i play file from sdcard it won't play. How can i play the file.
The call to release is the problem.
You called release()
just after start()
.
You better call release() when you are done with the MediaPlayer, as said in the documentation : http://developer.android.com/reference/android/media/MediaPlayer.html
You should read carefully this documentation, because MediaPlayer is kind of a complicated thing (in my opinion).
By the way, you should access your sdcard by using Environment.getExternalStorageDirectory()
and going through the files hierarchy from that call.