finish method
Implementation
@override
web.Blob finish() {
const headerSize = 44;
const bitsPerSample = 16;
const bytesPerSample = bitsPerSample ~/ 8;
final byteRate = sampleRate * numChannels * bytesPerSample;
final blockAlign = numChannels * bytesPerSample;
final view = ByteData(headerSize);
// RIFF chunk
view.setString(0, 'RIFF');
view.setUint32(4, headerSize + _audioDataLength - 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, _audioDataLength, Endian.little);
final blob = web.Blob(
<JSUint8Array>[
view.buffer.asUint8List().toJS,
..._chunks.map((c) => c.toJS),
].toJS,
web.BlobPropertyBag(type: 'audio/wav'),
);
cleanup();
return blob;
}