//
// Copyright (c) Microsoft Corporation. All rights reserved.
// 
//
// File generated by WinMDIDL version 8.00.0009
//

import "inspectable.idl";
import "AsyncInfo.idl";
import "EventToken.idl";
import "Windows.Foundation.idl";
import "Windows.Media.idl";
import "Windows.Media.Capture.idl";
import "Windows.Media.Render.idl";
// Additional imports to ensure that all required headers are included
cpp_quote("#if defined(__cplusplus)")
cpp_quote("}")
cpp_quote("#endif // defined(__cplusplus)")
cpp_quote("#include <Windows.Foundation.h>")
cpp_quote("#if !defined(__windows2Emedia_h__)")
cpp_quote("#include <Windows.Media.h>")
cpp_quote("#endif // !defined(__windows2Emedia_h__)")
cpp_quote("#if !defined(__windows2Emedia2Ecapture_h__)")
cpp_quote("#include <Windows.Media.Capture.h>")
cpp_quote("#endif // !defined(__windows2Emedia2Ecapture_h__)")
cpp_quote("#if !defined(__windows2Emedia2Erender_h__)")
cpp_quote("#include <Windows.Media.Render.h>")
cpp_quote("#endif // !defined(__windows2Emedia2Erender_h__)")
cpp_quote("#if defined(__cplusplus)")
cpp_quote("extern \"C\" {")
cpp_quote("#endif // defined(__cplusplus)")

// Forward Declare
namespace Windows
{
    namespace Media
    {
        typedef enum AudioProcessing AudioProcessing;
    }
}
namespace Windows
{
    namespace Media
    {
        namespace Capture
        {
            typedef enum MediaCategory MediaCategory;
        }
    }
}
namespace Windows
{
    namespace Media
    {
        namespace Render
        {
            typedef enum AudioRenderCategory AudioRenderCategory;
        }
    }
}
namespace Windows
{
    namespace Media
    {
        namespace Effects
        {
            typedef enum AudioEffectType AudioEffectType;

            interface IAudioEffect;

            interface IAudioEffectsManagerStatics;

            interface IAudioRenderEffectsManager;

            interface IAudioCaptureEffectsManager;

            runtimeclass AudioEffect;

            runtimeclass AudioRenderEffectsManager;

            runtimeclass AudioCaptureEffectsManager;

            runtimeclass AudioEffectsManager;
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace Media
    {
        namespace Effects
        {
            declare
            {
                interface Windows.Foundation.Collections.IIterable<Windows.Media.Effects.AudioEffect*>;

                interface Windows.Foundation.Collections.IIterator<Windows.Media.Effects.AudioEffect*>;

                interface Windows.Foundation.Collections.IVectorView<Windows.Media.Effects.AudioEffect*>;

                interface Windows.Foundation.TypedEventHandler<Windows.Media.Effects.AudioCaptureEffectsManager*, IInspectable*>;

                interface Windows.Foundation.TypedEventHandler<Windows.Media.Effects.AudioRenderEffectsManager*, IInspectable*>;
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Media
    {
        namespace Effects
        {
            [version(0x06030000)]
            enum AudioEffectType
            {
                Other                    = 0,
                AcousticEchoCancellation = 1,
                NoiseSuppression         = 2,
                AutomaticGainControl     = 3,
                BeamForming              = 4,
                ConstantToneRemoval      = 5,
                Equalizer                = 6,
                LoudnessEqualizer        = 7,
                BassBoost                = 8,
                VirtualSurround          = 9,
                VirtualHeadphones        = 10,
                SpeakerFill              = 11,
                RoomCorrection           = 12,
                BassManagement           = 13,
                EnvironmentalEffects     = 14,
                SpeakerProtection        = 15,
                SpeakerCompensation      = 16,
                DynamicRangeCompression  = 17
            };

            [exclusiveto(Windows.Media.Effects.AudioEffect)]
            [uuid(34AAFA51-9207-4055-BE93-6E5734A86AE4)]
            [version(0x06030000)]
            interface IAudioEffect : IInspectable
            {
                [propget] HRESULT AudioEffectType([out] [retval] Windows.Media.Effects.AudioEffectType* value);
            }

            [exclusiveto(Windows.Media.Effects.AudioEffectsManager)]
            [uuid(66406C04-86FA-47CC-A315-F489D8C3FE10)]
            [version(0x06030000)]
            interface IAudioEffectsManagerStatics : IInspectable
            {
                [overload("CreateAudioRenderEffectsManager")] HRESULT CreateAudioRenderEffectsManager([in] HSTRING deviceId, [in] Windows.Media.Render.AudioRenderCategory category, [out] [retval] Windows.Media.Effects.AudioRenderEffectsManager** value);
                [overload("CreateAudioRenderEffectsManager")] HRESULT CreateAudioRenderEffectsManagerWithMode([in] HSTRING deviceId, [in] Windows.Media.Render.AudioRenderCategory category, [in] Windows.Media.AudioProcessing mode, [out] [retval] Windows.Media.Effects.AudioRenderEffectsManager** value);
                [overload("CreateAudioCaptureEffectsManager")] HRESULT CreateAudioCaptureEffectsManager([in] HSTRING deviceId, [in] Windows.Media.Capture.MediaCategory category, [out] [retval] Windows.Media.Effects.AudioCaptureEffectsManager** value);
                [overload("CreateAudioCaptureEffectsManager")] HRESULT CreateAudioCaptureEffectsManagerWithMode([in] HSTRING deviceId, [in] Windows.Media.Capture.MediaCategory category, [in] Windows.Media.AudioProcessing mode, [out] [retval] Windows.Media.Effects.AudioCaptureEffectsManager** value);
            }

            [exclusiveto(Windows.Media.Effects.AudioRenderEffectsManager)]
            [uuid(4DC98966-8751-42B2-BFCB-39CA7864BD47)]
            [version(0x06030000)]
            interface IAudioRenderEffectsManager : IInspectable
            {
                [eventadd] HRESULT AudioRenderEffectsChanged([in] Windows.Foundation.TypedEventHandler<Windows.Media.Effects.AudioRenderEffectsManager*, IInspectable*>* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT AudioRenderEffectsChanged([in] EventRegistrationToken token);
                HRESULT GetAudioRenderEffects([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Media.Effects.AudioEffect*>** effects);
            }

            [exclusiveto(Windows.Media.Effects.AudioCaptureEffectsManager)]
            [uuid(8F85C271-038D-4393-8298-540110608EEF)]
            [version(0x06030000)]
            interface IAudioCaptureEffectsManager : IInspectable
            {
                [eventadd] HRESULT AudioCaptureEffectsChanged([in] Windows.Foundation.TypedEventHandler<Windows.Media.Effects.AudioCaptureEffectsManager*, IInspectable*>* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT AudioCaptureEffectsChanged([in] EventRegistrationToken token);
                HRESULT GetAudioCaptureEffects([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Media.Effects.AudioEffect*>** effects);
            }

            [marshaling_behavior(agile)]
            [threading(mta)]
            [version(0x06030000)]
            runtimeclass AudioEffect
            {
                [default] interface Windows.Media.Effects.IAudioEffect;
            }

            [marshaling_behavior(agile)]
            [threading(mta)]
            [version(0x06030000)]
            runtimeclass AudioRenderEffectsManager
            {
                [default] interface Windows.Media.Effects.IAudioRenderEffectsManager;
            }

            [marshaling_behavior(agile)]
            [threading(mta)]
            [version(0x06030000)]
            runtimeclass AudioCaptureEffectsManager
            {
                [default] interface Windows.Media.Effects.IAudioCaptureEffectsManager;
            }

            [marshaling_behavior(agile)]
            [static(Windows.Media.Effects.IAudioEffectsManagerStatics, 0x06030000)]
            [threading(mta)]
            [version(0x06030000)]
            runtimeclass AudioEffectsManager
            {
            }
        }
    }
}
