/*** Autogenerated by WIDL 9.0 from include/hrtfapoapi.idl - Do not edit ***/

#ifdef _WIN32
#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 475
#endif
#include <rpc.h>
#include <rpcndr.h>
#endif

#ifndef COM_NO_WINDOWS_H
#include <windows.h>
#include <ole2.h>
#endif

#ifndef __hrtfapoapi_h__
#define __hrtfapoapi_h__

#ifndef __WIDL_INLINE
#if defined(__cplusplus) || defined(_MSC_VER)
#define __WIDL_INLINE inline
#elif defined(__GNUC__)
#define __WIDL_INLINE __inline__
#endif
#endif

/* Forward declarations */

#ifndef __IXAPOHrtfParameters_FWD_DEFINED__
#define __IXAPOHrtfParameters_FWD_DEFINED__
typedef interface IXAPOHrtfParameters IXAPOHrtfParameters;
#ifdef __cplusplus
interface IXAPOHrtfParameters;
#endif /* __cplusplus */
#endif

/* Headers for imported files */

#include <xapo.h>

#ifdef __cplusplus
extern "C" {
#endif

#include <float.h>
#define HRTF_MAX_GAIN_LIMIT 12.0f
#define HRTF_MIN_GAIN_LIMIT -96.0f
#define HRTF_MIN_UNITY_GAIN_DISTANCE 0.05f
#define HRTF_DEFAULT_UNITY_GAIN_DISTANCE 1.0f
#define HRTF_DEFAULT_CUTOFF_DISTANCE FLT_MAX
typedef struct HrtfPosition {
    float x;
    float y;
    float z;
} HrtfPosition;
typedef struct HrtfOrientation {
    float element[9];
} HrtfOrientation;
typedef enum HrtfDirectivityType {
    OmniDirectional = 0,
    Cardioid = 1,
    Cone = 2
} HrtfDirectivityType;
typedef enum HrtfEnvironment {
    Small = 0,
    Medium = 1,
    Large = 2,
    Outdoors = 3
} HrtfEnvironment;
typedef struct HrtfDirectivity {
    HrtfDirectivityType type;
    float scaling;
} HrtfDirectivity;
typedef struct HrtfDirectivityCardioid {
    HrtfDirectivity directivity;
    float order;
} HrtfDirectivityCardioid;
typedef struct HrtfDirectivityCone {
    HrtfDirectivity directivity;
    float innerAngle;
    float outerAngle;
} HrtfDirectivityCone;
typedef enum HrtfDistanceDecayType {
    NaturalDecay = 0,
    CustomDecay = 1
} HrtfDistanceDecayType;
typedef struct HrtfDistanceDecay {
    HrtfDistanceDecayType type;
    float maxGain;
    float minGain;
    float unityGainDistance;
    float cutoffDistance;
} HrtfDistanceDecay;
typedef struct HrtfApoInit {
    HrtfDistanceDecay *distanceDecay;
    HrtfDirectivity *directivity;
} HrtfApoInit;
HRESULT __stdcall  CreateHrtfApo(const HrtfApoInit *init,IXAPO **xapo);

/*****************************************************************************
 * IXAPOHrtfParameters interface
 */
#ifndef __IXAPOHrtfParameters_INTERFACE_DEFINED__
#define __IXAPOHrtfParameters_INTERFACE_DEFINED__

DEFINE_GUID(IID_IXAPOHrtfParameters, 0x15b3cd66, 0xe9de, 0x4464, 0xb6,0xe6, 0x2b,0xc3,0xcf,0x63,0xd4,0x55);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("15b3cd66-e9de-4464-b6e6-2bc3cf63d455")
IXAPOHrtfParameters : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SetSourcePosition(
        const HrtfPosition *position) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetSourceOrientation(
        const HrtfOrientation *orientation) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetSourceGain(
        float gain) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetEnvironment(
        HrtfEnvironment environment) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IXAPOHrtfParameters, 0x15b3cd66, 0xe9de, 0x4464, 0xb6,0xe6, 0x2b,0xc3,0xcf,0x63,0xd4,0x55)
#endif
#else
typedef struct IXAPOHrtfParametersVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IXAPOHrtfParameters *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IXAPOHrtfParameters *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IXAPOHrtfParameters *This);

    /*** IXAPOHrtfParameters methods ***/
    HRESULT (STDMETHODCALLTYPE *SetSourcePosition)(
        IXAPOHrtfParameters *This,
        const HrtfPosition *position);

    HRESULT (STDMETHODCALLTYPE *SetSourceOrientation)(
        IXAPOHrtfParameters *This,
        const HrtfOrientation *orientation);

    HRESULT (STDMETHODCALLTYPE *SetSourceGain)(
        IXAPOHrtfParameters *This,
        float gain);

    HRESULT (STDMETHODCALLTYPE *SetEnvironment)(
        IXAPOHrtfParameters *This,
        HrtfEnvironment environment);

    END_INTERFACE
} IXAPOHrtfParametersVtbl;

interface IXAPOHrtfParameters {
    CONST_VTBL IXAPOHrtfParametersVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IXAPOHrtfParameters_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IXAPOHrtfParameters_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IXAPOHrtfParameters_Release(This) (This)->lpVtbl->Release(This)
/*** IXAPOHrtfParameters methods ***/
#define IXAPOHrtfParameters_SetSourcePosition(This,position) (This)->lpVtbl->SetSourcePosition(This,position)
#define IXAPOHrtfParameters_SetSourceOrientation(This,orientation) (This)->lpVtbl->SetSourceOrientation(This,orientation)
#define IXAPOHrtfParameters_SetSourceGain(This,gain) (This)->lpVtbl->SetSourceGain(This,gain)
#define IXAPOHrtfParameters_SetEnvironment(This,environment) (This)->lpVtbl->SetEnvironment(This,environment)
#else
/*** IUnknown methods ***/
static __WIDL_INLINE HRESULT IXAPOHrtfParameters_QueryInterface(IXAPOHrtfParameters* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static __WIDL_INLINE ULONG IXAPOHrtfParameters_AddRef(IXAPOHrtfParameters* This) {
    return This->lpVtbl->AddRef(This);
}
static __WIDL_INLINE ULONG IXAPOHrtfParameters_Release(IXAPOHrtfParameters* This) {
    return This->lpVtbl->Release(This);
}
/*** IXAPOHrtfParameters methods ***/
static __WIDL_INLINE HRESULT IXAPOHrtfParameters_SetSourcePosition(IXAPOHrtfParameters* This,const HrtfPosition *position) {
    return This->lpVtbl->SetSourcePosition(This,position);
}
static __WIDL_INLINE HRESULT IXAPOHrtfParameters_SetSourceOrientation(IXAPOHrtfParameters* This,const HrtfOrientation *orientation) {
    return This->lpVtbl->SetSourceOrientation(This,orientation);
}
static __WIDL_INLINE HRESULT IXAPOHrtfParameters_SetSourceGain(IXAPOHrtfParameters* This,float gain) {
    return This->lpVtbl->SetSourceGain(This,gain);
}
static __WIDL_INLINE HRESULT IXAPOHrtfParameters_SetEnvironment(IXAPOHrtfParameters* This,HrtfEnvironment environment) {
    return This->lpVtbl->SetEnvironment(This,environment);
}
#endif
#endif

#endif


#endif  /* __IXAPOHrtfParameters_INTERFACE_DEFINED__ */

/* Begin additional prototypes for all interfaces */


/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __hrtfapoapi_h__ */
