finish method

  1. @override
Blob finish()
override

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;
}