2012-03-30 36 views
5

Tôi đang thực hiện ứng dụng Text to Speech mẫu, trong yêu cầu của tôi là nhận văn bản từ người dùng bằng EditText và lưu văn bản đầu vào dưới định dạng .wav/.mp3 và được lưu trữ trong Bộ nhớ ngoài. Tôi đã sử dụng đoạn mã sau cho quá trình này nhưng tôi sẽ không thành công.Làm cách nào để lưu tệp Văn bản thành giọng nói dưới định dạng .wav/.mp3 trong Bộ nhớ ngoài

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(); 
          } 
         }); 

      } 
     }); 

    } 
} 

trong này, khi tôi bấm nút Store, nhập văn bản phải được lưu trữ như là định dạng .wav, cho điều này tôi đã sử dụng hướng dẫn dành cho nhà phát triển biểu mẫu đoạn mã. Sau khi lưu thành công, khi tôi nhấp vào nút Phát, tệp lưu phải phát. Làm thế nào tôi có thể đạt được điều này. Cảm ơn trước.

+0

+1 cho câu hỏi. Tôi cũng có yêu cầu tương tự Nếu bạn có nó cho tôi biết hoặc cập nhật với câu trả lời .. Cảm ơn .. –

+0

Bạn đã có câu trả lời cho điều này? –

Trả lời

0

Sử dụng

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

Reconnect USB vào điện thoại của bạn. Tôi đã không hiển thị các tệp .wav cho đến khi tôi làm. Ngoài ra, hãy sử dụng Tệp ASTRO để xem chúng.

1

Cậu cố gắng sử dụng chức năng:

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

API DOCUMENTATION

Mã này sẽ là một cái gì đó như thế này:

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"); 
} 

Nếu mọi thứ hoạt động tốt các bài kiểm tra biến phải là 0.

GHI NHỚ THÊM PHÉP ĐỂ QUẢN LÝ CỦA BẠN:

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

Hãy để tôi ngay bây giờ nếu câu trả lời này giúp bạn. – Giuseppe

Các vấn đề liên quan