/// <inheritdoc />
        public override void CopyFrom(byte[] data)
        {
            if (data.Length != DumpLength)
            {
                throw new InvalidDumpSizeException(DumpLength, data.Length);
            }

            Threshold        = ByteUtils.NumberFrom4MidiPackets(data.Take(4).ToArray());
            Ratio            = (Ratio)ByteUtils.NumberFrom4MidiPackets(data.Skip(4).Take(4).ToArray());
            Attack           = (Attack)ByteUtils.NumberFrom4MidiPackets(data.Skip(8).Take(4).ToArray());
            Release          = (Release)ByteUtils.NumberFrom4MidiPackets(data.Skip(12).Take(4).ToArray());
            Level            = ByteUtils.NumberFrom4MidiPackets(data.Skip(16).Take(4).ToArray());
            Sidechain        = ByteUtils.BooleanFrom4MidiPackets(data.Skip(20).Take(4).ToArray());
            SidechainLevel   = ByteUtils.NumberFrom4MidiPackets(data.Skip(24).Take(4).ToArray());
            SidechainNote    = (NotePitch)ByteUtils.NumberFrom4MidiPackets(data.Skip(28).Take(4).ToArray());
            SidechainTime    = ByteUtils.NumberFrom4MidiPackets(data.Skip(32).Take(4).ToArray());
            SidechainRelease = ByteUtils.NumberFrom4MidiPackets(data.Skip(36).Take(4).ToArray());
            SidechainSync    = ByteUtils.BooleanFrom4MidiPackets(data.Skip(40).Take(4).ToArray());
        }