save method

void save()

Implementation

void save() {
  var totalData = _audioFile._rawData;
  var isLast = false;
  int index = 4;
  while (!isLast) {
    var metaBlockHeader = totalData.sublist(index, index + 1);
    index += 1;
    var header = metaBlockHeader[0];
    isLast = ((header & 0x80) >> 7) == 1;
    var sizes = totalData.sublist(index, index + 3);
    index += 3;
    var dataLength = (sizes[0] << 16) + (sizes[1] << 8) + sizes[2];
    index += dataLength;
  }
  totalData = totalData.sublist(index);
  _vorbisCommentBlock?.save();
  _pictureBlock?.save();
  List<int> flacMetaBlocksData = [];
  for (var flacMetaBlock in _flacMetaBlocks) {
    var header = List<int>.filled(4, 0);
    if (identical(flacMetaBlock, _flacMetaBlocks.last)) {
      header[0] |= 0x80;
    }
    header[0] |= flacMetaBlock.type;
    var length = flacMetaBlock.data.length;
    header[3] = length % 0x100;
    length >>= 8;
    header[2] = length % 0x100;
    length >>= 8;
    header[1] = length;
    flacMetaBlocksData += header + flacMetaBlock.data;
  }
  totalData = 'fLaC'.codeUnits + flacMetaBlocksData + totalData;
  _audioFile._rawData = totalData;
}