public static List<Properties> ReadSampleBlock(Stream source) { BinaryReader sourceReader = new BinaryReader(source); byte[] sourceData = sourceReader.ReadBytes(0x2000); int count = 256; List<Properties> result = new List<Properties>(); // load sample block using (MemoryStream tempMem = new MemoryStream(sourceData)) { BinaryReaderEx dataReader = new BinaryReaderEx(tempMem); for (int i = 0; i < count; i++) { Properties props = new Properties(); props.Channel = dataReader.ReadByte(); props.Flag01 = dataReader.ReadByte(); props.Frequency = dataReader.ReadUInt16S(); props.Volume = dataReader.ReadByte(); props.Panning = dataReader.ReadByte(); props.SampleOffset = dataReader.ReadInt24S() * 2; props.SampleLength = ((dataReader.ReadInt24S() * 2) - props.SampleOffset); props.Value0C = dataReader.ReadInt16S(); props.Flag0E = dataReader.ReadByte(); props.Flag0F = dataReader.ReadByte(); props.SizeInBlocks = dataReader.ReadInt16S(); result.Add(props); } } return result; }