/// <inheritdoc />
        public override byte[] GetBytes()
        {
            var bytes = new List <byte>();

            bytes.AddRange(ByteUtils.NumberTo4MidiPackets(Threshold));
            bytes.AddRange(ByteUtils.NumberTo4MidiPackets((byte)Ratio));
            bytes.AddRange(ByteUtils.NumberTo4MidiPackets((byte)Attack));
            bytes.AddRange(ByteUtils.NumberTo4MidiPackets((byte)Release));
            bytes.AddRange(ByteUtils.NumberTo4MidiPackets(Level));
            bytes.AddRange(ByteUtils.BooleanTo4MidiPackets(Sidechain));
            bytes.AddRange(ByteUtils.NumberTo4MidiPackets(SidechainLevel));
            bytes.AddRange(ByteUtils.NumberTo4MidiPackets((byte)SidechainNote));
            bytes.AddRange(ByteUtils.NumberTo4MidiPackets(SidechainTime));
            bytes.AddRange(ByteUtils.NumberTo4MidiPackets(SidechainRelease));
            bytes.AddRange(ByteUtils.BooleanTo4MidiPackets(SidechainSync));
            bytes.AddRange(ByteUtils.Repeat4MidiPacketsReserve(21));

            return(bytes.ToArray());
        }