2015-07-05 3 views
2

Пытается сохранить вывод TTS как файл .wav. Тем не менее, проблема с сохранением вывода, поскольку я не знаком с файловой структурой. Более того, я тестирую его на Nexus 5, который не поддерживает хранение SD.Текст в речь из диалога

Когда я открываю диалоговое окно и пытаюсь сохранить файл, он разбивает все приложение. Ошибка в каталоге не существует. Вот код, который я использовал:

final EditText input = new EditText(this); 
    input.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_CLASS_TEXT); 
    builder.setView(input); 


    builder.setPositiveButton("SAVE", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      //m_Text = input.getText().toString(); 


       File directory = new File(Environment.getDataDirectory() 
         + "/myAppCache/"); 
      if (!directory.exists()) { 
       directory.mkdir(); 
      } 





      HashMap<String, String> myHashRender = new HashMap(); 
      String toSpeak = input.getText().toString(); 
      t1.speak(toSpeak, TextToSpeech.QUEUE_FLUSH, null); 

      String destFileName = Environment.getDataDirectory()+"/myAppCache/wakeUp.wav"; 

      myHashRender.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, toSpeak); 
      t1.synthesizeToFile(toSpeak, myHashRender, destFileName); 
      t1.stop(); 
      t1.shutdown(); 
     } 
    }); 
    builder.setNegativeButton("Play", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      /*String toSpeak = input.getText().toString(); 
      t1.speak(toSpeak, TextToSpeech.QUEUE_FLUSH, null);*/ 



     } 
    }); 

    builder.show(); 
} 

Вот это LogCat, а также:

> 07-05 11:34:48.824 2471-2471/zyia.alarm.zyia.zyia E/TextToSpeech﹕ Opening file /storage/emulated/0/myAppCache/wakeUp.wav failed 
    java.io.FileNotFoundException: No such file or directory 
      at android.os.Parcel.openFileDescriptor(Native Method) 
      at android.os.ParcelFileDescriptor.openInternal(ParcelFileDescriptor.java:253) 
      at android.os.ParcelFileDescriptor.open(ParcelFileDescriptor.java:199) 
      at android.speech.tts.TextToSpeech$17.run(TextToSpeech.java:1793) 
      at android.speech.tts.TextToSpeech$17.run(TextToSpeech.java:1783) 
      at android.speech.tts.TextToSpeech$Connection.runAction(TextToSpeech.java:2232) 
      at android.speech.tts.TextToSpeech.runAction(TextToSpeech.java:742) 
      at android.speech.tts.TextToSpeech.runAction(TextToSpeech.java:732) 
      at android.speech.tts.TextToSpeech.synthesizeToFile(TextToSpeech.java:1783) 
      at android.speech.tts.TextToSpeech.synthesizeToFile(TextToSpeech.java:1840) 
      at zyia.alarm.zyia.zyia.AddAlarm$7.onClick(AddAlarm.java:207) 
      at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:162) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:135) 
      at android.app.ActivityThread.main(ActivityThread.java:5254) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:372) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 

Я попытался с помощью this question, а также для создания каталога, но он не работает. Любая помощь будет оценена по достоинству.

ответ

1

Попробуйте использовать один или несколько из следующих действий:

1) Убедитесь, что у вас есть разрешение WRITE_EXTERNAL_STORAGE в вашем AndroidManifest.xml

2) Используйте mkdirs() функцию, это будет создавать родительские каталоги, если они этого не делают существовать.

3) Используйте команду Environment.getExternalStorageDirectory() вместо Environment.getDataDirectory() и попробуйте написать ее во внешнем хранилище.

Даже если ваше устройство не поддерживает внешнюю SD-карту, часть внутренней памяти может быть выставлена ​​как внешнее хранилище. Проверьте эту ссылку:
источник.android.com/devices/storage