title: Android How To record audio using MediaRecorder and output as raw PCM?
body: <p>I currently record audio using MediaRecorder to produce .m4a, .mp4, .acc 
  and .3gp, and also visualize the output data of each recording with 
  VisualizerView.</p>
  
  <p><strong>Now I would like to do the same thing with PCM.</strong></p>
  
  <p>I have tried using MediaRecorder with ENCODING_PCM_16BIT input with several different combinations of output. But none of the combinations produce raw PCM output.</p>
  
  <p>My question is: <strong>How can I record using MediaRecorder and output the result as raw PCM?</strong></p>
  
  <p>Java code:</p>
  
  <pre><code>public String mFileName = null;
  private String fileName = null;
  private String fileNamePcm = null;
  
  String formattedDate = new SimpleDateFormat("MM-dd-yyyy_HH-mm-ss").format(new Date());
  fileName = formattedDate;
  fileNamePcm = formattedDate;
  
  MediaRecorder mRecorder = new MediaRecorder();
  
  startRecording() {
  
      // Test Format 1 - produced AMR_WB file
      mRecorder.setAudioSamplingRate(44100);
      mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
      mRecorder.setOutputFormat(AudioFormat.CHANNEL_OUT_MONO); // produced AMR_WB file.
      mRecorder.setAudioEncoder(AudioFormat.ENCODING_PCM_16BIT);
  
  
      // Test Format 2 - produced 3gp file
      mRecorder.setAudioSamplingRate(44100);
      mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
      mRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); // produced 3gp file.
      mRecorder.setAudioEncoder(AudioFormat.ENCODING_PCM_16BIT);
  
  
      // Test Format 3 - produced 3gp file
      mRecorder.setAudioSamplingRate(44100);
      mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
      mRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); // did not produced a file.
      mRecorder.setAudioEncoder(AudioFormat.ENCODING_PCM_16BIT);
      mRecorder.setOutputFile(fileNamePcm);  // produced 3gp file. // trying to write raw pcm output to file.
  
  
      mFileName = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + "TestRecordings" + "/" + fileName + ".3gp";
      mFileName = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + "TestRecordings" + "/" + fileNamePcm + ".pcm";
  
      mRecorder.setOutputFile(mFileName);
  
      try {
          mRecorder.prepare();
      } catch (IOException e) {
          Log.e(LOG_TAG, "prepare() failed");
      } catch (IllegalStateException e) {
          e.printStackTrace();
      }
  
      mRecorder.start();
  
  }
  </code></pre>