decodeChannels static method

List<Object?> decodeChannels(
  1. Uint8List frame,
  2. int channelCount
)

Reads the channel values back out.

Implementation

static List<Object?> decodeChannels(Uint8List frame, int channelCount) {
  final dataType = dataTypeOf(frame);
  final view = ByteData.view(
    frame.buffer,
    frame.offsetInBytes + headerBytes,
    frame.lengthInBytes - headerBytes,
  );
  switch (dataType) {
    case StreamDataType.float32:
      return [
        for (var i = 0; i < channelCount; i++)
          view.getFloat32(i * 4, Endian.little),
      ];
    case StreamDataType.double64:
      return [
        for (var i = 0; i < channelCount; i++)
          view.getFloat64(i * 8, Endian.little),
      ];
    case StreamDataType.int8:
      return [for (var i = 0; i < channelCount; i++) view.getInt8(i)];
    case StreamDataType.int16:
      return [
        for (var i = 0; i < channelCount; i++)
          view.getInt16(i * 2, Endian.little),
      ];
    case StreamDataType.int32:
      return [
        for (var i = 0; i < channelCount; i++)
          view.getInt32(i * 4, Endian.little),
      ];
    case StreamDataType.int64:
      return [
        for (var i = 0; i < channelCount; i++)
          view.getInt64(i * 8, Endian.little),
      ];
    case StreamDataType.string:
      final values = <String>[];
      var offset = 0;
      for (var i = 0; i < channelCount; i++) {
        final length = view.getUint32(offset, Endian.little);
        offset += 4;
        final bytes = Uint8List.view(
          view.buffer,
          view.offsetInBytes + offset,
          length,
        );
        values.add(utf8.decode(bytes));
        offset += length;
      }
      return values;
  }
}