sampleBlob = {
var bufferLength = sample.getChannelData(0).length;
var dataLength = sample.length * bufferLength;
var headerLength = 44;
var wav = new Uint8Array( headerLength + dataLength );
var view = new DataView( wav.buffer );
var recordedBuffers = sample.getChannelData(0);
var bitDepth = 16;
var bytesPerSample = bitDepth / 8;
view.setUint32( 0, 1380533830, false );
view.setUint32( 4, 36 + dataLength, true );
view.setUint32( 8, 1463899717, false );
view.setUint32( 12, 1718449184, false );
view.setUint32( 16, 16, true );
view.setUint16( 20, 1, true );
view.setUint16( 22, sample.numberOfChannels, true );
view.setUint32( 24, sample.sampleRate, true );
view.setUint32( 28, sample.sampleRate * bytesPerSample * sample.numberOfChannels, true );
view.setUint16( 32, bytesPerSample * sample.numberOfChannels, true );
view.setUint16( 34, bitDepth, true );
view.setUint32( 36, 1684108385, false);
view.setUint32( 40, dataLength, true );
for (var i = 0; i < recordedBuffers.length; i++ ) {
wav.set( recordedBuffers[i], i * bufferLength + headerLength );
}
return new Blob([wav.buffer], {type:"audio/wav"});
}