title: nodejs write binary data into WritableStream with Buffer
body: <p>The following code tries to write the header of a WAV file to a stream
  using a Buffer and then writing it to a WritableStream. </p>
  
  <pre><code>  var fs = require("fs") 
  
    var samplesLength = 1000;
    var sampleRate = 44100;
  
    var outStream = fs.createWriteStream("zaz.wav")
  
    var b = new Buffer(1024)        
    b.write('RIFF', 0);
    /* file length */    
    b.writeUInt32LE(32 + samplesLength * 2, 4);
    //b.writeUint32LE(0, 4);
  
    b.write('WAVE', 8);
    /* format chunk identifier */
    b.write('fmt ', 12);
  
    /* format chunk length */
    b.writeUInt32LE(16, 16);
  
    /* sample format (raw) */
    b.writeUInt16LE(1, 20);
    /* channel count */
    b.writeUInt16LE(2, 22);
    /* sample rate */
    b.writeUInt32LE(sampleRate, 24);
    /* byte rate (sample rate * block align) */
    b.writeUInt32LE(sampleRate * 4, 28);
    /* block align (channel count * bytes per sample) */
    b.writeUInt16LE(4, 32);
    /* bits per sample */
    b.writeUInt16LE(16, 34);
    /* data chunk identifier */
    b.write('data', 36);
    /* data chunk length */
  
    //b.writeUInt32LE(40, samplesLength * 2);    
    b.writeUInt32LE(40, 0);
  
  
    outStream.write(b.slice(0,50))
    outStream.end()
  </code></pre>
  
  <p>For some reason, the first 8 bytes of the file are wrong : </p>
  
  <pre>
  hexdump -C zaz.wav 
  00000000  28 00 00 00 f0 07 00 00  57 41 56 45 66 6d 74 20  |(.......WAVEfmt |
  00000010  10 00 00 00 01 00 02 00  44 ac 00 00 10 b1 02 00  |........D.......|
  00000020  04 00 10 00 64 61 74 61  80 5a 57 ac ef 04 00 00  |....data.ZW.....|
  00000030  18 57                                             |.W|
  </pre>
  
  <p>The first line should be : </p>
  
  <pre>
  
  00000000  52 49 46 46 24 00 ff 7f  57 41 56 45 66 6d 74 20  |RIFF$...WAVEfmt |
  </pre>
  
  <h1>Update :</h1>
  
  <p>this line is at fault : </p>
  
  <pre><code>b.writeUInt32LE(40, 0);
  </code></pre>
  
  <p>it needs to be :</p>
  
  <pre><code>b.writeUInt32LE(0, 40);
  </code></pre>