finish method
Implementation
@override
web.Blob finish() {
final headerSize = 44;
final bitsPerSample = 16;
final bytesPerSample = (bitsPerSample / 8).toInt();
final byteRate = sampleRate * numChannels * bytesPerSample;
final blockAlign = numChannels * bytesPerSample;
final view = ByteData(headerSize);
// RIFF chunk
view.setString(0, 'RIFF');
view.setUint32(4, headerSize + _audioData.length - 8, Endian.little);
view.setString(8, 'WAVE');
view.setString(12, 'fmt ');
view.setUint32(16, 16, Endian.little);
view.setUint16(20, 1, Endian.little);
view.setUint16(22, numChannels, Endian.little);
view.setUint32(24, sampleRate, Endian.little);
view.setUint32(28, byteRate, Endian.little);
view.setUint16(32, blockAlign, Endian.little);
view.setUint16(34, bitsPerSample, Endian.little);
view.setString(36, 'data');
view.setUint32(40, _audioData.length, Endian.little);
_audioData = Uint8List.fromList(view.buffer.asUint8List() + _audioData);
final blob = web.Blob(<JSUint8Array>[_audioData.toJS].toJS,
web.BlobPropertyBag(type: 'audio/wav'));
cleanup();
return blob;
}