我用下面的代碼將文本轉換爲語音。在我的代碼中,我將用戶輸入存儲爲.wav格式。當我執行這段代碼時,每件事情都很好,當我播放文件時它不會播放。錄製的音頻無法在Android媒體播放器中播放?
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卡上播放文件時,它不會播放。我如何播放文件。
它來自於停止記錄器開始後直接釋放。 – 2012-04-03 17:45:40