/* * Copyright (c) 2015 Mark Harmstone * * 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 "mmdeviceapi.idl"; import "audiosessiontypes.h"; cpp_quote("#include <pshpack1.h>") [ uuid(fac23f48-31f5-45a8-b49b-5225d61401aa) ] coclass XAudio20 { interface IUnknown; } [ uuid(e21a7345-eb21-468e-be50-804db97cf708) ] coclass XAudio21 { interface IUnknown; } [ uuid(b802058a-464a-42db-bc10-b650d6f2586a) ] coclass XAudio22 { interface IUnknown; } [ uuid(4c5e637a-16c7-4de3-9c46-5ed22181962d) ] coclass XAudio23 { interface IUnknown; } [ uuid(03219e78-5bc3-44d1-b92e-f63d89cc6526) ] coclass XAudio24 { interface IUnknown; } [ uuid(4c9b6dde-6809-46e6-a278-9b6a97588670) ] coclass XAudio25 { interface IUnknown; } [ uuid(3eda9b49-2085-498b-9bb2-39a6778493de) ] coclass XAudio26 { interface IUnknown; } [ uuid(5a508685-a254-4fba-9b82-9a24b00306af) ] coclass XAudio27 { interface IUnknown; } [ uuid(db05ea35-0329-4d4b-a53a-6dead03d3852) ] coclass XAudio2Debug { interface IUnknown; } cpp_quote("#if 0") typedef struct WAVEFORMATEX { WORD wFormatTag; WORD nChannels; DWORD nSamplesPerSec; DWORD nAvgBytesPerSec; WORD nBlockAlign; WORD wBitsPerSample; WORD cbSize; } WAVEFORMATEX; typedef struct { WAVEFORMATEX Format; union { WORD wValidBitsPerSample; WORD wSamplesPerBlock; WORD wReserved; } Samples; DWORD dwChannelMask; GUID SubFormat; } WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE; cpp_quote("#else") cpp_quote("#include <mmreg.h>") cpp_quote("#endif") interface IXAudio2Voice; typedef enum XAUDIO2_WINDOWS_PROCESSOR_SPECIFIER { Processor1 = 0x00000001, Processor2 = 0x00000002, Processor3 = 0x00000004, Processor4 = 0x00000008, Processor5 = 0x00000010, Processor6 = 0x00000020, Processor7 = 0x00000040, Processor8 = 0x00000080, Processor9 = 0x00000100, Processor10 = 0x00000200, Processor11 = 0x00000400, Processor12 = 0x00000800, Processor13 = 0x00001000, Processor14 = 0x00002000, Processor15 = 0x00004000, Processor16 = 0x00008000, Processor17 = 0x00010000, Processor18 = 0x00020000, Processor19 = 0x00040000, Processor20 = 0x00080000, Processor21 = 0x00100000, Processor22 = 0x00200000, Processor23 = 0x00400000, Processor24 = 0x00800000, Processor25 = 0x01000000, Processor26 = 0x02000000, Processor27 = 0x04000000, Processor28 = 0x08000000, Processor29 = 0x10000000, Processor30 = 0x20000000, Processor31 = 0x40000000, Processor32 = 0x80000000, XAUDIO2_ANY_PROCESSOR = 0xffffffff, XAUDIO2_DEFAULT_PROCESSOR = XAUDIO2_ANY_PROCESSOR } XAUDIO2_WINDOWS_PROCESSOR_SPECIFIER, XAUDIO2_PROCESSOR; typedef struct XAUDIO2_PERFORMANCE_DATA { UINT64 AudioCyclesSinceLastQuery; UINT64 TotalCyclesSinceLastQuery; UINT32 MinimumCyclesPerQuantum; UINT32 MaximumCyclesPerQuantum; UINT32 MemoryUsageInBytes; UINT32 CurrentLatencyInSamples; UINT32 GlitchesSinceEngineStarted; UINT32 ActiveSourceVoiceCount; UINT32 TotalSourceVoiceCount; UINT32 ActiveSubmixVoiceCount; UINT32 ActiveResamplerCount; UINT32 ActiveMatrixMixCount; UINT32 ActiveXmaSourceVoices; UINT32 ActiveXmaStreams; } XAUDIO2_PERFORMANCE_DATA; typedef struct XAUDIO22_PERFORMANCE_DATA { UINT64 AudioCyclesSinceLastQuery; UINT64 TotalCyclesSinceLastQuery; UINT32 MinimumCyclesPerQuantum; UINT32 MaximumCyclesPerQuantum; UINT32 MemoryUsageInBytes; UINT32 CurrentLatencyInSamples; UINT32 GlitchesSinceEngineStarted; UINT32 ActiveSourceVoiceCount; UINT32 TotalSourceVoiceCount; UINT32 ActiveSubmixVoiceCount; UINT32 TotalSubmixVoiceCount; UINT32 ActiveXmaSourceVoices; UINT32 ActiveXmaStreams; } XAUDIO22_PERFORMANCE_DATA; typedef struct XAUDIO20_PERFORMANCE_DATA { UINT64 AudioCyclesSinceLastQuery; UINT64 TotalCyclesSinceLastQuery; UINT32 MinimumCyclesPerQuantum; UINT32 MaximumCyclesPerQuantum; UINT32 MemoryUsageInBytes; UINT32 CurrentLatencyInSamples; UINT32 GlitchesSinceLastQuery; UINT32 ActiveSourceVoiceCount; UINT32 TotalSourceVoiceCount; UINT32 ActiveSubmixVoiceCount; UINT32 TotalSubmixVoiceCount; UINT32 ActiveXmaSourceVoices; UINT32 ActiveXmaStreams; } XAUDIO20_PERFORMANCE_DATA; typedef enum XAUDIO2_DEVICE_ROLE { NotDefaultDevice = 0x0, DefaultConsoleDevice = 0x1, DefaultMultimediaDevice = 0x2, DefaultCommunicationsDevice = 0x4, DefaultGameDevice = 0x8, GlobalDefaultDevice = 0xf, InvalidDeviceRole = ~GlobalDefaultDevice } XAUDIO2_DEVICE_ROLE; typedef struct XAUDIO2_DEVICE_DETAILS { WCHAR DeviceID[256]; WCHAR DisplayName[256]; XAUDIO2_DEVICE_ROLE Role; WAVEFORMATEXTENSIBLE OutputFormat; } XAUDIO2_DEVICE_DETAILS; typedef struct XAUDIO27_VOICE_DETAILS { UINT32 CreationFlags; UINT32 InputChannels; UINT32 InputSampleRate; } XAUDIO27_VOICE_DETAILS; typedef struct XAUDIO2_VOICE_DETAILS { UINT32 CreationFlags; UINT32 ActiveFlags; UINT32 InputChannels; UINT32 InputSampleRate; } XAUDIO2_VOICE_DETAILS; typedef struct XAUDIO2_SEND_DESCRIPTOR { UINT32 Flags; IXAudio2Voice* pOutputVoice; } XAUDIO2_SEND_DESCRIPTOR; /* XAudio2 2.3's XAUDIO2_VOICE_SENDS struct */ typedef struct XAUDIO23_VOICE_SENDS { UINT32 OutputCount; IXAudio2Voice **pOutputVoices; } XAUDIO23_VOICE_SENDS; typedef struct XAUDIO2_VOICE_SENDS { UINT32 SendCount; XAUDIO2_SEND_DESCRIPTOR* pSends; } XAUDIO2_VOICE_SENDS; typedef struct XAUDIO2_EFFECT_DESCRIPTOR { IUnknown* pEffect; BOOL InitialState; UINT32 OutputChannels; } XAUDIO2_EFFECT_DESCRIPTOR; typedef struct XAUDIO2_EFFECT_CHAIN { UINT32 EffectCount; XAUDIO2_EFFECT_DESCRIPTOR* pEffectDescriptors; } XAUDIO2_EFFECT_CHAIN; const UINT32 XAUDIO2_MAX_BUFFER_BYTES = 0x80000000; const UINT32 XAUDIO2_MAX_QUEUED_BUFFERS = 64; const UINT32 XAUDIO2_MAX_BUFFERS_SYSTEM = 2; const UINT32 XAUDIO2_MAX_AUDIO_CHANNELS = 64; const UINT32 XAUDIO2_MIN_SAMPLE_RATE = 1000; const UINT32 XAUDIO2_MAX_SAMPLE_RATE = 200000; const float XAUDIO2_MAX_VOLUME_LEVEL = 16777216.0; const float XAUDIO2_MIN_FREQ_RATIO = (1/1024.0); const float XAUDIO2_MAX_FREQ_RATIO = 1024.0; const float XAUDIO2_DEFAULT_FREQ_RATIO = 2.0; const float XAUDIO2_MAX_FILTER_ONEOVERQ = 1.5; const float XAUDIO2_MAX_FILTER_FREQUENCY = 1.0; const UINT32 XAUDIO2_MAX_LOOP_COUNT = 254; const UINT32 XAUDIO20_MAX_LOOP_COUNT = 0x100000; /* xaudio 2.0 */ const UINT32 XAUDIO2_COMMIT_NOW = 0; const UINT32 XAUDIO2_COMMIT_ALL = 0; const UINT32 XAUDIO2_INVALID_OPSET = 0xffffffff; const UINT32 XAUDIO2_NO_LOOP_REGION = 0; const UINT32 XAUDIO2_LOOP_INFINITE = 255; const UINT32 XAUDIO20_LOOP_INFINITE = ((UINT)-1); /* xaudio 2.0 */ const UINT32 XAUDIO2_DEFAULT_CHANNELS = 0; const UINT32 XAUDIO2_DEFAULT_SAMPLERATE = 0; [ object, local ] interface IXAudio2EngineCallback { void OnProcessingPassStart(); void OnProcessingPassEnd(); void OnCriticalError([in] HRESULT Error); } typedef enum XAUDIO2_FILTER_TYPE { LowPassFilter, BandPassFilter, HighPassFilter, NotchFilter } XAUDIO2_FILTER_TYPE; typedef struct XAUDIO2_FILTER_PARAMETERS { XAUDIO2_FILTER_TYPE Type; float Frequency; float OneOverQ; } XAUDIO2_FILTER_PARAMETERS; /* XAudio 2.0's IXAudio2Voice */ /* XAudio2 2.0's IXAudio2Voice interface. Actually called * IXAudio2Voice in the Mar 2008 DX SDK */ [ object, local ] interface IXAudio20Voice { void GetVoiceDetails([out] XAUDIO27_VOICE_DETAILS* pVoiceDetails); HRESULT SetOutputVoices([in] const XAUDIO23_VOICE_SENDS* pSendList); HRESULT SetEffectChain([in] const XAUDIO2_EFFECT_CHAIN* pEffectChain); HRESULT EnableEffect( [in] UINT32 EffectIndex, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); HRESULT DisableEffect( [in] UINT32 EffectIndex, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetEffectState( [in] UINT32 EffectIndex, [out] BOOL* pEnabled); HRESULT SetEffectParameters( [in] UINT32 EffectIndex, [in] const void* pParameters, [in] UINT32 ParametersByteSize, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); HRESULT GetEffectParameters( [in] UINT32 EffectIndex, [out] void* pParameters, [in] UINT32 ParametersByteSize); HRESULT SetFilterParameters( [in] const XAUDIO2_FILTER_PARAMETERS* pParameters, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetFilterParameters([out] XAUDIO2_FILTER_PARAMETERS* pParameters); HRESULT SetVolume( [in] float Volume, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetVolume([out] float* pVolume); HRESULT SetChannelVolumes( [in] UINT32 Channels, [in, size_is(Channels)] const float* pVolumes, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetChannelVolumes( [in] UINT32 Channels, [out, size_is(Channels)] float* pVolumes); HRESULT SetOutputMatrix( [in] IXAudio2Voice* pDestinationVoice, [in] UINT32 SourceChannels, [in] UINT32 DestinationChannels, [in, size_is(SourceChannels * DestinationChannels)] const float* pLevelMatrix, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); HRESULT GetOutputMatrix( [in] IXAudio2Voice* pDestinationVoice, [in] UINT32 SourceChannels, [in] UINT32 DestinationChannels, [out, size_is(SourceChannels * DestinationChannels)] float* pLevelMatrix); void DestroyVoice(); } /* XAudio 2.3's IXAudio2Voice */ /* XAudio2 2.3's IXAudio2Voice interface. Actually called * IXAudio2Voice in the Nov 2008 DX SDK */ [ object, local ] interface IXAudio23Voice { void GetVoiceDetails([out] XAUDIO27_VOICE_DETAILS* pVoiceDetails); HRESULT SetOutputVoices([in] const XAUDIO23_VOICE_SENDS* pSendList); HRESULT SetEffectChain([in] const XAUDIO2_EFFECT_CHAIN* pEffectChain); HRESULT EnableEffect( [in] UINT32 EffectIndex, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); HRESULT DisableEffect( [in] UINT32 EffectIndex, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetEffectState( [in] UINT32 EffectIndex, [out] BOOL* pEnabled); HRESULT SetEffectParameters( [in] UINT32 EffectIndex, [in] const void* pParameters, [in] UINT32 ParametersByteSize, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); HRESULT GetEffectParameters( [in] UINT32 EffectIndex, [out] void* pParameters, [in] UINT32 ParametersByteSize); HRESULT SetFilterParameters( [in] const XAUDIO2_FILTER_PARAMETERS* pParameters, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetFilterParameters([out] XAUDIO2_FILTER_PARAMETERS* pParameters); HRESULT SetVolume( [in] float Volume, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetVolume([out] float* pVolume); HRESULT SetChannelVolumes( [in] UINT32 Channels, [in, size_is(Channels)] const float* pVolumes, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetChannelVolumes( [in] UINT32 Channels, [out, size_is(Channels)] float* pVolumes); HRESULT SetOutputMatrix( [in] IXAudio2Voice* pDestinationVoice, [in] UINT32 SourceChannels, [in] UINT32 DestinationChannels, [in, size_is(SourceChannels * DestinationChannels)] const float* pLevelMatrix, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetOutputMatrix( [in] IXAudio2Voice* pDestinationVoice, [in] UINT32 SourceChannels, [in] UINT32 DestinationChannels, [out, size_is(SourceChannels * DestinationChannels)] float* pLevelMatrix); void DestroyVoice(); } /* XAudio 2.7's IXAudio2Voice */ /* XAudio2 2.7's IXAudio2Voice interface. Actually called * IXAudio2Voice in the Jun 2010 DX SDK */ [ object, local ] interface IXAudio27Voice { void GetVoiceDetails([out] XAUDIO27_VOICE_DETAILS* pVoiceDetails); HRESULT SetOutputVoices([in] const XAUDIO2_VOICE_SENDS* pSendList); HRESULT SetEffectChain([in] const XAUDIO2_EFFECT_CHAIN* pEffectChain); HRESULT EnableEffect( [in] UINT32 EffectIndex, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); HRESULT DisableEffect( [in] UINT32 EffectIndex, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetEffectState( [in] UINT32 EffectIndex, [out] BOOL* pEnabled); HRESULT SetEffectParameters( [in] UINT32 EffectIndex, [in] const void* pParameters, [in] UINT32 ParametersByteSize, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); HRESULT GetEffectParameters( [in] UINT32 EffectIndex, [out] void* pParameters, [in] UINT32 ParametersByteSize); HRESULT SetFilterParameters( [in] const XAUDIO2_FILTER_PARAMETERS* pParameters, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetFilterParameters([out] XAUDIO2_FILTER_PARAMETERS* pParameters); HRESULT SetOutputFilterParameters( [in] IXAudio2Voice* pDestinationVoice, [in] const XAUDIO2_FILTER_PARAMETERS* pParameters, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetOutputFilterParameters( [in] IXAudio2Voice* pDestinationVoice, [out] XAUDIO2_FILTER_PARAMETERS* pParameters); HRESULT SetVolume( [in] float Volume, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetVolume([out] float* pVolume); HRESULT SetChannelVolumes( [in] UINT32 Channels, [in, size_is(Channels)] const float* pVolumes, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetChannelVolumes( [in] UINT32 Channels, [out, size_is(Channels)] float* pVolumes); HRESULT SetOutputMatrix( [in] IXAudio2Voice* pDestinationVoice, [in] UINT32 SourceChannels, [in] UINT32 DestinationChannels, [in, size_is(SourceChannels * DestinationChannels)] const float* pLevelMatrix, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetOutputMatrix( [in] IXAudio2Voice* pDestinationVoice, [in] UINT32 SourceChannels, [in] UINT32 DestinationChannels, [out, size_is(SourceChannels * DestinationChannels)] float* pLevelMatrix); void DestroyVoice(); } [ object, local ] interface IXAudio2Voice { void GetVoiceDetails([out] XAUDIO2_VOICE_DETAILS* pVoiceDetails); HRESULT SetOutputVoices([in] const XAUDIO2_VOICE_SENDS* pSendList); HRESULT SetEffectChain([in] const XAUDIO2_EFFECT_CHAIN* pEffectChain); HRESULT EnableEffect( [in] UINT32 EffectIndex, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); HRESULT DisableEffect( [in] UINT32 EffectIndex, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetEffectState( [in] UINT32 EffectIndex, [out] BOOL* pEnabled); HRESULT SetEffectParameters( [in] UINT32 EffectIndex, [in] const void* pParameters, [in] UINT32 ParametersByteSize, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); HRESULT GetEffectParameters( [in] UINT32 EffectIndex, [out] void* pParameters, [in] UINT32 ParametersByteSize); HRESULT SetFilterParameters( [in] const XAUDIO2_FILTER_PARAMETERS* pParameters, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetFilterParameters([out] XAUDIO2_FILTER_PARAMETERS* pParameters); HRESULT SetOutputFilterParameters( [in] IXAudio2Voice* pDestinationVoice, [in] const XAUDIO2_FILTER_PARAMETERS* pParameters, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetOutputFilterParameters( [in] IXAudio2Voice* pDestinationVoice, [out] XAUDIO2_FILTER_PARAMETERS* pParameters); HRESULT SetVolume( [in] float Volume, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetVolume([out] float* pVolume); HRESULT SetChannelVolumes( [in] UINT32 Channels, [in, size_is(Channels)] const float* pVolumes, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetChannelVolumes( [in] UINT32 Channels, [out, size_is(Channels)] float* pVolumes); HRESULT SetOutputMatrix( [in] IXAudio2Voice* pDestinationVoice, [in] UINT32 SourceChannels, [in] UINT32 DestinationChannels, [in, size_is(SourceChannels * DestinationChannels)] const float* pLevelMatrix, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetOutputMatrix( [in] IXAudio2Voice* pDestinationVoice, [in] UINT32 SourceChannels, [in] UINT32 DestinationChannels, [out, size_is(SourceChannels * DestinationChannels)] float* pLevelMatrix); void DestroyVoice(); } typedef struct XAUDIO2_BUFFER { UINT32 Flags; UINT32 AudioBytes; const BYTE* pAudioData; UINT32 PlayBegin; UINT32 PlayLength; UINT32 LoopBegin; UINT32 LoopLength; UINT32 LoopCount; void* pContext; } XAUDIO2_BUFFER; typedef struct XAUDIO2_BUFFER_WMA { const UINT32* pDecodedPacketCumulativeBytes; UINT32 PacketCount; } XAUDIO2_BUFFER_WMA; typedef struct XAUDIO2_VOICE_STATE { void* pCurrentBufferContext; UINT32 BuffersQueued; UINT64 SamplesPlayed; } XAUDIO2_VOICE_STATE; [ local ] /* XAudio2 2.0's IXAudio2SourceVoice interface. Actually called * IXAudio2SourceVoice in the Mar 2008 DX SDK */ interface IXAudio20SourceVoice : IXAudio20Voice { HRESULT Start( [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); HRESULT Stop( [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); HRESULT SubmitSourceBuffer( [in] const XAUDIO2_BUFFER* pBuffer, [in, defaultvalue(NULL)] const XAUDIO2_BUFFER_WMA* pBufferWMA); HRESULT FlushSourceBuffers(); HRESULT Discontinuity(); HRESULT ExitLoop([in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetState([out] XAUDIO2_VOICE_STATE* pVoiceState); HRESULT SetFrequencyRatio( [in] float Ratio, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetFrequencyRatio([out] float* pRatio); } [ local ] /* XAudio2 2.3's IXAudio2SourceVoice interface. Actually called * IXAudio2SourceVoice in the Nov 2008 DX SDK */ interface IXAudio23SourceVoice : IXAudio23Voice { HRESULT Start( [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); HRESULT Stop( [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); HRESULT SubmitSourceBuffer( [in] const XAUDIO2_BUFFER* pBuffer, [in, defaultvalue(NULL)] const XAUDIO2_BUFFER_WMA* pBufferWMA); HRESULT FlushSourceBuffers(); HRESULT Discontinuity(); HRESULT ExitLoop([in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetState([out] XAUDIO2_VOICE_STATE* pVoiceState); HRESULT SetFrequencyRatio( [in] float Ratio, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetFrequencyRatio([out] float* pRatio); } [ local ] /* XAudio2 2.7's IXAudio2SourceVoice interface. Actually called * IXAudio2SourceVoice in the Jun 2010 DX SDK */ interface IXAudio27SourceVoice : IXAudio27Voice { HRESULT Start( [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); HRESULT Stop( [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); HRESULT SubmitSourceBuffer( [in] const XAUDIO2_BUFFER* pBuffer, [in, defaultvalue(NULL)] const XAUDIO2_BUFFER_WMA* pBufferWMA); HRESULT FlushSourceBuffers(); HRESULT Discontinuity(); HRESULT ExitLoop([in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetState([out] XAUDIO2_VOICE_STATE* pVoiceState); HRESULT SetFrequencyRatio( [in] float Ratio, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetFrequencyRatio([out] float* pRatio); HRESULT SetSourceSampleRate([in] UINT32 NewSourceSampleRate); } [ local ] /* XAudio2 2.8's IXAudio2SourceVoice interface. */ interface IXAudio2SourceVoice : IXAudio2Voice { HRESULT Start( [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); HRESULT Stop( [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); HRESULT SubmitSourceBuffer( [in] const XAUDIO2_BUFFER* pBuffer, [in, defaultvalue(NULL)] const XAUDIO2_BUFFER_WMA* pBufferWMA); HRESULT FlushSourceBuffers(); HRESULT Discontinuity(); HRESULT ExitLoop([in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetState([out] XAUDIO2_VOICE_STATE* pVoiceState, [in, defaultvalue(0)] UINT32 Flags); HRESULT SetFrequencyRatio( [in] float Ratio, [in, defaultvalue(XAUDIO2_COMMIT_NOW)] UINT32 OperationSet); void GetFrequencyRatio([out] float* pRatio); HRESULT SetSourceSampleRate([in] UINT32 NewSourceSampleRate); } [ local ] /* XAudio2 2.0's IXAudio2SubmixVoice interface. Actually called * IXAudio2SubmixVoice in the Mar 2008 DX SDK */ interface IXAudio20SubmixVoice : IXAudio20Voice { } [ local ] /* XAudio2 2.3's IXAudio2SubmixVoice interface. Actually called * IXAudio2SubmixVoice in the Nov 2008 DX SDK */ interface IXAudio23SubmixVoice : IXAudio23Voice { } [ local ] /* XAudio2 2.7's IXAudio2SubmixVoice interface. Actually called * IXAudio2SubmixVoice in the Jun 2010 DX SDK */ interface IXAudio27SubmixVoice : IXAudio27Voice { } [ local ] interface IXAudio2SubmixVoice : IXAudio2Voice { } [ local ] /* XAudio2 2.0's IXAudio2MasteringVoice interface. Actually called * IXAudio2MasteringVoice in the Mar 2008 DX SDK */ interface IXAudio20MasteringVoice : IXAudio20Voice { } [ local ] /* XAudio2 2.3's IXAudio2MasteringVoice interface. Actually called * IXAudio2MasteringVoice in the Nov 2008 DX SDK */ interface IXAudio23MasteringVoice : IXAudio23Voice { } [ local ] /* XAudio2 2.7's IXAudio2MasteringVoice interface. Actually called * IXAudio2MasteringVoice in the Jun 2010 DX SDK */ interface IXAudio27MasteringVoice : IXAudio27Voice { } [ local ] interface IXAudio2MasteringVoice : IXAudio2Voice { /* not present in XAudio2 2.7 */ void GetChannelMask([out] DWORD *pChannelMask); } [ object, local ] interface IXAudio20VoiceCallback { void OnVoiceProcessingPassStart(); void OnVoiceProcessingPassEnd(); void OnStreamEnd(); void OnBufferStart([in] void* pBufferContext); void OnBufferEnd([in] void* pBufferContext); void OnLoopEnd([in] void* pBufferContext); void OnVoiceError( [in] void* pBuffercontext, [in] HRESULT Error); } [ object, local ] interface IXAudio2VoiceCallback { void OnVoiceProcessingPassStart([in] UINT32 BytesRequired); void OnVoiceProcessingPassEnd(); void OnStreamEnd(); void OnBufferStart([in] void* pBufferContext); void OnBufferEnd([in] void* pBufferContext); void OnLoopEnd([in] void* pBufferContext); void OnVoiceError( [in] void* pBuffercontext, [in] HRESULT Error); } typedef struct XAUDIO2_DEBUG_CONFIGURATION { UINT32 TraceMask; UINT32 BreakMask; BOOL LogThreadID; BOOL LogFileline; BOOL LogFunctionName; BOOL LogTiming; } XAUDIO2_DEBUG_CONFIGURATION; [ object, uuid(8bcf1f58-9fe7-4583-8ac6-e2adc465c8bb), /* all versions before 28 share IID_IXAudio */ ] /* XAudio2 2.0's IXAudio2 interface. Actually called IXAudio2 in the Mar 2008 * DX SDK */ interface IXAudio20 : IUnknown { HRESULT GetDeviceCount([out] UINT32* pCount); HRESULT GetDeviceDetails( [in] UINT32 Index, [out] XAUDIO2_DEVICE_DETAILS* pDeviceDetails); HRESULT Initialize( [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(XAUDIO2_DEFAULT_PROCESSOR)] XAUDIO2_PROCESSOR XAudio2Processor); HRESULT RegisterForCallbacks([in] IXAudio2EngineCallback* pCallback); void UnregisterForCallbacks([in] IXAudio2EngineCallback* pCallback); HRESULT CreateSourceVoice( [out] IXAudio2SourceVoice** ppSourceVoice, [in] const WAVEFORMATEX* pSourceFormat, [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(XAUDIO2_DEFAULT_FREQ_RATIO)] float MaxFrequencyRatio, [in, defaultvalue(NULL)] IXAudio2VoiceCallback* pCallback, [in, defaultvalue(NULL)] const XAUDIO23_VOICE_SENDS* pSendList, [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); HRESULT CreateSubmixVoice( [out] IXAudio2SubmixVoice** ppSubmixVoice, [in] UINT32 InputChannels, [in] UINT32 InputSampleRate, [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(0)] UINT32 ProcessingStage, [in, defaultvalue(NULL)] const XAUDIO23_VOICE_SENDS* pSendList, [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); HRESULT CreateMasteringVoice( [out] IXAudio2MasteringVoice** ppMasteringVoice, [in, defaultvalue(XAUDIO2_DEFAULT_CHANNELS)] UINT32 InputChannels, [in, defaultvalue(XAUDIO2_DEFAULT_SAMPLERATE)] UINT32 InputSampleRate, [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(0)] UINT32 DeviceIndex, [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); HRESULT StartEngine(); void StopEngine(); HRESULT CommitChanges([in] UINT32 OperationSet); void GetPerformanceData([out] XAUDIO20_PERFORMANCE_DATA* pPerfData); [local] void SetDebugConfiguration( [in] const XAUDIO2_DEBUG_CONFIGURATION* pDebugConfiguration, [in, defaultvalue(NULL)] void* pReserved); } [ object, uuid(8bcf1f58-9fe7-4583-8ac6-e2adc465c8bb), /* all versions before 28 share IID_IXAudio */ ] /* XAudio2 2.2's IXAudio2 interface. Actually called IXAudio2 in the Jun 2010 * DX SDK */ interface IXAudio22 : IUnknown { HRESULT GetDeviceCount([out] UINT32* pCount); HRESULT GetDeviceDetails( [in] UINT32 Index, [out] XAUDIO2_DEVICE_DETAILS* pDeviceDetails); HRESULT Initialize( [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(XAUDIO2_DEFAULT_PROCESSOR)] XAUDIO2_PROCESSOR XAudio2Processor); HRESULT RegisterForCallbacks([in] IXAudio2EngineCallback* pCallback); void UnregisterForCallbacks([in] IXAudio2EngineCallback* pCallback); HRESULT CreateSourceVoice( [out] IXAudio2SourceVoice** ppSourceVoice, [in] const WAVEFORMATEX* pSourceFormat, [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(XAUDIO2_DEFAULT_FREQ_RATIO)] float MaxFrequencyRatio, [in, defaultvalue(NULL)] IXAudio2VoiceCallback* pCallback, [in, defaultvalue(NULL)] const XAUDIO23_VOICE_SENDS* pSendList, [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); HRESULT CreateSubmixVoice( [out] IXAudio2SubmixVoice** ppSubmixVoice, [in] UINT32 InputChannels, [in] UINT32 InputSampleRate, [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(0)] UINT32 ProcessingStage, [in, defaultvalue(NULL)] const XAUDIO23_VOICE_SENDS* pSendList, [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); HRESULT CreateMasteringVoice( [out] IXAudio2MasteringVoice** ppMasteringVoice, [in, defaultvalue(XAUDIO2_DEFAULT_CHANNELS)] UINT32 InputChannels, [in, defaultvalue(XAUDIO2_DEFAULT_SAMPLERATE)] UINT32 InputSampleRate, [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(0)] UINT32 DeviceIndex, [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); HRESULT StartEngine(); void StopEngine(); HRESULT CommitChanges([in] UINT32 OperationSet); void GetPerformanceData([out] XAUDIO22_PERFORMANCE_DATA* pPerfData); [local] void SetDebugConfiguration( [in] const XAUDIO2_DEBUG_CONFIGURATION* pDebugConfiguration, [in, defaultvalue(NULL)] void* pReserved); } [ object, uuid(8bcf1f58-9fe7-4583-8ac6-e2adc465c8bb), /* all versions before 28 share IID_IXAudio */ ] /* XAudio2 2.3's IXAudio2 interface. Actually called IXAudio2 in the Nov 2008 * DX SDK */ interface IXAudio23 : IUnknown { HRESULT GetDeviceCount([out] UINT32* pCount); HRESULT GetDeviceDetails( [in] UINT32 Index, [out] XAUDIO2_DEVICE_DETAILS* pDeviceDetails); HRESULT Initialize( [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(XAUDIO2_DEFAULT_PROCESSOR)] XAUDIO2_PROCESSOR XAudio2Processor); HRESULT RegisterForCallbacks([in] IXAudio2EngineCallback* pCallback); void UnregisterForCallbacks([in] IXAudio2EngineCallback* pCallback); HRESULT CreateSourceVoice( [out] IXAudio2SourceVoice** ppSourceVoice, [in] const WAVEFORMATEX* pSourceFormat, [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(XAUDIO2_DEFAULT_FREQ_RATIO)] float MaxFrequencyRatio, [in, defaultvalue(NULL)] IXAudio2VoiceCallback* pCallback, [in, defaultvalue(NULL)] const XAUDIO23_VOICE_SENDS* pSendList, [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); HRESULT CreateSubmixVoice( [out] IXAudio2SubmixVoice** ppSubmixVoice, [in] UINT32 InputChannels, [in] UINT32 InputSampleRate, [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(0)] UINT32 ProcessingStage, [in, defaultvalue(NULL)] const XAUDIO23_VOICE_SENDS* pSendList, [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); HRESULT CreateMasteringVoice( [out] IXAudio2MasteringVoice** ppMasteringVoice, [in, defaultvalue(XAUDIO2_DEFAULT_CHANNELS)] UINT32 InputChannels, [in, defaultvalue(XAUDIO2_DEFAULT_SAMPLERATE)] UINT32 InputSampleRate, [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(0)] UINT32 DeviceIndex, [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); HRESULT StartEngine(); void StopEngine(); HRESULT CommitChanges([in] UINT32 OperationSet); void GetPerformanceData([out] XAUDIO2_PERFORMANCE_DATA* pPerfData); [local] void SetDebugConfiguration( [in] const XAUDIO2_DEBUG_CONFIGURATION* pDebugConfiguration, [in, defaultvalue(NULL)] void* pReserved); } [ object, uuid(8bcf1f58-9fe7-4583-8ac6-e2adc465c8bb), ] /* XAudio2 2.7's IXAudio2 interface. Actually called IXAudio2 in the Jun 2010 * DX SDK */ interface IXAudio27 : IUnknown { HRESULT GetDeviceCount([out] UINT32* pCount); HRESULT GetDeviceDetails( [in] UINT32 Index, [out] XAUDIO2_DEVICE_DETAILS* pDeviceDetails); HRESULT Initialize( [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(XAUDIO2_DEFAULT_PROCESSOR)] XAUDIO2_PROCESSOR XAudio2Processor); HRESULT RegisterForCallbacks([in] IXAudio2EngineCallback* pCallback); void UnregisterForCallbacks([in] IXAudio2EngineCallback* pCallback); HRESULT CreateSourceVoice( [out] IXAudio2SourceVoice** ppSourceVoice, [in] const WAVEFORMATEX* pSourceFormat, [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(XAUDIO2_DEFAULT_FREQ_RATIO)] float MaxFrequencyRatio, [in, defaultvalue(NULL)] IXAudio2VoiceCallback* pCallback, [in, defaultvalue(NULL)] const XAUDIO2_VOICE_SENDS* pSendList, [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); HRESULT CreateSubmixVoice( [out] IXAudio2SubmixVoice** ppSubmixVoice, [in] UINT32 InputChannels, [in] UINT32 InputSampleRate, [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(0)] UINT32 ProcessingStage, [in, defaultvalue(NULL)] const XAUDIO2_VOICE_SENDS* pSendList, [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); HRESULT CreateMasteringVoice( [out] IXAudio2MasteringVoice** ppMasteringVoice, [in, defaultvalue(XAUDIO2_DEFAULT_CHANNELS)] UINT32 InputChannels, [in, defaultvalue(XAUDIO2_DEFAULT_SAMPLERATE)] UINT32 InputSampleRate, [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(0)] UINT32 DeviceIndex, [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); HRESULT StartEngine(); void StopEngine(); HRESULT CommitChanges([in] UINT32 OperationSet); void GetPerformanceData([out] XAUDIO2_PERFORMANCE_DATA* pPerfData); [local] void SetDebugConfiguration( [in] const XAUDIO2_DEBUG_CONFIGURATION* pDebugConfiguration, [in, defaultvalue(NULL)] void* pReserved); } /* XAudio2 2.8's IXAudio2 is identical to 2.9's */ cpp_quote("DEFINE_GUID(IID_IXAudio28, 0x60d8dac8, 0x5aa1, 0x4e8e, 0xb5, 0x97, 0x2f, 0x5e, 0x28, 0x83, 0xd4, 0x84);") [ object, uuid(2b02e3cf-2e0b-4ec3-be45-1b2a3fe7210d) ] /* XAudio2 2.9's IXAudio2 interface. */ interface IXAudio2 : IUnknown { HRESULT RegisterForCallbacks([in] IXAudio2EngineCallback* pCallback); void UnregisterForCallbacks([in] IXAudio2EngineCallback* pCallback); HRESULT CreateSourceVoice( [out] IXAudio2SourceVoice** ppSourceVoice, [in] const WAVEFORMATEX* pSourceFormat, [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(XAUDIO2_DEFAULT_FREQ_RATIO)] float MaxFrequencyRatio, [in, defaultvalue(NULL)] IXAudio2VoiceCallback* pCallback, [in, defaultvalue(NULL)] const XAUDIO2_VOICE_SENDS* pSendList, [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); HRESULT CreateSubmixVoice( [out] IXAudio2SubmixVoice** ppSubmixVoice, [in] UINT32 InputChannels, [in] UINT32 InputSampleRate, [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(0)] UINT32 ProcessingStage, [in, defaultvalue(NULL)] const XAUDIO2_VOICE_SENDS* pSendList, [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain); HRESULT CreateMasteringVoice( [out] IXAudio2MasteringVoice** ppMasteringVoice, [in, defaultvalue(XAUDIO2_DEFAULT_CHANNELS)] UINT32 InputChannels, [in, defaultvalue(XAUDIO2_DEFAULT_SAMPLERATE)] UINT32 InputSampleRate, [in, defaultvalue(0)] UINT32 Flags, [in, defaultvalue(NULL)] LPCWSTR DeviceId, [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain, [in, defaultvalue(AudioCategory_GameEffects)] AUDIO_STREAM_CATEGORY StreamCategory); HRESULT StartEngine(); void StopEngine(); HRESULT CommitChanges([in] UINT32 OperationSet); void GetPerformanceData([out] XAUDIO2_PERFORMANCE_DATA* pPerfData); [local] void SetDebugConfiguration( [in] const XAUDIO2_DEBUG_CONFIGURATION* pDebugConfiguration, [in, defaultvalue(NULL)] void* pReserved); } const UINT32 XAUDIO2_DEBUG_ENGINE = 1; const UINT32 XAUDIO2_VOICE_NOPITCH = 2; const UINT32 XAUDIO2_VOICE_NOSRC = 4; const UINT32 XAUDIO2_VOICE_USEFILTER = 8; const UINT32 XAUDIO2_VOICE_MUSIC = 16; const UINT32 XAUDIO2_PLAY_TAILS = 32; const UINT32 XAUDIO2_END_OF_STREAM = 64; const UINT32 XAUDIO2_SEND_USEFILTER = 128; const UINT32 XAUDIO2_VOICE_NOSAMPLESPLAYED = 256; const XAUDIO2_FILTER_TYPE XAUDIO2_DEFAULT_FILTER_TYPE = LowPassFilter; const float XAUDIO2_DEFAULT_FILTER_FREQUENCY = XAUDIO2_MAX_FILTER_FREQUENCY; const float XAUDIO2_DEFAULT_FILTER_ONEOVERQ = 1.0; const UINT32 XAUDIO2_QUANTUM_NUMERATOR = 1; const UINT32 XAUDIO2_QUANTUM_DENOMINATOR = 100; const float XAUDIO2_QUANTUM_MS = (1000.0 * XAUDIO2_QUANTUM_NUMERATOR / XAUDIO2_QUANTUM_DENOMINATOR); const HRESULT XAUDIO2_E_INVALID_CALL = 0x88960001; const HRESULT XAUDIO2_E_XMA_DECODER_ERROR = 0x88960002; const HRESULT XAUDIO2_E_XAPO_CREATION_FAILED = 0x88960003; const HRESULT XAUDIO2_E_DEVICE_INVALIDATED = 0x88960004; /* xaudio 2.0 error codes */ const HRESULT XAUDIO20_E_XMA_DECODER_ERROR = 0x88960001; const HRESULT XAUDIO20_E_XAPO_CREATION_FAILED = 0x88960002; const HRESULT XAUDIO20_E_DEVICE_INVALIDATED = 0x88960003; cpp_quote("#ifdef XAUDIO2_HELPER_FUNCTIONS") cpp_quote("#define _USE_MATH_DEFINES") cpp_quote("#include <math.h>") cpp_quote("inline static float XAudio2DecibelsToAmplitudeRatio(float decibels) { return powf(10.0f, decibels/20.0f); }") cpp_quote("inline static float XAudio2AmplitudeRatioToDecibels(float volume) { if (volume == 0) { return -3.402823466e+38f; } return 20.0f * log10f(volume); }") cpp_quote("inline static float XAudio2SemitonesToFrequencyRatio(float semitones) { return powf(2.0f, semitones/12.0f); }") cpp_quote("inline static float XAudio2FrequencyRatioToSemitones(float freqratio) { return 39.86313713864835f * log10f(freqratio); }") cpp_quote("inline static float XAudio2CutoffFrequencyToRadians(float cutofffreq, UINT32 samplerate) { if ((UINT32)(cutofffreq * 6.0f) >= samplerate) { return XAUDIO2_MAX_FILTER_FREQUENCY; } return 2.0f * sinf((float)M_PI * cutofffreq / samplerate); }") cpp_quote("inline static float XAudio2RadiansToCutoffFrequency(float radians, float samplerate) { return samplerate * asinf(radians/2.0f) / (float)M_PI; }") cpp_quote("#endif") cpp_quote("HRESULT WINAPI XAudio2Create(IXAudio2** pxaudio2, UINT32 flags, XAUDIO2_PROCESSOR processor);") cpp_quote("#include <poppack.h>")