2011-07-07 71 views
0

我正在嘗試使用它來記錄用戶的聲音並使用MediaRecorder和AudioTrack在相同的活動中播放它。我只是不明白如何將文件寫入AudioTrack。我已經閱讀了這兩份文件,根本無法弄清楚。任何幫助,將不勝感激。這是我的代碼到目前爲止,它不完整。您只需要閱讀的按鈕是recordButton和playbackButton。謝謝!Android MediaRecorder到AudioTrack,錄音和播放

private File outputFile = null; 
private AudioTrack voice = null; 
private MediaRecorder recorder = null; 
.... 
     // Setup recorder... 
    recorder = new MediaRecorder(); 
    recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
    // Setup record file... 
    outputFile = getFileStreamPath("output.amr"); 
    recorder.setOutputFile(outputFile.getAbsolutePath()); 
public void onClick(View v){ 
    switch(v.getId()) { 
    case R.id.next_button: 
     giveSentence(); 
     break; 
    case R.id.repeat_button: 
//   playSentence(); 
     break; 
    case R.id.recordButton: 
     if (!recording){ 
     recordButton2.setBackgroundResource(android.R.drawable.button_onoff_indicator_on); 
      recording = true; 
      recorder.reset(); 
      recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
      recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
      recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
      recorder.setOutputFile(outputFile.getAbsolutePath()); 
      try { 
       recorder.prepare(); 
      } catch (IllegalStateException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      recorder.start(); 
     } 
     else if(recording) { 
        recordButton2.setBackgroundResource(android.R.drawable.button_onoff_indicator_off); 
      recording = false; 
      recorder.stop(); 
     } 
     break; 
    case R.id.playbackButton: 
     Music.playSentence(this, outputFile); 
     break; 
    case R.id.slowButton: 
     if(!slowedSpeech) { 
      slowButton2.setBackgroundResource(android.R.drawable.ic_dialog_alert); 
      slowedSpeech = true; 
//    slowspeech(); 
     } 
     else if(slowedSpeech) { 
      slowButton2.setBackgroundResource(android.R.drawable.ic_menu_recent_history); 
      slowedSpeech = false; 
//    noSlowSpeech(); 
     } 
     break; 
    } 
} 
+0

您是否嘗試使用[AudioRecord](http://developer.android.com/reference/android/media/AudioRecord.html),這將讓你設置採樣率,信道配置和格式?然後你會知道在AudioTrack中使用哪些參數。 – Vanja

回答

0

你是什麼意思通過寫入文件到音軌?您不需要將任何文件寫入音軌,設置音頻源,錄音機將創建音軌並從音頻源讀取pcm數據,然後對數據進行編碼,將數據寫入輸出文件。

+0

我的意思是我試圖使用MediaRecorder錄製音頻,然後將該文件放入AudioTrack中以播放它 – lespommes