2012-03-30 7 views
5

Estoy haciendo una aplicación de ejemplo de texto a voz, en este mi requisito es obtener un texto del usuario utilizando EditText y guardar el texto de entrada como formato .wav/.mp3 y almacenado en el almacenamiento externo. Usé el siguiente código para este proceso, pero no lo conseguiré.¿Cómo puedo guardar el archivo de texto a voz como formato .wav/.mp3 en el almacenamiento externo

main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 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="fill_parent" 
     android:layout_height="wrap_content" 
     android:inputType="textMultiLine" > 

     <requestFocus /> 
    </EditText> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Save in Sdcard" /> 


    <Button 
     android:id="@+id/button2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Play the text file" /> 

</LinearLayout> 

TTS_AudioActivity.java

public class TTS_AudioActivity extends Activity { 
    /** Called when the activity is first created. */ 
    Button store, play; 
    EditText input; 
    String speakTextTxt; 
    private TextToSpeech mTts; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     store = (Button) findViewById(R.id.button1); 
     play = (Button) findViewById(R.id.button2); 
     input = (EditText) findViewById(R.id.editText1); 
     store.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       speakTextTxt = input.getText().toString(); 
       HashMap<String, String> myHashRender = new HashMap<String, String>(); 
       myHashRender.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, 
         speakTextTxt); 

       String exStoragePath = Environment 
         .getExternalStorageDirectory().getAbsolutePath(); 
       File appTmpPath = new File(exStoragePath + "/sounds/"); 
       appTmpPath.mkdirs(); 
       String tempFilename = "tmpaudio.wav"; 
       String tempDestFile = appTmpPath.getAbsolutePath() + "/" 
         + tempFilename; 

       mTts.synthesizeToFile(speakTextTxt, myHashRender, tempDestFile); 

      } 
     }); 

     play.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       final MediaPlayer mMediaPlayer = new MediaPlayer(); 
       try { 
        mMediaPlayer.setDataSource("/sdcard/sounds/tmpaudio.wav"); 
       } 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(); 
       } 
       mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
       mMediaPlayer.start(); 
       mMediaPlayer 
         .setOnCompletionListener(new OnCompletionListener() { 
          @Override 
          public void onCompletion(MediaPlayer mp) { 
           mMediaPlayer.stop(); 
          } 
         }); 

      } 
     }); 

    } 
} 

en esto, cuando hago clic en el botón Store, el texto de entrada se debe almacenar como formato .wav, para este utilicé la guía del desarrollador del formulario del fragmento de código. Una vez que se haya guardado correctamente, cuando hago clic en el botón Reproducir, el archivo guardado debe reproducirse. Cómo puedo conseguir esto. Gracias por adelantado.

+0

+1 para la pregunta. También estoy teniendo el mismo requisito. Si lo recibiste dímelo o actualízate con la respuesta. Gracias. –

+0

¿Tienes respuesta para esto? –

Respuesta

0

Uso

MediaScannerConnection.scanFile((Context) (this), new String[] {destFileName}, null, null); 

Volver a conectar USB al dispositivo. El mío no mostró los archivos .wav hasta que lo hice. Alternativamente, use el archivo ASTRO para verlos.

1

¿trató de utilizar la función:

public int synthesizeToFile (CharSequence text, Bundle params, File file, String utteranceId) 

API DOCUMENTATION

El código sería algo como esto:

private void speakText(String text) { 
    String state = Environment.getExternalStorageState(); 
    boolean mExternalStorageWriteable = false; 
    boolean mExternalStorageAvailable = false; 
    if (Environment.MEDIA_MOUNTED.equals(state)) { 
     // Can read and write the media 
     mExternalStorageAvailable = mExternalStorageWriteable = true; 

    } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { 
     // Can only read the media 
     mExternalStorageAvailable = true; 
     mExternalStorageWriteable = false; 
    } else { 
     // Can't read or write 
     mExternalStorageAvailable = mExternalStorageWriteable = false; 
    } 
    File root = android.os.Environment.getExternalStorageDirectory(); 
    File dir = new File(root.getAbsolutePath() + "/download"); 
    dir.mkdirs(); 
    File file = new File(dir, "myData.mp3"); 
    int test = m_TTS.synthesizeToFile((CharSequence) text, null, file, 
      "tts"); 
} 

Si todo funciona bien la prueba de la variable debe ser 0.

RECUERDE PARA AGREGAR PERMISOS PARA SU MANIFIESTO:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
+0

Déjame ahora si esta respuesta te ayuda. – Giuseppe

Cuestiones relacionadas