Android MediaRecorder到AudioTrack,录音和播放

问题描述:

我正在尝试使用它来记录用户的声音并使用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

你是什么意思通过写入文件到音轨?您不需要将任何文件写入音轨,设置音频源,录音机将创建音轨并从音频源读取pcm数据,然后对数据进行编码,将数据写入输出文件。

+0

我的意思是我试图使用MediaRecorder录制音频,然后将该文件放入AudioTrack中以播放它 – lespommes