/* * Copyright 2020 Nikolay Sivov for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "unknwn.idl"; import "audioclient.idl"; import "propsys.idl"; typedef [v1_enum] enum AudioObjectType { AudioObjectType_None = 0, AudioObjectType_Dynamic = 0x00000001, AudioObjectType_FrontLeft = 0x00000002, AudioObjectType_FrontRight = 0x00000004, AudioObjectType_FrontCenter = 0x00000008, AudioObjectType_LowFrequency = 0x00000010, AudioObjectType_SideLeft = 0x00000020, AudioObjectType_SideRight = 0x00000040, AudioObjectType_BackLeft = 0x00000080, AudioObjectType_BackRight = 0x00000100, AudioObjectType_TopFrontLeft = 0x00000200, AudioObjectType_TopFrontRight = 0x00000400, AudioObjectType_TopBackLeft = 0x00000800, AudioObjectType_TopBackRight = 0x00001000, AudioObjectType_BottomFrontLeft = 0x00002000, AudioObjectType_BottomFrontRight = 0x00004000, AudioObjectType_BottomBackLeft = 0x00008000, AudioObjectType_BottomBackRight = 0x00010000, 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), pointer_default(unique), local ] interface IAudioFormatEnumerator : IUnknown { HRESULT GetCount( [out] UINT32 *count); HRESULT GetFormat( [in] UINT32 index, [out] WAVEFORMATEX **format); } [ object, uuid(bbf8e066-aaaa-49be-9a4d-fd2a858ea27f), pointer_default(unique), local ] interface ISpatialAudioClient : IUnknown { HRESULT GetStaticObjectPosition( [in] AudioObjectType type, [out] float *x, [out] float *y, [out] float *z); HRESULT GetNativeStaticObjectTypeMask( [out] AudioObjectType *mask); HRESULT GetMaxDynamicObjectCount( [out] UINT32 *value); HRESULT GetSupportedAudioObjectFormatEnumerator( [out] IAudioFormatEnumerator **enumerator); HRESULT GetMaxFrameCount( [in] WAVEFORMATEX const *format, [out] UINT32 *count); HRESULT IsAudioObjectFormatSupported( [in] WAVEFORMATEX const *format); HRESULT IsSpatialAudioStreamAvailable( [in] REFIID stream_uuid, [in] PROPVARIANT const *info); HRESULT ActivateSpatialAudioStream( [in] PROPVARIANT const *params, [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); }