/// <summary>
        ///     Copy data from sysex dumps
        /// </summary>
        /// <param name="common">Common sysex message</param>
        /// <param name="vfx">VFX sysex message</param>
        public void CopyFrom(SysExMessage common, SysExMessage vfx)
        {
            // Skipping 12 bytes from front because it's header and address offset
            // Skipping 2 bytes from end because it's checksum and sysex footer

            var commonBytes = common.GetBytes().Skip(12).ToArray();
            var vfxBytes    = vfx.GetBytes().Skip(12).ToArray();

            Common.CopyFrom(commonBytes.Take(commonBytes.Length - 2).ToArray());
            VocalEffect.CopyFrom(vfxBytes.Take(vfxBytes.Length - 2).ToArray());
        }
 /// <inheritdoc />
 public void CopyFrom(IPatch patch)
 {
     if (patch is CommonAndVocalEffectPatch p)
     {
         Common.CopyFrom(p.Common);
         VocalEffect.CopyFrom(p.VocalEffect);
     }
     else
     {
         throw new NotSupportedException("Copying from that type is not supported");
     }
 }
 /// <inheritdoc />
 public void Reset()
 {
     Common.Reset();
     VocalEffect.Reset();
 }