decodeChannels static method
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;
}
}