title: Android:Creating Wave file using Raw PCM, the wave file does not play
body: <p>I have created the header for the wave file, but the wave file which is created does not play.</p>
  
  <p>I have used this <a href="https://ccrma.stanford.edu/courses/422/projects/WaveFormat/" rel="nofollow">https://ccrma.stanford.edu/courses/422/projects/WaveFormat/</a> as a reference to create the wave header.</p>
  
  <pre><code>    public void WriteWaveFileHeader() throws IOException {
      File f = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/aaa.wav");
      f.createNewFile();
      FileOutputStream fos = new FileOutputStream(f);
      long longSampleRate=44100;
      int channels= AudioFormat.CHANNEL_IN_MONO;
      long totalAudioLen=fos.getChannel().size();
      long byteRate=(16 * 44100)/8;
      long totalDataLen=totalAudioLen+36;
      byte[] header = new byte[44];
  
      header[0] = 'R';  // RIFF/WAVE header
      header[1] = 'I';
      header[2] = 'F';
      header[3] = 'F';
      header[4] = (byte) (totalDataLen &amp; 0xff);
      header[5] = (byte) ((totalDataLen &gt;&gt; 8) &amp; 0xff);
      header[6] = (byte) ((totalDataLen &gt;&gt; 16) &amp; 0xff);
      header[7] = (byte) ((totalDataLen &gt;&gt; 24) &amp; 0xff);
      header[8] = 'W';
      header[9] = 'A';
      header[10] = 'V';
      header[11] = 'E';
      header[12] = 'f';  // 'fmt ' chunk
      header[13] = 'm';
      header[14] = 't';
      header[15] = ' ';
      header[16] = 16;  // 4 bytes: size of 'fmt ' chunk
      header[17] = 0;
      header[18] = 0;
      header[19] = 0;
      header[20] = 1;  // format = 1
      header[21] = 0;
      header[22] = (byte) channels;
      header[23] = 0;
      header[24] = (byte) (longSampleRate &amp; 0xff);
      header[25] = (byte) ((longSampleRate &gt;&gt; 8) &amp; 0xff);
      header[26] = (byte) ((longSampleRate &gt;&gt; 16) &amp; 0xff);
      header[27] = (byte) ((longSampleRate &gt;&gt; 24) &amp; 0xff);
      header[28] = (byte) (byteRate &amp; 0xff);
      header[29] = (byte) ((byteRate &gt;&gt; 8) &amp; 0xff);
      header[30] = (byte) ((byteRate &gt;&gt; 16) &amp; 0xff);
      header[31] = (byte) ((byteRate &gt;&gt; 24) &amp; 0xff);
      header[32] = (byte) (2 * 16 / 8);  // block align
      header[33] = 0;
      header[34] = 16;  // bits per sample
      header[35] = 0;
      header[36] = 'd';
      header[37] = 'a';
      header[38] = 't';
      header[39] = 'a';
      header[40] = (byte) (totalAudioLen &amp; 0xff);
      header[41] = (byte) ((totalAudioLen &gt;&gt; 8) &amp; 0xff);
      header[42] = (byte) ((totalAudioLen &gt;&gt; 16) &amp; 0xff);
      header[43] = (byte) ((totalAudioLen &gt;&gt; 24) &amp; 0xff);
  
      fos.write(header, 0, 44);
      File l = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Notate/" + MainActivity.filepath);
      FileInputStream fis = new FileInputStream(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Notate/" + MainActivity.filepath);
      byte[] buffer = new byte[(int) l.length()];
  
      int intSize = android.media.AudioTrack.getMinBufferSize(44100, AudioFormat.CHANNEL_OUT_MONO,
              AudioFormat.ENCODING_PCM_16BIT);
      AudioTrack at = new AudioTrack(AudioManager.STREAM_MUSIC, 44100, AudioFormat.CHANNEL_OUT_MONO,
              AudioFormat.ENCODING_PCM_16BIT, intSize, AudioTrack.MODE_STREAM);
      at.write(buffer,0,(int)l.length());
      fos.write(buffer);
      fos.flush();
      fos.close();
  
  
  }
  </code></pre>