// Method to marshal from native to managed struct
        internal unsafe void __MarshalFrom(ref __Native @ref)
        {
            this.Size        = @ref.Size;
            this.Flags       = @ref.Flags;
            this.BufferBytes = @ref.BufferBytes;
            this.Reserved    = @ref.Reserved;
            this.Format      = WaveFormat.MarshalFrom(@ref.FormatPointer);
            this.EffectCount = @ref.EffectCount;
            if (EffectCount > 0)
            {
                var nativeDescriptions = new CaptureEffectDescription.__Native[EffectCount];
                Utilities.Read(@ref.EffectDescriptionPointer, nativeDescriptions, 0, EffectCount);

                EffectDescriptions = new CaptureEffectDescription[EffectCount];
                for (int i = 0; i < EffectCount; i++)
                {
                    EffectDescriptions[i] = new CaptureEffectDescription();
                    EffectDescriptions[i].__MarshalFrom(ref nativeDescriptions[i]);
                }
            }
        }
        // Method to marshal from managed struct tot native
        internal unsafe void __MarshalTo(ref __Native @ref)
        {
            @ref.Size          = this.Size;
            @ref.Flags         = this.Flags;
            @ref.BufferBytes   = this.BufferBytes;
            @ref.Reserved      = this.Reserved;
            @ref.FormatPointer = WaveFormat.MarshalToPtr(this.Format);

            int effectCount = EffectDescriptions == null ? 0 : EffectDescriptions.Length;

            @ref.EffectCount = effectCount;
            if (effectCount > 0)
            {
                var nativeDescriptions = new CaptureEffectDescription.__Native[effectCount];
                for (int i = 0; i < effectCount; i++)
                {
                    nativeDescriptions[i] = CaptureEffectDescription.__NewNative();
                    EffectDescriptions[i].__MarshalTo(ref nativeDescriptions[i]);
                }

                @ref.EffectDescriptionPointer = Marshal.AllocHGlobal(effectCount * Utilities.SizeOf <CaptureEffectDescription.__Native>());
                Utilities.Write(@ref.EffectDescriptionPointer, nativeDescriptions, 0, effectCount);
            }
        }
        // Method to marshal from native to managed struct
        internal unsafe void __MarshalFrom(ref __Native @ref)
        {
            this.Size = @ref.Size;
            this.Flags = @ref.Flags;
            this.BufferBytes = @ref.BufferBytes;
            this.Reserved = @ref.Reserved;
            this.Format = WaveFormat.MarshalFrom(@ref.FormatPointer);
            this.EffectCount = @ref.EffectCount;
            if (EffectCount > 0)
            {
                var nativeDescriptions = new CaptureEffectDescription.__Native[EffectCount];
                Utilities.Read(@ref.EffectDescriptionPointer, nativeDescriptions, 0, EffectCount);

                EffectDescriptions = new CaptureEffectDescription[EffectCount];
                for (int i = 0; i < EffectCount; i++)
                {
                    EffectDescriptions[i] = new CaptureEffectDescription();
                    EffectDescriptions[i].__MarshalFrom(ref nativeDescriptions[i]);
                }
            }
        }