public virtual void ParseWzoo() { var block = FindBlock("Wzoo"); if (block == null) { throw new Exception("Unable to find parameters block"); } WzooBlock = ParseMagicBlock(block); }
public MagicBlock ParseMagicBlock(WzooBlock block) { var magicBlock = new MagicBlock(); if (BlockMagic.Length != 4) { throw new Exception( $"the block magic was expected to be 4 bytes in length, found a length of {BlockMagic.Length}"); } magicBlock.BlockMagic = BlockMagic; using (var ms = new MemoryStream(block.BlockData)) { if (!ContainsMagicBlock(block)) { // Block without magic magicBlock.IsMagicBlock = false; ms.Seek(32, SeekOrigin.Begin); var blockDataLength = block.BlockData.Length - 32; magicBlock.BlockData = new byte[blockDataLength]; ms.Read(magicBlock.BlockData, 0, blockDataLength); } else { ms.Seek(36, SeekOrigin.Begin); var pluginNameLengthBuffer = new byte[4]; ms.Read(pluginNameLengthBuffer, 0, 4); var pluginNameLength = BigEndian.ToInt32(pluginNameLengthBuffer, 0); magicBlock.PluginName = new byte[pluginNameLength]; ms.Read(magicBlock.PluginName, 0, pluginNameLength); var blockDataLength = block.BlockData.Length - 4 - pluginNameLength - 36; magicBlock.BlockData = new byte[blockDataLength]; ms.Read(magicBlock.BlockData, 0, blockDataLength); } } return(magicBlock); }
public virtual void ParseMidi() { var block = FindBlock("midi"); if (block != null) { MidiBlock = ParseMagicBlock(block); } else { MidiBlock = new MagicBlock(); MidiBlock.BlockMagic = BlockMagic; MidiBlock.BlockData = new byte[0]; MidiBlock.PluginName = new byte[0]; MidiBlock.IsMagicBlock = false; } }