我使用以下代码将文本转换为语音。在我的代码中,我将用户输入存储为.wav格式。当我执行这段代码时,每件事都运行正常,当我播放文件时它不会播放。
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>
这里我将文件存储在SD卡中。当我从SD卡播放文件时,它将无法播放。我该如何播放该文件。
答案 0 :(得分:0)
您可以对该行mpPlayProgram.release();
发表评论并检查其是否有效。
一旦你想要发布媒体播放器而不是在播放时,应该调用发布方法。
答案 1 :(得分:0)
发布的呼吁是问题所在。
您在release()
之后致电start()
。
最好在完成MediaPlayer后调用release(),如文档中所述:http://developer.android.com/reference/android/media/MediaPlayer.html
你应该仔细阅读这篇文档,因为MediaPlayer是一件很复杂的事情(在我看来)。
顺便说一句,您应该使用Environment.getExternalStorageDirectory()
访问您的SD卡,并通过该调用的文件层次结构。