diff --git a/mingw-w64-headers/include/audioclient.h b/mingw-w64-headers/include/audioclient.h
index 2f4dfed..2fe3017 100644
--- a/mingw-w64-headers/include/audioclient.h
+++ b/mingw-w64-headers/include/audioclient.h
@@ -1,4 +1,4 @@
-/*** Autogenerated by WIDL 6.0-rc1 from include/audioclient.idl - Do not edit ***/
+/*** Autogenerated by WIDL 5.19 from audioclient.idl - Do not edit ***/
 
 #ifdef _WIN32
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
@@ -34,6 +34,14 @@
 #endif /* __cplusplus */
 #endif
 
+#ifndef __IAudioClient3_FWD_DEFINED__
+#define __IAudioClient3_FWD_DEFINED__
+typedef interface IAudioClient3 IAudioClient3;
+#ifdef __cplusplus
+interface IAudioClient3;
+#endif /* __cplusplus */
+#endif
+
 #ifndef __IAudioRenderClient_FWD_DEFINED__
 #define __IAudioRenderClient_FWD_DEFINED__
 typedef interface IAudioRenderClient IAudioRenderClient;
@@ -90,6 +98,14 @@
 #endif /* __cplusplus */
 #endif
 
+#ifndef __IAudioAmbisonicsControl_FWD_DEFINED__
+#define __IAudioAmbisonicsControl_FWD_DEFINED__
+typedef interface IAudioAmbisonicsControl IAudioAmbisonicsControl;
+#ifdef __cplusplus
+interface IAudioAmbisonicsControl;
+#endif /* __cplusplus */
+#endif
+
 #ifndef __IChannelAudioVolume_FWD_DEFINED__
 #define __IChannelAudioVolume_FWD_DEFINED__
 typedef interface IChannelAudioVolume IChannelAudioVolume;
@@ -144,6 +160,17 @@
     AUDCLNT_STREAMOPTIONS_MATCH_FORMAT = 0x2,
     AUDCLNT_STREAMOPTIONS_AMBISONICS = 0x4
 } AUDCLNT_STREAMOPTIONS;
+DEFINE_ENUM_FLAG_OPERATORS(AUDCLNT_STREAMOPTIONS);
+typedef enum AMBISONICS_TYPE {
+    AMBISONICS_TYPE_FULL3D = 0x0
+} AMBISONICS_TYPE;
+typedef enum AMBISONICS_CHANNEL_ORDERING {
+    AMBISONICS_CHANNEL_ORDERING_ACN = 0x0
+} AMBISONICS_CHANNEL_ORDERING;
+typedef enum AMBISONICS_NORMALIZATION {
+    AMBISONICS_NORMALIZATION_SN3D = 0x0,
+    AMBISONICS_NORMALIZATION_N3D = 0x1
+} AMBISONICS_NORMALIZATION;
 
 typedef struct AudioClientProperties {
     UINT32 cbSize;
@@ -151,6 +178,19 @@
     AUDIO_STREAM_CATEGORY eCategory;
     AUDCLNT_STREAMOPTIONS Options;
 } AudioClientProperties;
+typedef struct AudioClient3ActivationParams {
+    GUID tracingContextId;
+} AudioClient3ActivationParams;
+typedef struct AMBISONICS_PARAMS {
+    UINT32 u32Size;
+    UINT32 u32Version;
+    AMBISONICS_TYPE u32Type;
+    AMBISONICS_CHANNEL_ORDERING u32ChannelOrdering;
+    AMBISONICS_NORMALIZATION u32Normalization;
+    UINT32 u32Order;
+    UINT32 u32NumChannels;
+    UINT32 *pu32ChannelMap;
+} AMBISONICS_PARAMS;
 
 /*****************************************************************************
  * IAudioClient interface
@@ -578,6 +618,257 @@
 
 #endif  /* __IAudioClient2_INTERFACE_DEFINED__ */
 
+/*****************************************************************************
+ * IAudioClient3 interface
+ */
+#ifndef __IAudioClient3_INTERFACE_DEFINED__
+#define __IAudioClient3_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IAudioClient3, 0x7ed4ee07, 0x8e67, 0x4cd4, 0x8c,0x1a, 0x2b,0x7a,0x59,0x87,0xad,0x42);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("7ed4ee07-8e67-4cd4-8c1a-2b7a5987ad42")
+IAudioClient3 : public IAudioClient2
+{
+    virtual HRESULT STDMETHODCALLTYPE GetSharedModeEnginePeriod(
+        const WAVEFORMATEX *pFormat,
+        UINT32 *pDefaultPeriodInFrames,
+        UINT32 *pFundamentalPeriodInFrames,
+        UINT32 *pMinPeriodInFrames,
+        UINT32 *pMaxPeriodInFrames) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetCurrentSharedModeEnginePeriod(
+        WAVEFORMATEX **ppFormat,
+        UINT32 *pCurrentPeriodInFrames) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE InitializeSharedAudioStream(
+        DWORD StreamFlags,
+        UINT32 PeriodInFrames,
+        const WAVEFORMATEX *pFormat,
+        LPCGUID AudioSessionGuid) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IAudioClient3, 0x7ed4ee07, 0x8e67, 0x4cd4, 0x8c,0x1a, 0x2b,0x7a,0x59,0x87,0xad,0x42)
+#endif
+#else
+typedef struct IAudioClient3Vtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IAudioClient3 *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IAudioClient3 *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IAudioClient3 *This);
+
+    /*** IAudioClient methods ***/
+    HRESULT (STDMETHODCALLTYPE *Initialize)(
+        IAudioClient3 *This,
+        AUDCLNT_SHAREMODE ShareMode,
+        DWORD StreamFlags,
+        REFERENCE_TIME hnsBufferDuration,
+        REFERENCE_TIME hnsPeriodicity,
+        const WAVEFORMATEX *pFormat,
+        LPCGUID AudioSessionGuid);
+
+    HRESULT (STDMETHODCALLTYPE *GetBufferSize)(
+        IAudioClient3 *This,
+        UINT32 *pNumBufferFrames);
+
+    HRESULT (STDMETHODCALLTYPE *GetStreamLatency)(
+        IAudioClient3 *This,
+        REFERENCE_TIME *phnsLatency);
+
+    HRESULT (STDMETHODCALLTYPE *GetCurrentPadding)(
+        IAudioClient3 *This,
+        UINT32 *pNumPaddingFrames);
+
+    HRESULT (STDMETHODCALLTYPE *IsFormatSupported)(
+        IAudioClient3 *This,
+        AUDCLNT_SHAREMODE ShareMode,
+        const WAVEFORMATEX *pFormat,
+        WAVEFORMATEX **ppClosestMatch);
+
+    HRESULT (STDMETHODCALLTYPE *GetMixFormat)(
+        IAudioClient3 *This,
+        WAVEFORMATEX **ppDeviceFormat);
+
+    HRESULT (STDMETHODCALLTYPE *GetDevicePeriod)(
+        IAudioClient3 *This,
+        REFERENCE_TIME *phnsDefaultDevicePeriod,
+        REFERENCE_TIME *phnsMinimumDevicePeriod);
+
+    HRESULT (STDMETHODCALLTYPE *Start)(
+        IAudioClient3 *This);
+
+    HRESULT (STDMETHODCALLTYPE *Stop)(
+        IAudioClient3 *This);
+
+    HRESULT (STDMETHODCALLTYPE *Reset)(
+        IAudioClient3 *This);
+
+    HRESULT (STDMETHODCALLTYPE *SetEventHandle)(
+        IAudioClient3 *This,
+        HANDLE eventHandle);
+
+    HRESULT (STDMETHODCALLTYPE *GetService)(
+        IAudioClient3 *This,
+        REFIID riid,
+        void **ppv);
+
+    /*** IAudioClient2 methods ***/
+    HRESULT (STDMETHODCALLTYPE *IsOffloadCapable)(
+        IAudioClient3 *This,
+        AUDIO_STREAM_CATEGORY Category,
+        WINBOOL *pbOffloadCapable);
+
+    HRESULT (STDMETHODCALLTYPE *SetClientProperties)(
+        IAudioClient3 *This,
+        const AudioClientProperties *pProperties);
+
+    HRESULT (STDMETHODCALLTYPE *GetBufferSizeLimits)(
+        IAudioClient3 *This,
+        const WAVEFORMATEX *pFormat,
+        WINBOOL bEventDriven,
+        REFERENCE_TIME *phnsMinBufferDuration,
+        REFERENCE_TIME *phnsMaxBufferDuration);
+
+    /*** IAudioClient3 methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetSharedModeEnginePeriod)(
+        IAudioClient3 *This,
+        const WAVEFORMATEX *pFormat,
+        UINT32 *pDefaultPeriodInFrames,
+        UINT32 *pFundamentalPeriodInFrames,
+        UINT32 *pMinPeriodInFrames,
+        UINT32 *pMaxPeriodInFrames);
+
+    HRESULT (STDMETHODCALLTYPE *GetCurrentSharedModeEnginePeriod)(
+        IAudioClient3 *This,
+        WAVEFORMATEX **ppFormat,
+        UINT32 *pCurrentPeriodInFrames);
+
+    HRESULT (STDMETHODCALLTYPE *InitializeSharedAudioStream)(
+        IAudioClient3 *This,
+        DWORD StreamFlags,
+        UINT32 PeriodInFrames,
+        const WAVEFORMATEX *pFormat,
+        LPCGUID AudioSessionGuid);
+
+    END_INTERFACE
+} IAudioClient3Vtbl;
+
+interface IAudioClient3 {
+    CONST_VTBL IAudioClient3Vtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IAudioClient3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IAudioClient3_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IAudioClient3_Release(This) (This)->lpVtbl->Release(This)
+/*** IAudioClient methods ***/
+#define IAudioClient3_Initialize(This,ShareMode,StreamFlags,hnsBufferDuration,hnsPeriodicity,pFormat,AudioSessionGuid) (This)->lpVtbl->Initialize(This,ShareMode,StreamFlags,hnsBufferDuration,hnsPeriodicity,pFormat,AudioSessionGuid)
+#define IAudioClient3_GetBufferSize(This,pNumBufferFrames) (This)->lpVtbl->GetBufferSize(This,pNumBufferFrames)
+#define IAudioClient3_GetStreamLatency(This,phnsLatency) (This)->lpVtbl->GetStreamLatency(This,phnsLatency)
+#define IAudioClient3_GetCurrentPadding(This,pNumPaddingFrames) (This)->lpVtbl->GetCurrentPadding(This,pNumPaddingFrames)
+#define IAudioClient3_IsFormatSupported(This,ShareMode,pFormat,ppClosestMatch) (This)->lpVtbl->IsFormatSupported(This,ShareMode,pFormat,ppClosestMatch)
+#define IAudioClient3_GetMixFormat(This,ppDeviceFormat) (This)->lpVtbl->GetMixFormat(This,ppDeviceFormat)
+#define IAudioClient3_GetDevicePeriod(This,phnsDefaultDevicePeriod,phnsMinimumDevicePeriod) (This)->lpVtbl->GetDevicePeriod(This,phnsDefaultDevicePeriod,phnsMinimumDevicePeriod)
+#define IAudioClient3_Start(This) (This)->lpVtbl->Start(This)
+#define IAudioClient3_Stop(This) (This)->lpVtbl->Stop(This)
+#define IAudioClient3_Reset(This) (This)->lpVtbl->Reset(This)
+#define IAudioClient3_SetEventHandle(This,eventHandle) (This)->lpVtbl->SetEventHandle(This,eventHandle)
+#define IAudioClient3_GetService(This,riid,ppv) (This)->lpVtbl->GetService(This,riid,ppv)
+/*** IAudioClient2 methods ***/
+#define IAudioClient3_IsOffloadCapable(This,Category,pbOffloadCapable) (This)->lpVtbl->IsOffloadCapable(This,Category,pbOffloadCapable)
+#define IAudioClient3_SetClientProperties(This,pProperties) (This)->lpVtbl->SetClientProperties(This,pProperties)
+#define IAudioClient3_GetBufferSizeLimits(This,pFormat,bEventDriven,phnsMinBufferDuration,phnsMaxBufferDuration) (This)->lpVtbl->GetBufferSizeLimits(This,pFormat,bEventDriven,phnsMinBufferDuration,phnsMaxBufferDuration)
+/*** IAudioClient3 methods ***/
+#define IAudioClient3_GetSharedModeEnginePeriod(This,pFormat,pDefaultPeriodInFrames,pFundamentalPeriodInFrames,pMinPeriodInFrames,pMaxPeriodInFrames) (This)->lpVtbl->GetSharedModeEnginePeriod(This,pFormat,pDefaultPeriodInFrames,pFundamentalPeriodInFrames,pMinPeriodInFrames,pMaxPeriodInFrames)
+#define IAudioClient3_GetCurrentSharedModeEnginePeriod(This,ppFormat,pCurrentPeriodInFrames) (This)->lpVtbl->GetCurrentSharedModeEnginePeriod(This,ppFormat,pCurrentPeriodInFrames)
+#define IAudioClient3_InitializeSharedAudioStream(This,StreamFlags,PeriodInFrames,pFormat,AudioSessionGuid) (This)->lpVtbl->InitializeSharedAudioStream(This,StreamFlags,PeriodInFrames,pFormat,AudioSessionGuid)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IAudioClient3_QueryInterface(IAudioClient3* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IAudioClient3_AddRef(IAudioClient3* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IAudioClient3_Release(IAudioClient3* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IAudioClient methods ***/
+static FORCEINLINE HRESULT IAudioClient3_Initialize(IAudioClient3* This,AUDCLNT_SHAREMODE ShareMode,DWORD StreamFlags,REFERENCE_TIME hnsBufferDuration,REFERENCE_TIME hnsPeriodicity,const WAVEFORMATEX *pFormat,LPCGUID AudioSessionGuid) {
+    return This->lpVtbl->Initialize(This,ShareMode,StreamFlags,hnsBufferDuration,hnsPeriodicity,pFormat,AudioSessionGuid);
+}
+static FORCEINLINE HRESULT IAudioClient3_GetBufferSize(IAudioClient3* This,UINT32 *pNumBufferFrames) {
+    return This->lpVtbl->GetBufferSize(This,pNumBufferFrames);
+}
+static FORCEINLINE HRESULT IAudioClient3_GetStreamLatency(IAudioClient3* This,REFERENCE_TIME *phnsLatency) {
+    return This->lpVtbl->GetStreamLatency(This,phnsLatency);
+}
+static FORCEINLINE HRESULT IAudioClient3_GetCurrentPadding(IAudioClient3* This,UINT32 *pNumPaddingFrames) {
+    return This->lpVtbl->GetCurrentPadding(This,pNumPaddingFrames);
+}
+static FORCEINLINE HRESULT IAudioClient3_IsFormatSupported(IAudioClient3* This,AUDCLNT_SHAREMODE ShareMode,const WAVEFORMATEX *pFormat,WAVEFORMATEX **ppClosestMatch) {
+    return This->lpVtbl->IsFormatSupported(This,ShareMode,pFormat,ppClosestMatch);
+}
+static FORCEINLINE HRESULT IAudioClient3_GetMixFormat(IAudioClient3* This,WAVEFORMATEX **ppDeviceFormat) {
+    return This->lpVtbl->GetMixFormat(This,ppDeviceFormat);
+}
+static FORCEINLINE HRESULT IAudioClient3_GetDevicePeriod(IAudioClient3* This,REFERENCE_TIME *phnsDefaultDevicePeriod,REFERENCE_TIME *phnsMinimumDevicePeriod) {
+    return This->lpVtbl->GetDevicePeriod(This,phnsDefaultDevicePeriod,phnsMinimumDevicePeriod);
+}
+static FORCEINLINE HRESULT IAudioClient3_Start(IAudioClient3* This) {
+    return This->lpVtbl->Start(This);
+}
+static FORCEINLINE HRESULT IAudioClient3_Stop(IAudioClient3* This) {
+    return This->lpVtbl->Stop(This);
+}
+static FORCEINLINE HRESULT IAudioClient3_Reset(IAudioClient3* This) {
+    return This->lpVtbl->Reset(This);
+}
+static FORCEINLINE HRESULT IAudioClient3_SetEventHandle(IAudioClient3* This,HANDLE eventHandle) {
+    return This->lpVtbl->SetEventHandle(This,eventHandle);
+}
+static FORCEINLINE HRESULT IAudioClient3_GetService(IAudioClient3* This,REFIID riid,void **ppv) {
+    return This->lpVtbl->GetService(This,riid,ppv);
+}
+/*** IAudioClient2 methods ***/
+static FORCEINLINE HRESULT IAudioClient3_IsOffloadCapable(IAudioClient3* This,AUDIO_STREAM_CATEGORY Category,WINBOOL *pbOffloadCapable) {
+    return This->lpVtbl->IsOffloadCapable(This,Category,pbOffloadCapable);
+}
+static FORCEINLINE HRESULT IAudioClient3_SetClientProperties(IAudioClient3* This,const AudioClientProperties *pProperties) {
+    return This->lpVtbl->SetClientProperties(This,pProperties);
+}
+static FORCEINLINE HRESULT IAudioClient3_GetBufferSizeLimits(IAudioClient3* This,const WAVEFORMATEX *pFormat,WINBOOL bEventDriven,REFERENCE_TIME *phnsMinBufferDuration,REFERENCE_TIME *phnsMaxBufferDuration) {
+    return This->lpVtbl->GetBufferSizeLimits(This,pFormat,bEventDriven,phnsMinBufferDuration,phnsMaxBufferDuration);
+}
+/*** IAudioClient3 methods ***/
+static FORCEINLINE HRESULT IAudioClient3_GetSharedModeEnginePeriod(IAudioClient3* This,const WAVEFORMATEX *pFormat,UINT32 *pDefaultPeriodInFrames,UINT32 *pFundamentalPeriodInFrames,UINT32 *pMinPeriodInFrames,UINT32 *pMaxPeriodInFrames) {
+    return This->lpVtbl->GetSharedModeEnginePeriod(This,pFormat,pDefaultPeriodInFrames,pFundamentalPeriodInFrames,pMinPeriodInFrames,pMaxPeriodInFrames);
+}
+static FORCEINLINE HRESULT IAudioClient3_GetCurrentSharedModeEnginePeriod(IAudioClient3* This,WAVEFORMATEX **ppFormat,UINT32 *pCurrentPeriodInFrames) {
+    return This->lpVtbl->GetCurrentSharedModeEnginePeriod(This,ppFormat,pCurrentPeriodInFrames);
+}
+static FORCEINLINE HRESULT IAudioClient3_InitializeSharedAudioStream(IAudioClient3* This,DWORD StreamFlags,UINT32 PeriodInFrames,const WAVEFORMATEX *pFormat,LPCGUID AudioSessionGuid) {
+    return This->lpVtbl->InitializeSharedAudioStream(This,StreamFlags,PeriodInFrames,pFormat,AudioSessionGuid);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IAudioClient3_INTERFACE_DEFINED__ */
+
 
 /*****************************************************************************
  * IAudioRenderClient interface
@@ -1292,6 +1583,124 @@
 
 #endif  /* __IAudioStreamVolume_INTERFACE_DEFINED__ */
 
+/*****************************************************************************
+ * IAudioAmbisonicsControl interface
+ */
+#ifndef __IAudioAmbisonicsControl_INTERFACE_DEFINED__
+#define __IAudioAmbisonicsControl_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IAudioAmbisonicsControl, 0x28724c91, 0xdf35, 0x4856, 0x9f,0x76, 0xd6,0xa2,0x64,0x13,0xf3,0xdf);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("28724c91-df35-4856-9f76-d6a26413f3df")
+IAudioAmbisonicsControl : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE SetData(
+        const AMBISONICS_PARAMS *pAmbisonicsParams,
+        UINT32 cbAmbisonicsParams) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetHeadTracking(
+        WINBOOL bEnableHeadTracking) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetHeadTracking(
+        WINBOOL *pbEnableHeadTracking) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetRotation(
+        float X,
+        float Y,
+        float Z,
+        float W) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IAudioAmbisonicsControl, 0x28724c91, 0xdf35, 0x4856, 0x9f,0x76, 0xd6,0xa2,0x64,0x13,0xf3,0xdf)
+#endif
+#else
+typedef struct IAudioAmbisonicsControlVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        IAudioAmbisonicsControl *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        IAudioAmbisonicsControl *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        IAudioAmbisonicsControl *This);
+
+    /*** IAudioAmbisonicsControl methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetData)(
+        IAudioAmbisonicsControl *This,
+        const AMBISONICS_PARAMS *pAmbisonicsParams,
+        UINT32 cbAmbisonicsParams);
+
+    HRESULT (STDMETHODCALLTYPE *SetHeadTracking)(
+        IAudioAmbisonicsControl *This,
+        WINBOOL bEnableHeadTracking);
+
+    HRESULT (STDMETHODCALLTYPE *GetHeadTracking)(
+        IAudioAmbisonicsControl *This,
+        WINBOOL *pbEnableHeadTracking);
+
+    HRESULT (STDMETHODCALLTYPE *SetRotation)(
+        IAudioAmbisonicsControl *This,
+        float X,
+        float Y,
+        float Z,
+        float W);
+
+    END_INTERFACE
+} IAudioAmbisonicsControlVtbl;
+
+interface IAudioAmbisonicsControl {
+    CONST_VTBL IAudioAmbisonicsControlVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define IAudioAmbisonicsControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define IAudioAmbisonicsControl_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define IAudioAmbisonicsControl_Release(This) (This)->lpVtbl->Release(This)
+/*** IAudioAmbisonicsControl methods ***/
+#define IAudioAmbisonicsControl_SetData(This,pAmbisonicsParams,cbAmbisonicsParams) (This)->lpVtbl->SetData(This,pAmbisonicsParams,cbAmbisonicsParams)
+#define IAudioAmbisonicsControl_SetHeadTracking(This,bEnableHeadTracking) (This)->lpVtbl->SetHeadTracking(This,bEnableHeadTracking)
+#define IAudioAmbisonicsControl_GetHeadTracking(This,pbEnableHeadTracking) (This)->lpVtbl->GetHeadTracking(This,pbEnableHeadTracking)
+#define IAudioAmbisonicsControl_SetRotation(This,X,Y,Z,W) (This)->lpVtbl->SetRotation(This,X,Y,Z,W)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT IAudioAmbisonicsControl_QueryInterface(IAudioAmbisonicsControl* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG IAudioAmbisonicsControl_AddRef(IAudioAmbisonicsControl* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG IAudioAmbisonicsControl_Release(IAudioAmbisonicsControl* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** IAudioAmbisonicsControl methods ***/
+static FORCEINLINE HRESULT IAudioAmbisonicsControl_SetData(IAudioAmbisonicsControl* This,const AMBISONICS_PARAMS *pAmbisonicsParams,UINT32 cbAmbisonicsParams) {
+    return This->lpVtbl->SetData(This,pAmbisonicsParams,cbAmbisonicsParams);
+}
+static FORCEINLINE HRESULT IAudioAmbisonicsControl_SetHeadTracking(IAudioAmbisonicsControl* This,WINBOOL bEnableHeadTracking) {
+    return This->lpVtbl->SetHeadTracking(This,bEnableHeadTracking);
+}
+static FORCEINLINE HRESULT IAudioAmbisonicsControl_GetHeadTracking(IAudioAmbisonicsControl* This,WINBOOL *pbEnableHeadTracking) {
+    return This->lpVtbl->GetHeadTracking(This,pbEnableHeadTracking);
+}
+static FORCEINLINE HRESULT IAudioAmbisonicsControl_SetRotation(IAudioAmbisonicsControl* This,float X,float Y,float Z,float W) {
+    return This->lpVtbl->SetRotation(This,X,Y,Z,W);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __IAudioAmbisonicsControl_INTERFACE_DEFINED__ */
+
 
 /*****************************************************************************
  * IChannelAudioVolume interface
@@ -1463,6 +1872,11 @@
 #define AUDCLNT_E_OFFLOAD_MODE_ONLY AUDCLNT_ERR(0x24)
 #define AUDCLNT_E_NONOFFLOAD_MODE_ONLY AUDCLNT_ERR(0x25)
 #define AUDCLNT_E_RESOURCES_INVALIDATED AUDCLNT_ERR(0x26)
+#define AUDCLNT_E_RAW_MODE_UNSUPPORTED AUDCLNT_ERR(0x027)
+#define AUDCLNT_E_ENGINE_PERIODICITY_LOCKED AUDCLNT_ERR(0x028)
+#define AUDCLNT_E_ENGINE_FORMAT_LOCKED AUDCLNT_ERR(0x029)
+#define AUDCLNT_E_HEADTRACKING_ENABLED AUDCLNT_ERR(0x030)
+#define AUDCLNT_E_HEADTRACKING_UNSUPPORTED AUDCLNT_ERR(0x040)
 #define AUDCLNT_S_BUFFER_EMPTY AUDCLNT_SUCCESS(0x1)
 #define AUDCLNT_S_THREAD_ALREADY_REGISTERED AUDCLNT_SUCCESS(0x2)
 #define AUDCLNT_S_POSITION_STALLED AUDCLNT_SUCCESS(0x3)
