diff --git a/mingw-w64-headers/include/spatialaudioclient.h b/mingw-w64-headers/include/spatialaudioclient.h
index 372dcd9..e47ae9c 100644
--- a/mingw-w64-headers/include/spatialaudioclient.h
+++ b/mingw-w64-headers/include/spatialaudioclient.h
@@ -18,6 +18,14 @@
 
 /* Forward declarations */
 
+#ifndef __ISpatialAudioObjectRenderStreamNotify_FWD_DEFINED__
+#define __ISpatialAudioObjectRenderStreamNotify_FWD_DEFINED__
+typedef interface ISpatialAudioObjectRenderStreamNotify ISpatialAudioObjectRenderStreamNotify;
+#ifdef __cplusplus
+interface ISpatialAudioObjectRenderStreamNotify;
+#endif /* __cplusplus */
+#endif
+
 #ifndef __IAudioFormatEnumerator_FWD_DEFINED__
 #define __IAudioFormatEnumerator_FWD_DEFINED__
 typedef interface IAudioFormatEnumerator IAudioFormatEnumerator;
@@ -34,6 +42,38 @@
 #endif /* __cplusplus */
 #endif
 
+#ifndef __ISpatialAudioObjectBase_FWD_DEFINED__
+#define __ISpatialAudioObjectBase_FWD_DEFINED__
+typedef interface ISpatialAudioObjectBase ISpatialAudioObjectBase;
+#ifdef __cplusplus
+interface ISpatialAudioObjectBase;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ISpatialAudioObject_FWD_DEFINED__
+#define __ISpatialAudioObject_FWD_DEFINED__
+typedef interface ISpatialAudioObject ISpatialAudioObject;
+#ifdef __cplusplus
+interface ISpatialAudioObject;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ISpatialAudioObjectRenderStreamBase_FWD_DEFINED__
+#define __ISpatialAudioObjectRenderStreamBase_FWD_DEFINED__
+typedef interface ISpatialAudioObjectRenderStreamBase ISpatialAudioObjectRenderStreamBase;
+#ifdef __cplusplus
+interface ISpatialAudioObjectRenderStreamBase;
+#endif /* __cplusplus */
+#endif
+
+#ifndef __ISpatialAudioObjectRenderStream_FWD_DEFINED__
+#define __ISpatialAudioObjectRenderStream_FWD_DEFINED__
+typedef interface ISpatialAudioObjectRenderStream ISpatialAudioObjectRenderStream;
+#ifdef __cplusplus
+interface ISpatialAudioObjectRenderStream;
+#endif /* __cplusplus */
+#endif
+
 /* Headers for imported files */
 
 #include <unknwn.h>
@@ -65,6 +105,117 @@
     AudioObjectType_BottomBackRight = 0x10000,
     AudioObjectType_BackCenter = 0x20000
 } AudioObjectType;
+#define SPTLAUDCLNT_E_DESTROYED                     AUDCLNT_ERR(0x100)
+#define SPTLAUDCLNT_E_OUT_OF_ORDER                  AUDCLNT_ERR(0x101)
+#define SPTLAUDCLNT_E_RESOURCES_INVALIDATED         AUDCLNT_ERR(0x102)
+#define SPTLAUDCLNT_E_NO_MORE_OBJECTS               AUDCLNT_ERR(0x103)
+#define SPTLAUDCLNT_E_PROPERTY_NOT_SUPPORTED        AUDCLNT_ERR(0x104)
+#define SPTLAUDCLNT_E_ERRORS_IN_OBJECT_CALLS        AUDCLNT_ERR(0x105)
+#define SPTLAUDCLNT_E_METADATA_FORMAT_NOT_SUPPORTED AUDCLNT_ERR(0x106)
+#define SPTLAUDCLNT_E_STREAM_NOT_AVAILABLE          AUDCLNT_ERR(0x107)
+#define SPTLAUDCLNT_E_INVALID_LICENSE               AUDCLNT_ERR(0x108)
+#define SPTLAUDCLNT_E_STREAM_NOT_STOPPED            AUDCLNT_ERR(0x10a)
+#define SPTLAUDCLNT_E_STATIC_OBJECT_NOT_AVAILABLE   AUDCLNT_ERR(0x10b)
+#define SPTLAUDCLNT_E_OBJECT_ALREADY_ACTIVE         AUDCLNT_ERR(0x10c)
+#define SPTLAUDCLNT_E_INTERNAL                      AUDCLNT_ERR(0x10d)
+#ifndef __ISpatialAudioObjectRenderStreamBase_FWD_DEFINED__
+#define __ISpatialAudioObjectRenderStreamBase_FWD_DEFINED__
+typedef interface ISpatialAudioObjectRenderStreamBase ISpatialAudioObjectRenderStreamBase;
+#ifdef __cplusplus
+interface ISpatialAudioObjectRenderStreamBase;
+#endif /* __cplusplus */
+#endif
+
+/*****************************************************************************
+ * ISpatialAudioObjectRenderStreamNotify interface
+ */
+#ifndef __ISpatialAudioObjectRenderStreamNotify_INTERFACE_DEFINED__
+#define __ISpatialAudioObjectRenderStreamNotify_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ISpatialAudioObjectRenderStreamNotify, 0xdddf83e6, 0x68d7, 0x4c70, 0x88,0x3f, 0xa1,0x83,0x6a,0xfb,0x4a,0x50);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("dddf83e6-68d7-4c70-883f-a1836afb4a50")
+ISpatialAudioObjectRenderStreamNotify : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE OnAvailableDynamicObjectCountChange(
+        ISpatialAudioObjectRenderStreamBase *stream,
+        LONGLONG deadline,
+        UINT32 object_count) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ISpatialAudioObjectRenderStreamNotify, 0xdddf83e6, 0x68d7, 0x4c70, 0x88,0x3f, 0xa1,0x83,0x6a,0xfb,0x4a,0x50)
+#endif
+#else
+typedef struct ISpatialAudioObjectRenderStreamNotifyVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ISpatialAudioObjectRenderStreamNotify *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ISpatialAudioObjectRenderStreamNotify *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ISpatialAudioObjectRenderStreamNotify *This);
+
+    /*** ISpatialAudioObjectRenderStreamNotify methods ***/
+    HRESULT (STDMETHODCALLTYPE *OnAvailableDynamicObjectCountChange)(
+        ISpatialAudioObjectRenderStreamNotify *This,
+        ISpatialAudioObjectRenderStreamBase *stream,
+        LONGLONG deadline,
+        UINT32 object_count);
+
+    END_INTERFACE
+} ISpatialAudioObjectRenderStreamNotifyVtbl;
+
+interface ISpatialAudioObjectRenderStreamNotify {
+    CONST_VTBL ISpatialAudioObjectRenderStreamNotifyVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ISpatialAudioObjectRenderStreamNotify_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ISpatialAudioObjectRenderStreamNotify_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ISpatialAudioObjectRenderStreamNotify_Release(This) (This)->lpVtbl->Release(This)
+/*** ISpatialAudioObjectRenderStreamNotify methods ***/
+#define ISpatialAudioObjectRenderStreamNotify_OnAvailableDynamicObjectCountChange(This,stream,deadline,object_count) (This)->lpVtbl->OnAvailableDynamicObjectCountChange(This,stream,deadline,object_count)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ISpatialAudioObjectRenderStreamNotify_QueryInterface(ISpatialAudioObjectRenderStreamNotify* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ISpatialAudioObjectRenderStreamNotify_AddRef(ISpatialAudioObjectRenderStreamNotify* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ISpatialAudioObjectRenderStreamNotify_Release(ISpatialAudioObjectRenderStreamNotify* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ISpatialAudioObjectRenderStreamNotify methods ***/
+static FORCEINLINE HRESULT ISpatialAudioObjectRenderStreamNotify_OnAvailableDynamicObjectCountChange(ISpatialAudioObjectRenderStreamNotify* This,ISpatialAudioObjectRenderStreamBase *stream,LONGLONG deadline,UINT32 object_count) {
+    return This->lpVtbl->OnAvailableDynamicObjectCountChange(This,stream,deadline,object_count);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ISpatialAudioObjectRenderStreamNotify_INTERFACE_DEFINED__ */
+
+typedef struct tagSpatialAudioObjectRenderStreamActivationParams {
+    const WAVEFORMATEX *ObjectFormat;
+    AudioObjectType StaticObjectTypeMask;
+    UINT32 MinDynamicObjectCount;
+    UINT32 MaxDynamicObjectCount;
+    AUDIO_STREAM_CATEGORY Category;
+    HANDLE EventHandle;
+    ISpatialAudioObjectRenderStreamNotify *NotifyObject;
+} SpatialAudioObjectRenderStreamActivationParams;
 /*****************************************************************************
  * IAudioFormatEnumerator interface
  */
@@ -323,6 +474,525 @@
 
 #endif  /* __ISpatialAudioClient_INTERFACE_DEFINED__ */
 
+/*****************************************************************************
+ * ISpatialAudioObjectBase interface
+ */
+#ifndef __ISpatialAudioObjectBase_INTERFACE_DEFINED__
+#define __ISpatialAudioObjectBase_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ISpatialAudioObjectBase, 0xcce0b8f2, 0x8d4d, 0x4efb, 0xa8,0xcf, 0x3d,0x6e,0xcf,0x1c,0x30,0xe0);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("cce0b8f2-8d4d-4efb-a8cf-3d6ecf1c30e0")
+ISpatialAudioObjectBase : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetBuffer(
+        BYTE **buffer,
+        UINT32 *bytes) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetEndOfStream(
+        UINT32 frames) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE IsActive(
+        WINBOOL *active) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetAudioObjectType(
+        AudioObjectType *type) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ISpatialAudioObjectBase, 0xcce0b8f2, 0x8d4d, 0x4efb, 0xa8,0xcf, 0x3d,0x6e,0xcf,0x1c,0x30,0xe0)
+#endif
+#else
+typedef struct ISpatialAudioObjectBaseVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ISpatialAudioObjectBase *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ISpatialAudioObjectBase *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ISpatialAudioObjectBase *This);
+
+    /*** ISpatialAudioObjectBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetBuffer)(
+        ISpatialAudioObjectBase *This,
+        BYTE **buffer,
+        UINT32 *bytes);
+
+    HRESULT (STDMETHODCALLTYPE *SetEndOfStream)(
+        ISpatialAudioObjectBase *This,
+        UINT32 frames);
+
+    HRESULT (STDMETHODCALLTYPE *IsActive)(
+        ISpatialAudioObjectBase *This,
+        WINBOOL *active);
+
+    HRESULT (STDMETHODCALLTYPE *GetAudioObjectType)(
+        ISpatialAudioObjectBase *This,
+        AudioObjectType *type);
+
+    END_INTERFACE
+} ISpatialAudioObjectBaseVtbl;
+
+interface ISpatialAudioObjectBase {
+    CONST_VTBL ISpatialAudioObjectBaseVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ISpatialAudioObjectBase_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ISpatialAudioObjectBase_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ISpatialAudioObjectBase_Release(This) (This)->lpVtbl->Release(This)
+/*** ISpatialAudioObjectBase methods ***/
+#define ISpatialAudioObjectBase_GetBuffer(This,buffer,bytes) (This)->lpVtbl->GetBuffer(This,buffer,bytes)
+#define ISpatialAudioObjectBase_SetEndOfStream(This,frames) (This)->lpVtbl->SetEndOfStream(This,frames)
+#define ISpatialAudioObjectBase_IsActive(This,active) (This)->lpVtbl->IsActive(This,active)
+#define ISpatialAudioObjectBase_GetAudioObjectType(This,type) (This)->lpVtbl->GetAudioObjectType(This,type)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ISpatialAudioObjectBase_QueryInterface(ISpatialAudioObjectBase* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ISpatialAudioObjectBase_AddRef(ISpatialAudioObjectBase* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ISpatialAudioObjectBase_Release(ISpatialAudioObjectBase* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ISpatialAudioObjectBase methods ***/
+static FORCEINLINE HRESULT ISpatialAudioObjectBase_GetBuffer(ISpatialAudioObjectBase* This,BYTE **buffer,UINT32 *bytes) {
+    return This->lpVtbl->GetBuffer(This,buffer,bytes);
+}
+static FORCEINLINE HRESULT ISpatialAudioObjectBase_SetEndOfStream(ISpatialAudioObjectBase* This,UINT32 frames) {
+    return This->lpVtbl->SetEndOfStream(This,frames);
+}
+static FORCEINLINE HRESULT ISpatialAudioObjectBase_IsActive(ISpatialAudioObjectBase* This,WINBOOL *active) {
+    return This->lpVtbl->IsActive(This,active);
+}
+static FORCEINLINE HRESULT ISpatialAudioObjectBase_GetAudioObjectType(ISpatialAudioObjectBase* This,AudioObjectType *type) {
+    return This->lpVtbl->GetAudioObjectType(This,type);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ISpatialAudioObjectBase_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ISpatialAudioObject interface
+ */
+#ifndef __ISpatialAudioObject_INTERFACE_DEFINED__
+#define __ISpatialAudioObject_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ISpatialAudioObject, 0xdde28967, 0x521b, 0x46e5, 0x8f,0x00, 0xbd,0x6f,0x2b,0xc8,0xab,0x1d);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("dde28967-521b-46e5-8f00-bd6f2bc8ab1d")
+ISpatialAudioObject : public ISpatialAudioObjectBase
+{
+    virtual HRESULT STDMETHODCALLTYPE SetPosition(
+        float x,
+        float y,
+        float z) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE SetVolume(
+        float vol) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ISpatialAudioObject, 0xdde28967, 0x521b, 0x46e5, 0x8f,0x00, 0xbd,0x6f,0x2b,0xc8,0xab,0x1d)
+#endif
+#else
+typedef struct ISpatialAudioObjectVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ISpatialAudioObject *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ISpatialAudioObject *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ISpatialAudioObject *This);
+
+    /*** ISpatialAudioObjectBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetBuffer)(
+        ISpatialAudioObject *This,
+        BYTE **buffer,
+        UINT32 *bytes);
+
+    HRESULT (STDMETHODCALLTYPE *SetEndOfStream)(
+        ISpatialAudioObject *This,
+        UINT32 frames);
+
+    HRESULT (STDMETHODCALLTYPE *IsActive)(
+        ISpatialAudioObject *This,
+        WINBOOL *active);
+
+    HRESULT (STDMETHODCALLTYPE *GetAudioObjectType)(
+        ISpatialAudioObject *This,
+        AudioObjectType *type);
+
+    /*** ISpatialAudioObject methods ***/
+    HRESULT (STDMETHODCALLTYPE *SetPosition)(
+        ISpatialAudioObject *This,
+        float x,
+        float y,
+        float z);
+
+    HRESULT (STDMETHODCALLTYPE *SetVolume)(
+        ISpatialAudioObject *This,
+        float vol);
+
+    END_INTERFACE
+} ISpatialAudioObjectVtbl;
+
+interface ISpatialAudioObject {
+    CONST_VTBL ISpatialAudioObjectVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ISpatialAudioObject_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ISpatialAudioObject_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ISpatialAudioObject_Release(This) (This)->lpVtbl->Release(This)
+/*** ISpatialAudioObjectBase methods ***/
+#define ISpatialAudioObject_GetBuffer(This,buffer,bytes) (This)->lpVtbl->GetBuffer(This,buffer,bytes)
+#define ISpatialAudioObject_SetEndOfStream(This,frames) (This)->lpVtbl->SetEndOfStream(This,frames)
+#define ISpatialAudioObject_IsActive(This,active) (This)->lpVtbl->IsActive(This,active)
+#define ISpatialAudioObject_GetAudioObjectType(This,type) (This)->lpVtbl->GetAudioObjectType(This,type)
+/*** ISpatialAudioObject methods ***/
+#define ISpatialAudioObject_SetPosition(This,x,y,z) (This)->lpVtbl->SetPosition(This,x,y,z)
+#define ISpatialAudioObject_SetVolume(This,vol) (This)->lpVtbl->SetVolume(This,vol)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ISpatialAudioObject_QueryInterface(ISpatialAudioObject* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ISpatialAudioObject_AddRef(ISpatialAudioObject* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ISpatialAudioObject_Release(ISpatialAudioObject* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ISpatialAudioObjectBase methods ***/
+static FORCEINLINE HRESULT ISpatialAudioObject_GetBuffer(ISpatialAudioObject* This,BYTE **buffer,UINT32 *bytes) {
+    return This->lpVtbl->GetBuffer(This,buffer,bytes);
+}
+static FORCEINLINE HRESULT ISpatialAudioObject_SetEndOfStream(ISpatialAudioObject* This,UINT32 frames) {
+    return This->lpVtbl->SetEndOfStream(This,frames);
+}
+static FORCEINLINE HRESULT ISpatialAudioObject_IsActive(ISpatialAudioObject* This,WINBOOL *active) {
+    return This->lpVtbl->IsActive(This,active);
+}
+static FORCEINLINE HRESULT ISpatialAudioObject_GetAudioObjectType(ISpatialAudioObject* This,AudioObjectType *type) {
+    return This->lpVtbl->GetAudioObjectType(This,type);
+}
+/*** ISpatialAudioObject methods ***/
+static FORCEINLINE HRESULT ISpatialAudioObject_SetPosition(ISpatialAudioObject* This,float x,float y,float z) {
+    return This->lpVtbl->SetPosition(This,x,y,z);
+}
+static FORCEINLINE HRESULT ISpatialAudioObject_SetVolume(ISpatialAudioObject* This,float vol) {
+    return This->lpVtbl->SetVolume(This,vol);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ISpatialAudioObject_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ISpatialAudioObjectRenderStreamBase interface
+ */
+#ifndef __ISpatialAudioObjectRenderStreamBase_INTERFACE_DEFINED__
+#define __ISpatialAudioObjectRenderStreamBase_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ISpatialAudioObjectRenderStreamBase, 0xfeaaf403, 0xc1d8, 0x450d, 0xaa,0x05, 0xe0,0xcc,0xee,0x75,0x02,0xa8);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("feaaf403-c1d8-450d-aa05-e0ccee7502a8")
+ISpatialAudioObjectRenderStreamBase : public IUnknown
+{
+    virtual HRESULT STDMETHODCALLTYPE GetAvailableDynamicObjectCount(
+        UINT32 *count) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE GetService(
+        REFIID riid,
+        void **service) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Start(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Stop(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE Reset(
+        ) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE BeginUpdatingAudioObjects(
+        UINT32 *count,
+        UINT32 *frames) = 0;
+
+    virtual HRESULT STDMETHODCALLTYPE EndUpdatingAudioObjects(
+        ) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ISpatialAudioObjectRenderStreamBase, 0xfeaaf403, 0xc1d8, 0x450d, 0xaa,0x05, 0xe0,0xcc,0xee,0x75,0x02,0xa8)
+#endif
+#else
+typedef struct ISpatialAudioObjectRenderStreamBaseVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ISpatialAudioObjectRenderStreamBase *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ISpatialAudioObjectRenderStreamBase *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ISpatialAudioObjectRenderStreamBase *This);
+
+    /*** ISpatialAudioObjectRenderStreamBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetAvailableDynamicObjectCount)(
+        ISpatialAudioObjectRenderStreamBase *This,
+        UINT32 *count);
+
+    HRESULT (STDMETHODCALLTYPE *GetService)(
+        ISpatialAudioObjectRenderStreamBase *This,
+        REFIID riid,
+        void **service);
+
+    HRESULT (STDMETHODCALLTYPE *Start)(
+        ISpatialAudioObjectRenderStreamBase *This);
+
+    HRESULT (STDMETHODCALLTYPE *Stop)(
+        ISpatialAudioObjectRenderStreamBase *This);
+
+    HRESULT (STDMETHODCALLTYPE *Reset)(
+        ISpatialAudioObjectRenderStreamBase *This);
+
+    HRESULT (STDMETHODCALLTYPE *BeginUpdatingAudioObjects)(
+        ISpatialAudioObjectRenderStreamBase *This,
+        UINT32 *count,
+        UINT32 *frames);
+
+    HRESULT (STDMETHODCALLTYPE *EndUpdatingAudioObjects)(
+        ISpatialAudioObjectRenderStreamBase *This);
+
+    END_INTERFACE
+} ISpatialAudioObjectRenderStreamBaseVtbl;
+
+interface ISpatialAudioObjectRenderStreamBase {
+    CONST_VTBL ISpatialAudioObjectRenderStreamBaseVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ISpatialAudioObjectRenderStreamBase_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ISpatialAudioObjectRenderStreamBase_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ISpatialAudioObjectRenderStreamBase_Release(This) (This)->lpVtbl->Release(This)
+/*** ISpatialAudioObjectRenderStreamBase methods ***/
+#define ISpatialAudioObjectRenderStreamBase_GetAvailableDynamicObjectCount(This,count) (This)->lpVtbl->GetAvailableDynamicObjectCount(This,count)
+#define ISpatialAudioObjectRenderStreamBase_GetService(This,riid,service) (This)->lpVtbl->GetService(This,riid,service)
+#define ISpatialAudioObjectRenderStreamBase_Start(This) (This)->lpVtbl->Start(This)
+#define ISpatialAudioObjectRenderStreamBase_Stop(This) (This)->lpVtbl->Stop(This)
+#define ISpatialAudioObjectRenderStreamBase_Reset(This) (This)->lpVtbl->Reset(This)
+#define ISpatialAudioObjectRenderStreamBase_BeginUpdatingAudioObjects(This,count,frames) (This)->lpVtbl->BeginUpdatingAudioObjects(This,count,frames)
+#define ISpatialAudioObjectRenderStreamBase_EndUpdatingAudioObjects(This) (This)->lpVtbl->EndUpdatingAudioObjects(This)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ISpatialAudioObjectRenderStreamBase_QueryInterface(ISpatialAudioObjectRenderStreamBase* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ISpatialAudioObjectRenderStreamBase_AddRef(ISpatialAudioObjectRenderStreamBase* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ISpatialAudioObjectRenderStreamBase_Release(ISpatialAudioObjectRenderStreamBase* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ISpatialAudioObjectRenderStreamBase methods ***/
+static FORCEINLINE HRESULT ISpatialAudioObjectRenderStreamBase_GetAvailableDynamicObjectCount(ISpatialAudioObjectRenderStreamBase* This,UINT32 *count) {
+    return This->lpVtbl->GetAvailableDynamicObjectCount(This,count);
+}
+static FORCEINLINE HRESULT ISpatialAudioObjectRenderStreamBase_GetService(ISpatialAudioObjectRenderStreamBase* This,REFIID riid,void **service) {
+    return This->lpVtbl->GetService(This,riid,service);
+}
+static FORCEINLINE HRESULT ISpatialAudioObjectRenderStreamBase_Start(ISpatialAudioObjectRenderStreamBase* This) {
+    return This->lpVtbl->Start(This);
+}
+static FORCEINLINE HRESULT ISpatialAudioObjectRenderStreamBase_Stop(ISpatialAudioObjectRenderStreamBase* This) {
+    return This->lpVtbl->Stop(This);
+}
+static FORCEINLINE HRESULT ISpatialAudioObjectRenderStreamBase_Reset(ISpatialAudioObjectRenderStreamBase* This) {
+    return This->lpVtbl->Reset(This);
+}
+static FORCEINLINE HRESULT ISpatialAudioObjectRenderStreamBase_BeginUpdatingAudioObjects(ISpatialAudioObjectRenderStreamBase* This,UINT32 *count,UINT32 *frames) {
+    return This->lpVtbl->BeginUpdatingAudioObjects(This,count,frames);
+}
+static FORCEINLINE HRESULT ISpatialAudioObjectRenderStreamBase_EndUpdatingAudioObjects(ISpatialAudioObjectRenderStreamBase* This) {
+    return This->lpVtbl->EndUpdatingAudioObjects(This);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ISpatialAudioObjectRenderStreamBase_INTERFACE_DEFINED__ */
+
+/*****************************************************************************
+ * ISpatialAudioObjectRenderStream interface
+ */
+#ifndef __ISpatialAudioObjectRenderStream_INTERFACE_DEFINED__
+#define __ISpatialAudioObjectRenderStream_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_ISpatialAudioObjectRenderStream, 0xbab5f473, 0xb423, 0x477b, 0x85,0xf5, 0xb5,0xa3,0x32,0xa0,0x41,0x53);
+#if defined(__cplusplus) && !defined(CINTERFACE)
+MIDL_INTERFACE("bab5f473-b423-477b-85f5-b5a332a04153")
+ISpatialAudioObjectRenderStream : public ISpatialAudioObjectRenderStreamBase
+{
+    virtual HRESULT STDMETHODCALLTYPE ActivateSpatialAudioObject(
+        AudioObjectType type,
+        ISpatialAudioObject **object) = 0;
+
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ISpatialAudioObjectRenderStream, 0xbab5f473, 0xb423, 0x477b, 0x85,0xf5, 0xb5,0xa3,0x32,0xa0,0x41,0x53)
+#endif
+#else
+typedef struct ISpatialAudioObjectRenderStreamVtbl {
+    BEGIN_INTERFACE
+
+    /*** IUnknown methods ***/
+    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
+        ISpatialAudioObjectRenderStream *This,
+        REFIID riid,
+        void **ppvObject);
+
+    ULONG (STDMETHODCALLTYPE *AddRef)(
+        ISpatialAudioObjectRenderStream *This);
+
+    ULONG (STDMETHODCALLTYPE *Release)(
+        ISpatialAudioObjectRenderStream *This);
+
+    /*** ISpatialAudioObjectRenderStreamBase methods ***/
+    HRESULT (STDMETHODCALLTYPE *GetAvailableDynamicObjectCount)(
+        ISpatialAudioObjectRenderStream *This,
+        UINT32 *count);
+
+    HRESULT (STDMETHODCALLTYPE *GetService)(
+        ISpatialAudioObjectRenderStream *This,
+        REFIID riid,
+        void **service);
+
+    HRESULT (STDMETHODCALLTYPE *Start)(
+        ISpatialAudioObjectRenderStream *This);
+
+    HRESULT (STDMETHODCALLTYPE *Stop)(
+        ISpatialAudioObjectRenderStream *This);
+
+    HRESULT (STDMETHODCALLTYPE *Reset)(
+        ISpatialAudioObjectRenderStream *This);
+
+    HRESULT (STDMETHODCALLTYPE *BeginUpdatingAudioObjects)(
+        ISpatialAudioObjectRenderStream *This,
+        UINT32 *count,
+        UINT32 *frames);
+
+    HRESULT (STDMETHODCALLTYPE *EndUpdatingAudioObjects)(
+        ISpatialAudioObjectRenderStream *This);
+
+    /*** ISpatialAudioObjectRenderStream methods ***/
+    HRESULT (STDMETHODCALLTYPE *ActivateSpatialAudioObject)(
+        ISpatialAudioObjectRenderStream *This,
+        AudioObjectType type,
+        ISpatialAudioObject **object);
+
+    END_INTERFACE
+} ISpatialAudioObjectRenderStreamVtbl;
+
+interface ISpatialAudioObjectRenderStream {
+    CONST_VTBL ISpatialAudioObjectRenderStreamVtbl* lpVtbl;
+};
+
+#ifdef COBJMACROS
+#ifndef WIDL_C_INLINE_WRAPPERS
+/*** IUnknown methods ***/
+#define ISpatialAudioObjectRenderStream_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#define ISpatialAudioObjectRenderStream_AddRef(This) (This)->lpVtbl->AddRef(This)
+#define ISpatialAudioObjectRenderStream_Release(This) (This)->lpVtbl->Release(This)
+/*** ISpatialAudioObjectRenderStreamBase methods ***/
+#define ISpatialAudioObjectRenderStream_GetAvailableDynamicObjectCount(This,count) (This)->lpVtbl->GetAvailableDynamicObjectCount(This,count)
+#define ISpatialAudioObjectRenderStream_GetService(This,riid,service) (This)->lpVtbl->GetService(This,riid,service)
+#define ISpatialAudioObjectRenderStream_Start(This) (This)->lpVtbl->Start(This)
+#define ISpatialAudioObjectRenderStream_Stop(This) (This)->lpVtbl->Stop(This)
+#define ISpatialAudioObjectRenderStream_Reset(This) (This)->lpVtbl->Reset(This)
+#define ISpatialAudioObjectRenderStream_BeginUpdatingAudioObjects(This,count,frames) (This)->lpVtbl->BeginUpdatingAudioObjects(This,count,frames)
+#define ISpatialAudioObjectRenderStream_EndUpdatingAudioObjects(This) (This)->lpVtbl->EndUpdatingAudioObjects(This)
+/*** ISpatialAudioObjectRenderStream methods ***/
+#define ISpatialAudioObjectRenderStream_ActivateSpatialAudioObject(This,type,object) (This)->lpVtbl->ActivateSpatialAudioObject(This,type,object)
+#else
+/*** IUnknown methods ***/
+static FORCEINLINE HRESULT ISpatialAudioObjectRenderStream_QueryInterface(ISpatialAudioObjectRenderStream* This,REFIID riid,void **ppvObject) {
+    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
+}
+static FORCEINLINE ULONG ISpatialAudioObjectRenderStream_AddRef(ISpatialAudioObjectRenderStream* This) {
+    return This->lpVtbl->AddRef(This);
+}
+static FORCEINLINE ULONG ISpatialAudioObjectRenderStream_Release(ISpatialAudioObjectRenderStream* This) {
+    return This->lpVtbl->Release(This);
+}
+/*** ISpatialAudioObjectRenderStreamBase methods ***/
+static FORCEINLINE HRESULT ISpatialAudioObjectRenderStream_GetAvailableDynamicObjectCount(ISpatialAudioObjectRenderStream* This,UINT32 *count) {
+    return This->lpVtbl->GetAvailableDynamicObjectCount(This,count);
+}
+static FORCEINLINE HRESULT ISpatialAudioObjectRenderStream_GetService(ISpatialAudioObjectRenderStream* This,REFIID riid,void **service) {
+    return This->lpVtbl->GetService(This,riid,service);
+}
+static FORCEINLINE HRESULT ISpatialAudioObjectRenderStream_Start(ISpatialAudioObjectRenderStream* This) {
+    return This->lpVtbl->Start(This);
+}
+static FORCEINLINE HRESULT ISpatialAudioObjectRenderStream_Stop(ISpatialAudioObjectRenderStream* This) {
+    return This->lpVtbl->Stop(This);
+}
+static FORCEINLINE HRESULT ISpatialAudioObjectRenderStream_Reset(ISpatialAudioObjectRenderStream* This) {
+    return This->lpVtbl->Reset(This);
+}
+static FORCEINLINE HRESULT ISpatialAudioObjectRenderStream_BeginUpdatingAudioObjects(ISpatialAudioObjectRenderStream* This,UINT32 *count,UINT32 *frames) {
+    return This->lpVtbl->BeginUpdatingAudioObjects(This,count,frames);
+}
+static FORCEINLINE HRESULT ISpatialAudioObjectRenderStream_EndUpdatingAudioObjects(ISpatialAudioObjectRenderStream* This) {
+    return This->lpVtbl->EndUpdatingAudioObjects(This);
+}
+/*** ISpatialAudioObjectRenderStream methods ***/
+static FORCEINLINE HRESULT ISpatialAudioObjectRenderStream_ActivateSpatialAudioObject(ISpatialAudioObjectRenderStream* This,AudioObjectType type,ISpatialAudioObject **object) {
+    return This->lpVtbl->ActivateSpatialAudioObject(This,type,object);
+}
+#endif
+#endif
+
+#endif
+
+
+#endif  /* __ISpatialAudioObjectRenderStream_INTERFACE_DEFINED__ */
+
 /* Begin additional prototypes for all interfaces */
 
 
diff --git a/mingw-w64-headers/include/spatialaudioclient.idl b/mingw-w64-headers/include/spatialaudioclient.idl
index 16a1541..08c8496 100644
--- a/mingw-w64-headers/include/spatialaudioclient.idl
+++ b/mingw-w64-headers/include/spatialaudioclient.idl
@@ -43,6 +43,47 @@
     AudioObjectType_BackCenter       = 0x00020000,
 } AudioObjectType;
 
+cpp_quote("#define SPTLAUDCLNT_E_DESTROYED                     AUDCLNT_ERR(0x100)")
+cpp_quote("#define SPTLAUDCLNT_E_OUT_OF_ORDER                  AUDCLNT_ERR(0x101)")
+cpp_quote("#define SPTLAUDCLNT_E_RESOURCES_INVALIDATED         AUDCLNT_ERR(0x102)")
+cpp_quote("#define SPTLAUDCLNT_E_NO_MORE_OBJECTS               AUDCLNT_ERR(0x103)")
+cpp_quote("#define SPTLAUDCLNT_E_PROPERTY_NOT_SUPPORTED        AUDCLNT_ERR(0x104)")
+cpp_quote("#define SPTLAUDCLNT_E_ERRORS_IN_OBJECT_CALLS        AUDCLNT_ERR(0x105)")
+cpp_quote("#define SPTLAUDCLNT_E_METADATA_FORMAT_NOT_SUPPORTED AUDCLNT_ERR(0x106)")
+cpp_quote("#define SPTLAUDCLNT_E_STREAM_NOT_AVAILABLE          AUDCLNT_ERR(0x107)")
+cpp_quote("#define SPTLAUDCLNT_E_INVALID_LICENSE               AUDCLNT_ERR(0x108)")
+cpp_quote("#define SPTLAUDCLNT_E_STREAM_NOT_STOPPED            AUDCLNT_ERR(0x10a)")
+cpp_quote("#define SPTLAUDCLNT_E_STATIC_OBJECT_NOT_AVAILABLE   AUDCLNT_ERR(0x10b)")
+cpp_quote("#define SPTLAUDCLNT_E_OBJECT_ALREADY_ACTIVE         AUDCLNT_ERR(0x10c)")
+cpp_quote("#define SPTLAUDCLNT_E_INTERNAL                      AUDCLNT_ERR(0x10d)")
+
+interface ISpatialAudioObjectRenderStreamBase;
+
+[
+    object,
+    uuid(dddf83e6-68d7-4c70-883f-a1836afb4a50),
+    pointer_default(unique),
+    local
+]
+interface ISpatialAudioObjectRenderStreamNotify : IUnknown
+{
+    HRESULT OnAvailableDynamicObjectCountChange(
+        [in] ISpatialAudioObjectRenderStreamBase *stream,
+        [in] LONGLONG deadline,
+        [in] UINT32 object_count);
+}
+
+typedef struct tagSpatialAudioObjectRenderStreamActivationParams
+{
+    const WAVEFORMATEX *ObjectFormat;
+    AudioObjectType StaticObjectTypeMask;
+    UINT32 MinDynamicObjectCount;
+    UINT32 MaxDynamicObjectCount;
+    AUDIO_STREAM_CATEGORY Category;
+    HANDLE EventHandle;
+    ISpatialAudioObjectRenderStreamNotify *NotifyObject;
+} SpatialAudioObjectRenderStreamActivationParams;
+
 [
     object,
     uuid(dcdaa858-895a-4a22-a5eb-67bda506096d),
@@ -98,3 +139,83 @@
         [in] REFIID riid,
         [out, iid_is(riid)] void **stream);
 }
+
+[
+    object,
+    uuid(cce0b8f2-8d4d-4efb-a8cf-3d6ecf1c30e0),
+    pointer_default(unique),
+    local
+]
+interface ISpatialAudioObjectBase : IUnknown
+{
+    HRESULT GetBuffer(
+        [out] BYTE **buffer,
+        [out] UINT32 *bytes);
+
+    HRESULT SetEndOfStream(
+        [in] UINT32 frames);
+
+    HRESULT IsActive(
+        [out] BOOL *active);
+
+    HRESULT GetAudioObjectType(
+        [out] AudioObjectType *type);
+}
+
+[
+    object,
+    uuid(dde28967-521b-46e5-8f00-bd6f2bc8ab1d),
+    pointer_default(unique),
+    local
+]
+interface ISpatialAudioObject : ISpatialAudioObjectBase
+{
+    HRESULT SetPosition(
+        [in] float x,
+        [in] float y,
+        [in] float z);
+
+    HRESULT SetVolume(
+        [in] float vol);
+}
+
+[
+    object,
+    uuid(feaaf403-c1d8-450d-aa05-e0ccee7502a8),
+    pointer_default(unique),
+    local
+]
+interface ISpatialAudioObjectRenderStreamBase : IUnknown
+{
+    HRESULT GetAvailableDynamicObjectCount(
+        [out] UINT32 *count);
+
+    HRESULT GetService(
+        [in] REFIID riid,
+        [out] void **service);
+
+    HRESULT Start();
+
+    HRESULT Stop();
+
+    HRESULT Reset();
+
+    HRESULT BeginUpdatingAudioObjects(
+        [out] UINT32 *count,
+        [out] UINT32 *frames);
+
+    HRESULT EndUpdatingAudioObjects();
+}
+
+[
+    object,
+    uuid(bab5f473-b423-477b-85f5-b5a332a04153),
+    pointer_default(unique),
+    local
+]
+interface ISpatialAudioObjectRenderStream : ISpatialAudioObjectRenderStreamBase
+{
+    HRESULT ActivateSpatialAudioObject(
+        [in] AudioObjectType type,
+        [out] ISpatialAudioObject **object);
+}
