Так что я пишу приложение, которое создает WAV-файл какого-либо устного текста через TextToSpeech. Я подтвердил, что файл успешно созданAndroid: Воспроизведение WAV, созданное TTS
Когда я затем попытаться воспроизвести его, то приложение падает с
FATAL ИСКЛЮЧЕНИЕ: главный процесса: com.burfdevelopment.lejostoandroid, PID: 6539 java.lang .IllegalStateException на android.media.MediaPlayer._setDataSource (нативный метод) на android.media.MediaPlayer.setDataSource (MediaPlayer.java:1133) на android.media.MediaPlayer.setDataSource (MediaPlayer.java:1118) на android.media.MediaPlayer.setDataSource (MediaPlayer.java:1097) в android.media.MediaPlayer.setDataSource (MediaPlayer.java:1046) на com.burfdevelopment.lejostoandroid.MainActivity.speakWords (MainActivity.java:351) на com.burfdevelopment.lejostoandroid.MainActivity.onInit (MainActivity.java:436) на android.speech.tts.TextToSpeech.dispatchOnInit (TextToSpeech.java:814) на android.speech.tts.TextToSpeech.-wrap4 (TextToSpeech.java) at android.speech.tts.TextToSpeech $ Connection $ SetupConnectionAsyncTask.onPostExecute (TextToSpee ch.java:2174) на android.speech.tts.TextToSpeech $ Подключение $ SetupConnectionAsyncTask.onPostExecute (TextToSpeech.java:2168) в android.os.AsyncTask.finish (AsyncTask.java:651) в android.os .AsyncTask.-wrap1 (AsyncTask.java) на android.os.AsyncTask $ InternalHandler.handleMessage (AsyncTask.java:668) в android.os.Handler.dispatchMessage (Handler.java:102) в android.os .Looper.loop (Looper.java:148) на android.app.ActivityThread.main (ActivityThread.java:5417) на java.lang.reflect.Method.invoke (собственный метод) на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:726) в com.android.internal.os.ZygoteInit.main (ZygoteInit.java:616)
Код
private void speakWords(String speech) {
//implement TTS here
if (speech != null && speech.length() > 0) {
//
HashMap<String, String> myHashAlarm = new HashMap<String, String>();
myHashAlarm.put(TextToSpeech.Engine.KEY_PARAM_STREAM, String.valueOf(AudioManager.STREAM_ALARM));
myHashAlarm.put(TextToSpeech.Engine.KEY_PARAM_VOLUME, "1");
myHashAlarm.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "SOME MESSAGE");
String root = Environment.getExternalStorageDirectory().toString();
soundFilename = root + "/simon.wav";
soundFile = new File(soundFilename);
if (soundFile.exists())
soundFile.delete();
if(myTTS.synthesizeToFile(speech, myHashAlarm, soundFilename)== TextToSpeech.SUCCESS) {
try {
mMediaPlayer.setDataSource(soundFilename);
mMediaPlayer.prepare();
mMediaPlayer.start();
} catch (IOException e) {
e.printStackTrace();
}
}
else {
Toast.makeText(getBaseContext(),"Oops! Sound file not created",Toast.LENGTH_SHORT).show();
}
}
}
Я могу воспроизвести файл на реальном устройстве через FileManager. Я попытался воспроизвести его позже, я попробовал просто сыграть в файл. Линия источника данных - это место, где он сбой.
mMediaPlayer.setDataSource (soundFilename);
Что я сделал неправильно? – Burf2000
'mMediaPlayer.start();' выбрал исключение. Средства массовой информации не были подготовлены при вызове 'start()'. Вы должны вызвать 'start()' в 'onPrepared()' с помощью прослушивателя. –