From d1e582864405ae689814ee455324c6142f6e0a84 Mon Sep 17 00:00:00 2001 From: Ani Date: Sun, 28 Aug 2022 18:17:00 +0100 Subject: [PATCH] XAudio2: Update from 1.2.8 to 1.2.9 --- .../XAudio2Redist/include/xaudio2redist.h | 2551 +++++++++-------- .../XAudio2Redist/libs/xaudio2_9redist.lib | Bin 2980 -> 2980 bytes bin/xaudio2_9redist.dll | Bin 969104 -> 969120 bytes 3 files changed, 1276 insertions(+), 1275 deletions(-) diff --git a/3rdparty/XAudio2Redist/include/xaudio2redist.h b/3rdparty/XAudio2Redist/include/xaudio2redist.h index c27a9218a6..fd10847c99 100644 --- a/3rdparty/XAudio2Redist/include/xaudio2redist.h +++ b/3rdparty/XAudio2Redist/include/xaudio2redist.h @@ -1,1275 +1,1276 @@ -/************************************************************************** - * - * Copyright (c) Microsoft Corporation. All rights reserved. - * - * File: xaudio2.h - * Content: Declarations for the XAudio2 game audio API. - * - **************************************************************************/ - -#ifdef _MSC_VER -#pragma once -#endif - -#ifndef __XAUDIO2_INCLUDED__ -#define __XAUDIO2_INCLUDED__ - -#include - -// Current name of the DLL shipped in the same SDK as this header. -// The name reflects the current version -#define XAUDIO2_DLL_A "xaudio2_9redist.dll" -#define XAUDIO2_DLL_W L"xaudio2_9redist.dll" -#define XAUDIO2D_DLL_A "xaudio2_9redist.dll" -#define XAUDIO2D_DLL_W L"xaudio2_9redist.dll" - -#ifdef UNICODE - #define XAUDIO2_DLL XAUDIO2_DLL_W - #define XAUDIO2D_DLL XAUDIO2D_DLL_W -#else - #define XAUDIO2_DLL XAUDIO2_DLL_A - #define XAUDIO2D_DLL XAUDIO2D_DLL_A -#endif - - -/************************************************************************** - * - * XAudio2 COM object class and interface IDs. - * - **************************************************************************/ - -#include - -#ifdef __cplusplus - // XAudio 2.9 - interface __declspec(uuid("2B02E3CF-2E0B-4ec3-BE45-1B2A3FE7210D")) IXAudio2; - interface __declspec(uuid("84ac29bb-d619-44d2-b197-e4acf7df3ed6")) IXAudio2Extension; - EXTERN_C const GUID DECLSPEC_SELECTANY IID_IXAudio2Extension = __uuidof(IXAudio2Extension); - EXTERN_C const GUID DECLSPEC_SELECTANY IID_IXAudio2 = __uuidof(IXAudio2); - -#else // #ifdef __cplusplus - // Compiling with C for Windows 10 and later - DEFINE_GUID(IID_IXAudio2, 0x2B02E3CF, 0x2E0B, 0x4ec3, 0xBE, 0x45, 0x1B, 0x2A, 0x3F, 0xE7, 0x21, 0x0D); - DEFINE_GUID(IID_IXAudio2Extension, 0x84ac29bb, 0xd619, 0x44d2, 0xb1, 0x97, 0xe4, 0xac, 0xf7, 0xdf, 0x3e, 0xd6); -#endif // #ifdef __cplusplus - - -// Ignore the rest of this header if only the GUID definitions were requested -#ifndef GUID_DEFS_ONLY - -#include // Windows COM declarations -#include // Markers for documenting API semantics -#include // Basic data types and constants for audio work -#include // For AUDIO_STREAM_CATEGORY - -// The Windows 7 version of audiosessiontypes.h does not define AUDIO_STREAM_CATEGORY, so if we are targeting -// Windows 7 we might have to define it here, depending on which SDK is used. -#if _WIN32_WINNT < _WIN32_WINNT_WIN8 - -// If we are compiling for Windows 7, we might be using the Windows 7 Platform SDK, which does not have AUDIO_STREAM_CATEGORY. -// But we might be using a newer SDK (such as the Win8 Platform SDK), which has AUDIO_STREAM_CATEGORY. -// Determine if we are using the Windows 7 Platform SDK by checking if WAVE_FORMAT_WM9_SPECTRUM_ANALYZER is defined. -#ifndef WAVE_FORMAT_WM9_SPECTRUM_ANALYZER -typedef enum _AUDIO_STREAM_CATEGORY -{ - AudioCategory_Other = 0, - AudioCategory_ForegroundOnlyMedia = 1, - AudioCategory_Communications = 3, - AudioCategory_Alerts = 4, - AudioCategory_SoundEffects = 5, - AudioCategory_GameEffects = 6, - AudioCategory_GameMedia = 7, - AudioCategory_GameChat = 8, - AudioCategory_Speech = 9, - AudioCategory_Movie = 10, - AudioCategory_Media = 11, -} AUDIO_STREAM_CATEGORY; -#endif /* WAVE_FORMAT_WM9_SPECTRUM_ANALYZER */ -#endif /* NTDDI_VERSION < NTDDI_WIN8 */ - -// All structures defined in this file use tight field packing -#pragma pack(push, 1) - - -/************************************************************************** - * - * XAudio2 constants, flags and error codes. - * - **************************************************************************/ - -// Numeric boundary values -#define XAUDIO2_MAX_BUFFER_BYTES 0x80000000 // Maximum bytes allowed in a source buffer -#define XAUDIO2_MAX_QUEUED_BUFFERS 64 // Maximum buffers allowed in a voice queue -#define XAUDIO2_MAX_BUFFERS_SYSTEM 2 // Maximum buffers allowed for system threads (Xbox 360 only) -#define XAUDIO2_MAX_AUDIO_CHANNELS 64 // Maximum channels in an audio stream -#define XAUDIO2_MIN_SAMPLE_RATE 1000 // Minimum audio sample rate supported -#define XAUDIO2_MAX_SAMPLE_RATE 200000 // Maximum audio sample rate supported -#define XAUDIO2_MAX_VOLUME_LEVEL 16777216.0f // Maximum acceptable volume level (2^24) -#define XAUDIO2_MIN_FREQ_RATIO (1/1024.0f) // Minimum SetFrequencyRatio argument -#define XAUDIO2_MAX_FREQ_RATIO 1024.0f // Maximum MaxFrequencyRatio argument -#define XAUDIO2_DEFAULT_FREQ_RATIO 2.0f // Default MaxFrequencyRatio argument -#define XAUDIO2_MAX_FILTER_ONEOVERQ 1.5f // Maximum XAUDIO2_FILTER_PARAMETERS.OneOverQ -#define XAUDIO2_MAX_FILTER_FREQUENCY 1.0f // Maximum XAUDIO2_FILTER_PARAMETERS.Frequency -#define XAUDIO2_MAX_LOOP_COUNT 254 // Maximum non-infinite XAUDIO2_BUFFER.LoopCount -#define XAUDIO2_MAX_INSTANCES 8 // Maximum simultaneous XAudio2 objects on Xbox 360 - -// For XMA voices on Xbox 360 there is an additional restriction on the MaxFrequencyRatio -// argument and the voice's sample rate: the product of these numbers cannot exceed 600000 -// for one-channel voices or 300000 for voices with more than one channel. -#define XAUDIO2_MAX_RATIO_TIMES_RATE_XMA_MONO 600000 -#define XAUDIO2_MAX_RATIO_TIMES_RATE_XMA_MULTICHANNEL 300000 - -// Numeric values with special meanings -#define XAUDIO2_COMMIT_NOW 0 // Used as an OperationSet argument -#define XAUDIO2_COMMIT_ALL 0 // Used in IXAudio2::CommitChanges -#define XAUDIO2_INVALID_OPSET (UINT32)(-1) // Not allowed for OperationSet arguments -#define XAUDIO2_NO_LOOP_REGION 0 // Used in XAUDIO2_BUFFER.LoopCount -#define XAUDIO2_LOOP_INFINITE 255 // Used in XAUDIO2_BUFFER.LoopCount -#define XAUDIO2_DEFAULT_CHANNELS 0 // Used in CreateMasteringVoice -#define XAUDIO2_DEFAULT_SAMPLERATE 0 // Used in CreateMasteringVoice - -// Flags -#define XAUDIO2_DEBUG_ENGINE 0x0001 // Used in XAudio2Create -#define XAUDIO2_VOICE_NOPITCH 0x0002 // Used in IXAudio2::CreateSourceVoice -#define XAUDIO2_VOICE_NOSRC 0x0004 // Used in IXAudio2::CreateSourceVoice -#define XAUDIO2_VOICE_USEFILTER 0x0008 // Used in IXAudio2::CreateSource/SubmixVoice -#define XAUDIO2_PLAY_TAILS 0x0020 // Used in IXAudio2SourceVoice::Stop -#define XAUDIO2_END_OF_STREAM 0x0040 // Used in XAUDIO2_BUFFER.Flags -#define XAUDIO2_SEND_USEFILTER 0x0080 // Used in XAUDIO2_SEND_DESCRIPTOR.Flags -#define XAUDIO2_VOICE_NOSAMPLESPLAYED 0x0100 // Used in IXAudio2SourceVoice::GetState -#define XAUDIO2_STOP_ENGINE_WHEN_IDLE 0x2000 // Used in XAudio2Create to force the engine to Stop when no source voices are Started, and Start when a voice is Started -#define XAUDIO2_1024_QUANTUM 0x8000 // Used in XAudio2Create to specify nondefault processing quantum of 21.33 ms (1024 samples at 48KHz) -#define XAUDIO2_NO_VIRTUAL_AUDIO_CLIENT 0x10000 // Used in CreateMasteringVoice to create a virtual audio client - -// Default parameters for the built-in filter -#define XAUDIO2_DEFAULT_FILTER_TYPE LowPassFilter -#define XAUDIO2_DEFAULT_FILTER_FREQUENCY XAUDIO2_MAX_FILTER_FREQUENCY -#define XAUDIO2_DEFAULT_FILTER_ONEOVERQ 1.0f - -// Internal XAudio2 constants -// The audio frame quantum can be calculated by reducing the fraction: -// SamplesPerAudioFrame / SamplesPerSecond -#define XAUDIO2_QUANTUM_NUMERATOR 1 // On Windows, XAudio2 processes audio -#define XAUDIO2_QUANTUM_DENOMINATOR 100 // in 10ms chunks (= 1/100 seconds) -#define XAUDIO2_QUANTUM_MS (1000.0f * XAUDIO2_QUANTUM_NUMERATOR / XAUDIO2_QUANTUM_DENOMINATOR) - -// XAudio2 error codes -#define FACILITY_XAUDIO2 0x896 -#define XAUDIO2_E_INVALID_CALL ((HRESULT)0x88960001) // An API call or one of its arguments was illegal -#define XAUDIO2_E_XMA_DECODER_ERROR ((HRESULT)0x88960002) // The XMA hardware suffered an unrecoverable error -#define XAUDIO2_E_XAPO_CREATION_FAILED ((HRESULT)0x88960003) // XAudio2 failed to initialize an XAPO effect -#define XAUDIO2_E_DEVICE_INVALIDATED ((HRESULT)0x88960004) // An audio device became unusable (unplugged, etc) - -/************************************************************************** - * - * Forward declarations for the XAudio2 interfaces. - * - **************************************************************************/ - -#ifdef __cplusplus - #define FWD_DECLARE(x) interface x -#else - #define FWD_DECLARE(x) typedef interface x x -#endif - -FWD_DECLARE(IXAudio2); -FWD_DECLARE(IXAudio2Voice); -FWD_DECLARE(IXAudio2SourceVoice); -FWD_DECLARE(IXAudio2SubmixVoice); -FWD_DECLARE(IXAudio2MasteringVoice); -FWD_DECLARE(IXAudio2EngineCallback); -FWD_DECLARE(IXAudio2VoiceCallback); - - -/************************************************************************** - * - * XAudio2 structures and enumerations. - * - **************************************************************************/ - -// Used in XAudio2Create, specifies which CPU(s) to use. -typedef UINT32 XAUDIO2_PROCESSOR; -#define Processor1 0x00000001 -#define Processor2 0x00000002 -#define Processor3 0x00000004 -#define Processor4 0x00000008 -#define Processor5 0x00000010 -#define Processor6 0x00000020 -#define Processor7 0x00000040 -#define Processor8 0x00000080 -#define Processor9 0x00000100 -#define Processor10 0x00000200 -#define Processor11 0x00000400 -#define Processor12 0x00000800 -#define Processor13 0x00001000 -#define Processor14 0x00002000 -#define Processor15 0x00004000 -#define Processor16 0x00008000 -#define Processor17 0x00010000 -#define Processor18 0x00020000 -#define Processor19 0x00040000 -#define Processor20 0x00080000 -#define Processor21 0x00100000 -#define Processor22 0x00200000 -#define Processor23 0x00400000 -#define Processor24 0x00800000 -#define Processor25 0x01000000 -#define Processor26 0x02000000 -#define Processor27 0x04000000 -#define Processor28 0x08000000 -#define Processor29 0x10000000 -#define Processor30 0x20000000 -#define Processor31 0x40000000 -#define Processor32 0x80000000 -#define XAUDIO2_ANY_PROCESSOR 0xffffffff - -// This value indicates that XAudio2 will choose the default processor by itself. The actual value chosen -// may vary depending on the hardware platform. -#define XAUDIO2_USE_DEFAULT_PROCESSOR 0x00000000 - -// This definition is included for backwards compatibilty. New implementations should use -// XAUDIO2_USE_DEFAULT_PROCESSOR instead to let XAudio2 select the appropriate default processor for the hardware platform. -#define XAUDIO2_DEFAULT_PROCESSOR Processor1 - -// Returned by IXAudio2Voice::GetVoiceDetails -typedef struct XAUDIO2_VOICE_DETAILS -{ - UINT32 CreationFlags; // Flags the voice was created with. - UINT32 ActiveFlags; // Flags currently active. - UINT32 InputChannels; // Channels in the voice's input audio. - UINT32 InputSampleRate; // Sample rate of the voice's input audio. -} XAUDIO2_VOICE_DETAILS; - -// Used in XAUDIO2_VOICE_SENDS below -typedef struct XAUDIO2_SEND_DESCRIPTOR -{ - UINT32 Flags; // Either 0 or XAUDIO2_SEND_USEFILTER. - IXAudio2Voice* pOutputVoice; // This send's destination voice. -} XAUDIO2_SEND_DESCRIPTOR; - -// Used in the voice creation functions and in IXAudio2Voice::SetOutputVoices -typedef struct XAUDIO2_VOICE_SENDS -{ - UINT32 SendCount; // Number of sends from this voice. - XAUDIO2_SEND_DESCRIPTOR* pSends; // Array of SendCount send descriptors. -} XAUDIO2_VOICE_SENDS; - -// Used in XAUDIO2_EFFECT_CHAIN below -typedef struct XAUDIO2_EFFECT_DESCRIPTOR -{ - IUnknown* pEffect; // Pointer to the effect object's IUnknown interface. - BOOL InitialState; // TRUE if the effect should begin in the enabled state. - UINT32 OutputChannels; // How many output channels the effect should produce. -} XAUDIO2_EFFECT_DESCRIPTOR; - -// Used in the voice creation functions and in IXAudio2Voice::SetEffectChain -typedef struct XAUDIO2_EFFECT_CHAIN -{ - UINT32 EffectCount; // Number of effects in this voice's effect chain. - XAUDIO2_EFFECT_DESCRIPTOR* pEffectDescriptors; // Array of effect descriptors. -} XAUDIO2_EFFECT_CHAIN; - -// Used in XAUDIO2_FILTER_PARAMETERS below -typedef enum XAUDIO2_FILTER_TYPE -{ - LowPassFilter, // Attenuates frequencies above the cutoff frequency (state-variable filter). - BandPassFilter, // Attenuates frequencies outside a given range (state-variable filter). - HighPassFilter, // Attenuates frequencies below the cutoff frequency (state-variable filter). - NotchFilter, // Attenuates frequencies inside a given range (state-variable filter). - LowPassOnePoleFilter, // Attenuates frequencies above the cutoff frequency (one-pole filter, XAUDIO2_FILTER_PARAMETERS.OneOverQ has no effect) - HighPassOnePoleFilter // Attenuates frequencies below the cutoff frequency (one-pole filter, XAUDIO2_FILTER_PARAMETERS.OneOverQ has no effect) -} XAUDIO2_FILTER_TYPE; - -// Used in IXAudio2Voice::Set/GetFilterParameters and Set/GetOutputFilterParameters -typedef struct XAUDIO2_FILTER_PARAMETERS -{ - XAUDIO2_FILTER_TYPE Type; // Filter type. - float Frequency; // Filter coefficient. - // must be >= 0 and <= XAUDIO2_MAX_FILTER_FREQUENCY - // See XAudio2CutoffFrequencyToRadians() for state-variable filter types and - // XAudio2CutoffFrequencyToOnePoleCoefficient() for one-pole filter types. - float OneOverQ; // Reciprocal of the filter's quality factor Q; - // must be > 0 and <= XAUDIO2_MAX_FILTER_ONEOVERQ. - // Has no effect for one-pole filters. -} XAUDIO2_FILTER_PARAMETERS; - -// Used in IXAudio2SourceVoice::SubmitSourceBuffer -typedef struct XAUDIO2_BUFFER -{ - UINT32 Flags; // Either 0 or XAUDIO2_END_OF_STREAM. - UINT32 AudioBytes; // Size of the audio data buffer in bytes. - const BYTE* pAudioData; // Pointer to the audio data buffer. - UINT32 PlayBegin; // First sample in this buffer to be played. - UINT32 PlayLength; // Length of the region to be played in samples, - // or 0 to play the whole buffer. - UINT32 LoopBegin; // First sample of the region to be looped. - UINT32 LoopLength; // Length of the desired loop region in samples, - // or 0 to loop the entire buffer. - UINT32 LoopCount; // Number of times to repeat the loop region, - // or XAUDIO2_LOOP_INFINITE to loop forever. - void* pContext; // Context value to be passed back in callbacks. -} XAUDIO2_BUFFER; - -// Used in IXAudio2SourceVoice::SubmitSourceBuffer when submitting XWMA data. -// NOTE: If an XWMA sound is submitted in more than one buffer, each buffer's -// pDecodedPacketCumulativeBytes[PacketCount-1] value must be subtracted from -// all the entries in the next buffer's pDecodedPacketCumulativeBytes array. -// And whether a sound is submitted in more than one buffer or not, the final -// buffer of the sound should use the XAUDIO2_END_OF_STREAM flag, or else the -// client must call IXAudio2SourceVoice::Discontinuity after submitting it. -typedef struct XAUDIO2_BUFFER_WMA -{ - const UINT32* pDecodedPacketCumulativeBytes; // Decoded packet's cumulative size array. - // Each element is the number of bytes accumulated - // when the corresponding XWMA packet is decoded in - // order. The array must have PacketCount elements. - UINT32 PacketCount; // Number of XWMA packets submitted. Must be >= 1 and - // divide evenly into XAUDIO2_BUFFER.AudioBytes. -} XAUDIO2_BUFFER_WMA; - -// Returned by IXAudio2SourceVoice::GetState -typedef struct XAUDIO2_VOICE_STATE -{ - void* pCurrentBufferContext; // The pContext value provided in the XAUDIO2_BUFFER - // that is currently being processed, or NULL if - // there are no buffers in the queue. - UINT32 BuffersQueued; // Number of buffers currently queued on the voice - // (including the one that is being processed). - UINT64 SamplesPlayed; // Total number of samples produced by the voice since - // it began processing the current audio stream. - // If XAUDIO2_VOICE_NOSAMPLESPLAYED is specified - // in the call to IXAudio2SourceVoice::GetState, - // this member will not be calculated, saving CPU. -} XAUDIO2_VOICE_STATE; - -// Returned by IXAudio2::GetPerformanceData -typedef struct XAUDIO2_PERFORMANCE_DATA -{ - // CPU usage information - UINT64 AudioCyclesSinceLastQuery; // CPU cycles spent on audio processing since the - // last call to StartEngine or GetPerformanceData. - UINT64 TotalCyclesSinceLastQuery; // Total CPU cycles elapsed since the last call - // (only counts the CPU XAudio2 is running on). - UINT32 MinimumCyclesPerQuantum; // Fewest CPU cycles spent processing any one - // audio quantum since the last call. - UINT32 MaximumCyclesPerQuantum; // Most CPU cycles spent processing any one - // audio quantum since the last call. - - // Memory usage information - UINT32 MemoryUsageInBytes; // Total heap space currently in use. - - // Audio latency and glitching information - UINT32 CurrentLatencyInSamples; // Minimum delay from when a sample is read from a - // source buffer to when it reaches the speakers. - UINT32 GlitchesSinceEngineStarted; // Audio dropouts since the engine was started. - - // Data about XAudio2's current workload - UINT32 ActiveSourceVoiceCount; // Source voices currently playing. - UINT32 TotalSourceVoiceCount; // Source voices currently existing. - UINT32 ActiveSubmixVoiceCount; // Submix voices currently playing/existing. - - UINT32 ActiveResamplerCount; // Resample xAPOs currently active. - UINT32 ActiveMatrixMixCount; // MatrixMix xAPOs currently active. - - // Usage of the hardware XMA decoder (Xbox 360 only) - UINT32 ActiveXmaSourceVoices; // Number of source voices decoding XMA data. - UINT32 ActiveXmaStreams; // A voice can use more than one XMA stream. -} XAUDIO2_PERFORMANCE_DATA; - -// Used in IXAudio2::SetDebugConfiguration -typedef struct XAUDIO2_DEBUG_CONFIGURATION -{ - UINT32 TraceMask; // Bitmap of enabled debug message types. - UINT32 BreakMask; // Message types that will break into the debugger. - BOOL LogThreadID; // Whether to log the thread ID with each message. - BOOL LogFileline; // Whether to log the source file and line number. - BOOL LogFunctionName; // Whether to log the function name. - BOOL LogTiming; // Whether to log message timestamps. -} XAUDIO2_DEBUG_CONFIGURATION; - -// Values for the TraceMask and BreakMask bitmaps. Only ERRORS and WARNINGS -// are valid in BreakMask. WARNINGS implies ERRORS, DETAIL implies INFO, and -// FUNC_CALLS implies API_CALLS. By default, TraceMask is ERRORS and WARNINGS -// and all the other settings are zero. -#define XAUDIO2_LOG_ERRORS 0x0001 // For handled errors with serious effects. -#define XAUDIO2_LOG_WARNINGS 0x0002 // For handled errors that may be recoverable. -#define XAUDIO2_LOG_INFO 0x0004 // Informational chit-chat (e.g. state changes). -#define XAUDIO2_LOG_DETAIL 0x0008 // More detailed chit-chat. -#define XAUDIO2_LOG_API_CALLS 0x0010 // Public API function entries and exits. -#define XAUDIO2_LOG_FUNC_CALLS 0x0020 // Internal function entries and exits. -#define XAUDIO2_LOG_TIMING 0x0040 // Delays detected and other timing data. -#define XAUDIO2_LOG_LOCKS 0x0080 // Usage of critical sections and mutexes. -#define XAUDIO2_LOG_MEMORY 0x0100 // Memory heap usage information. -#define XAUDIO2_LOG_STREAMING 0x1000 // Audio streaming information. - - -/************************************************************************** - * - * IXAudio2: Top-level XAudio2 COM interface. - * - **************************************************************************/ - -// Use default arguments if compiling as C++ -#ifdef __cplusplus - #define X2DEFAULT(x) =x -#else - #define X2DEFAULT(x) -#endif - -#undef INTERFACE -#define INTERFACE IXAudio2 -DECLARE_INTERFACE_(IXAudio2, IUnknown) -{ - // NAME: IXAudio2::QueryInterface - // DESCRIPTION: Queries for a given COM interface on the XAudio2 object. - // Only IID_IUnknown, IID_IXAudio2 and IID_IXaudio2Extension are supported. - // - // ARGUMENTS: - // riid - IID of the interface to be obtained. - // ppvInterface - Returns a pointer to the requested interface. - // - STDMETHOD(QueryInterface) (THIS_ REFIID riid, _COM_Outptr_ void** ppvInterface) PURE; - - // NAME: IXAudio2::AddRef - // DESCRIPTION: Adds a reference to the XAudio2 object. - // - STDMETHOD_(ULONG, AddRef) (THIS) PURE; - - // NAME: IXAudio2::Release - // DESCRIPTION: Releases a reference to the XAudio2 object. - // - STDMETHOD_(ULONG, Release) (THIS) PURE; - - // NAME: IXAudio2::RegisterForCallbacks - // DESCRIPTION: Adds a new client to receive XAudio2's engine callbacks. - // - // ARGUMENTS: - // pCallback - Callback interface to be called during each processing pass. - // - STDMETHOD(RegisterForCallbacks) (THIS_ _In_ IXAudio2EngineCallback* pCallback) PURE; - - // NAME: IXAudio2::UnregisterForCallbacks - // DESCRIPTION: Removes an existing receiver of XAudio2 engine callbacks. - // - // ARGUMENTS: - // pCallback - Previously registered callback interface to be removed. - // - STDMETHOD_(void, UnregisterForCallbacks) (THIS_ _In_ IXAudio2EngineCallback* pCallback) PURE; - - // NAME: IXAudio2::CreateSourceVoice - // DESCRIPTION: Creates and configures a source voice. - // - // ARGUMENTS: - // ppSourceVoice - Returns the new object's IXAudio2SourceVoice interface. - // pSourceFormat - Format of the audio that will be fed to the voice. - // Flags - XAUDIO2_VOICE flags specifying the source voice's behavior. - // MaxFrequencyRatio - Maximum SetFrequencyRatio argument to be allowed. - // pCallback - Optional pointer to a client-provided callback interface. - // pSendList - Optional list of voices this voice should send audio to. - // pEffectChain - Optional list of effects to apply to the audio data. - // - STDMETHOD(CreateSourceVoice) (THIS_ _Outptr_ IXAudio2SourceVoice** ppSourceVoice, - _In_ const WAVEFORMATEX* pSourceFormat, - UINT32 Flags X2DEFAULT(0), - float MaxFrequencyRatio X2DEFAULT(XAUDIO2_DEFAULT_FREQ_RATIO), - _In_opt_ IXAudio2VoiceCallback* pCallback X2DEFAULT(NULL), - _In_opt_ const XAUDIO2_VOICE_SENDS* pSendList X2DEFAULT(NULL), - _In_opt_ const XAUDIO2_EFFECT_CHAIN* pEffectChain X2DEFAULT(NULL)) PURE; - - // NAME: IXAudio2::CreateSubmixVoice - // DESCRIPTION: Creates and configures a submix voice. - // - // ARGUMENTS: - // ppSubmixVoice - Returns the new object's IXAudio2SubmixVoice interface. - // InputChannels - Number of channels in this voice's input audio data. - // InputSampleRate - Sample rate of this voice's input audio data. - // Flags - XAUDIO2_VOICE flags specifying the submix voice's behavior. - // ProcessingStage - Arbitrary number that determines the processing order. - // pSendList - Optional list of voices this voice should send audio to. - // pEffectChain - Optional list of effects to apply to the audio data. - // - STDMETHOD(CreateSubmixVoice) (THIS_ _Outptr_ IXAudio2SubmixVoice** ppSubmixVoice, - UINT32 InputChannels, UINT32 InputSampleRate, - UINT32 Flags X2DEFAULT(0), UINT32 ProcessingStage X2DEFAULT(0), - _In_opt_ const XAUDIO2_VOICE_SENDS* pSendList X2DEFAULT(NULL), - _In_opt_ const XAUDIO2_EFFECT_CHAIN* pEffectChain X2DEFAULT(NULL)) PURE; - - - // NAME: IXAudio2::CreateMasteringVoice - // DESCRIPTION: Creates and configures a mastering voice. - // - // ARGUMENTS: - // ppMasteringVoice - Returns the new object's IXAudio2MasteringVoice interface. - // InputChannels - Number of channels in this voice's input audio data. - // InputSampleRate - Sample rate of this voice's input audio data. - // Flags - XAUDIO2_VOICE flags specifying the mastering voice's behavior. - // szDeviceId - Identifier of the device to receive the output audio. - // pEffectChain - Optional list of effects to apply to the audio data. - // StreamCategory - The audio stream category to use for this mastering voice - // - STDMETHOD(CreateMasteringVoice) (THIS_ _Outptr_ IXAudio2MasteringVoice** ppMasteringVoice, - UINT32 InputChannels X2DEFAULT(XAUDIO2_DEFAULT_CHANNELS), - UINT32 InputSampleRate X2DEFAULT(XAUDIO2_DEFAULT_SAMPLERATE), - UINT32 Flags X2DEFAULT(0), _In_opt_z_ LPCWSTR szDeviceId X2DEFAULT(NULL), - _In_opt_ const XAUDIO2_EFFECT_CHAIN* pEffectChain X2DEFAULT(NULL), - _In_ AUDIO_STREAM_CATEGORY StreamCategory X2DEFAULT(AudioCategory_GameEffects)) PURE; - - // NAME: IXAudio2::StartEngine - // DESCRIPTION: Creates and starts the audio processing thread. - // - STDMETHOD(StartEngine) (THIS) PURE; - - // NAME: IXAudio2::StopEngine - // DESCRIPTION: Stops and destroys the audio processing thread. - // - STDMETHOD_(void, StopEngine) (THIS) PURE; - - // NAME: IXAudio2::CommitChanges - // DESCRIPTION: Atomically applies a set of operations previously tagged - // with a given identifier. - // - // ARGUMENTS: - // OperationSet - Identifier of the set of operations to be applied. - // - STDMETHOD(CommitChanges) (THIS_ UINT32 OperationSet) PURE; - - // NAME: IXAudio2::GetPerformanceData - // DESCRIPTION: Returns current resource usage details: memory, CPU, etc. - // - // ARGUMENTS: - // pPerfData - Returns the performance data structure. - // - STDMETHOD_(void, GetPerformanceData) (THIS_ _Out_ XAUDIO2_PERFORMANCE_DATA* pPerfData) PURE; - - // NAME: IXAudio2::SetDebugConfiguration - // DESCRIPTION: Configures XAudio2's debug output (in debug builds only). - // - // ARGUMENTS: - // pDebugConfiguration - Structure describing the debug output behavior. - // pReserved - Optional parameter; must be NULL. - // - STDMETHOD_(void, SetDebugConfiguration) (THIS_ _In_opt_ const XAUDIO2_DEBUG_CONFIGURATION* pDebugConfiguration, - _Reserved_ void* pReserved X2DEFAULT(NULL)) PURE; -}; - -// This interface extends IXAudio2 with additional functionality. -// Use IXAudio2::QueryInterface to obtain a pointer to this interface. -#undef INTERFACE -#define INTERFACE IXAudio2Extension -DECLARE_INTERFACE_(IXAudio2Extension, IUnknown) -{ - // NAME: IXAudio2Extension::QueryInterface - // DESCRIPTION: Queries for a given COM interface on the XAudio2 object. - // Only IID_IUnknown, IID_IXAudio2 and IID_IXaudio2Extension are supported. - // - // ARGUMENTS: - // riid - IID of the interface to be obtained. - // ppvInterface - Returns a pointer to the requested interface. - // - STDMETHOD(QueryInterface) (THIS_ REFIID riid, _COM_Outptr_ void** ppvInterface) PURE; - - // NAME: IXAudio2Extension::AddRef - // DESCRIPTION: Adds a reference to the XAudio2 object. - // - STDMETHOD_(ULONG, AddRef) (THIS) PURE; - - // NAME: IXAudio2Extension::Release - // DESCRIPTION: Releases a reference to the XAudio2 object. - // - STDMETHOD_(ULONG, Release) (THIS) PURE; - - // NAME: IXAudio2Extension::GetProcessingQuantum - // DESCRIPTION: Returns the processing quantum - // quantumMilliseconds = (1000.0f * quantumNumerator / quantumDenominator) - // - // ARGUMENTS: - // quantumNumerator - Quantum numerator - // quantumDenominator - Quantum denominator - // - STDMETHOD_(void, GetProcessingQuantum)(THIS_ _Out_ UINT32* quantumNumerator, _Out_range_(!= , 0) UINT32* quantumDenominator); - - // NAME: IXAudio2Extension::GetProcessor - // DESCRIPTION: Returns the number of the processor used by XAudio2 - // - // ARGUMENTS: - // processor - Non-zero Processor number - // - STDMETHOD_(void, GetProcessor)(THIS_ _Out_range_(!= , 0) XAUDIO2_PROCESSOR* processor); -}; - -/************************************************************************** - * - * IXAudio2Voice: Base voice management interface. - * - **************************************************************************/ - -#undef INTERFACE -#define INTERFACE IXAudio2Voice -DECLARE_INTERFACE(IXAudio2Voice) -{ - // These methods are declared in a macro so that the same declarations - // can be used in the derived voice types (IXAudio2SourceVoice, etc). - - #define Declare_IXAudio2Voice_Methods() \ - \ - /* NAME: IXAudio2Voice::GetVoiceDetails - // DESCRIPTION: Returns the basic characteristics of this voice. - // - // ARGUMENTS: - // pVoiceDetails - Returns the voice's details. - */\ - STDMETHOD_(void, GetVoiceDetails) (THIS_ _Out_ XAUDIO2_VOICE_DETAILS* pVoiceDetails) PURE; \ - \ - /* NAME: IXAudio2Voice::SetOutputVoices - // DESCRIPTION: Replaces the set of submix/mastering voices that receive - // this voice's output. - // - // ARGUMENTS: - // pSendList - Optional list of voices this voice should send audio to. - */\ - STDMETHOD(SetOutputVoices) (THIS_ _In_opt_ const XAUDIO2_VOICE_SENDS* pSendList) PURE; \ - \ - /* NAME: IXAudio2Voice::SetEffectChain - // DESCRIPTION: Replaces this voice's current effect chain with a new one. - // - // ARGUMENTS: - // pEffectChain - Structure describing the new effect chain to be used. - */\ - STDMETHOD(SetEffectChain) (THIS_ _In_opt_ const XAUDIO2_EFFECT_CHAIN* pEffectChain) PURE; \ - \ - /* NAME: IXAudio2Voice::EnableEffect - // DESCRIPTION: Enables an effect in this voice's effect chain. - // - // ARGUMENTS: - // EffectIndex - Index of an effect within this voice's effect chain. - // OperationSet - Used to identify this call as part of a deferred batch. - */\ - STDMETHOD(EnableEffect) (THIS_ UINT32 EffectIndex, \ - UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ - \ - /* NAME: IXAudio2Voice::DisableEffect - // DESCRIPTION: Disables an effect in this voice's effect chain. - // - // ARGUMENTS: - // EffectIndex - Index of an effect within this voice's effect chain. - // OperationSet - Used to identify this call as part of a deferred batch. - */\ - STDMETHOD(DisableEffect) (THIS_ UINT32 EffectIndex, \ - UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ - \ - /* NAME: IXAudio2Voice::GetEffectState - // DESCRIPTION: Returns the running state of an effect. - // - // ARGUMENTS: - // EffectIndex - Index of an effect within this voice's effect chain. - // pEnabled - Returns the enabled/disabled state of the given effect. - */\ - STDMETHOD_(void, GetEffectState) (THIS_ UINT32 EffectIndex, _Out_ BOOL* pEnabled) PURE; \ - \ - /* NAME: IXAudio2Voice::SetEffectParameters - // DESCRIPTION: Sets effect-specific parameters. - // - // REMARKS: Unlike IXAPOParameters::SetParameters, this method may - // be called from any thread. XAudio2 implements - // appropriate synchronization to copy the parameters to the - // realtime audio processing thread. - // - // ARGUMENTS: - // EffectIndex - Index of an effect within this voice's effect chain. - // pParameters - Pointer to an effect-specific parameters block. - // ParametersByteSize - Size of the pParameters array in bytes. - // OperationSet - Used to identify this call as part of a deferred batch. - */\ - STDMETHOD(SetEffectParameters) (THIS_ UINT32 EffectIndex, \ - _In_reads_bytes_(ParametersByteSize) const void* pParameters, \ - UINT32 ParametersByteSize, \ - UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ - \ - /* NAME: IXAudio2Voice::GetEffectParameters - // DESCRIPTION: Obtains the current effect-specific parameters. - // - // ARGUMENTS: - // EffectIndex - Index of an effect within this voice's effect chain. - // pParameters - Returns the current values of the effect-specific parameters. - // ParametersByteSize - Size of the pParameters array in bytes. - */\ - STDMETHOD(GetEffectParameters) (THIS_ UINT32 EffectIndex, \ - _Out_writes_bytes_(ParametersByteSize) void* pParameters, \ - UINT32 ParametersByteSize) PURE; \ - \ - /* NAME: IXAudio2Voice::SetFilterParameters - // DESCRIPTION: Sets this voice's filter parameters. - // - // ARGUMENTS: - // pParameters - Pointer to the filter's parameter structure. - // OperationSet - Used to identify this call as part of a deferred batch. - */\ - STDMETHOD(SetFilterParameters) (THIS_ _In_ const XAUDIO2_FILTER_PARAMETERS* pParameters, \ - UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ - \ - /* NAME: IXAudio2Voice::GetFilterParameters - // DESCRIPTION: Returns this voice's current filter parameters. - // - // ARGUMENTS: - // pParameters - Returns the filter parameters. - */\ - STDMETHOD_(void, GetFilterParameters) (THIS_ _Out_ XAUDIO2_FILTER_PARAMETERS* pParameters) PURE; \ - \ - /* NAME: IXAudio2Voice::SetOutputFilterParameters - // DESCRIPTION: Sets the filter parameters on one of this voice's sends. - // - // ARGUMENTS: - // pDestinationVoice - Destination voice of the send whose filter parameters will be set. - // pParameters - Pointer to the filter's parameter structure. - // OperationSet - Used to identify this call as part of a deferred batch. - */\ - STDMETHOD(SetOutputFilterParameters) (THIS_ _In_opt_ IXAudio2Voice* pDestinationVoice, \ - _In_ const XAUDIO2_FILTER_PARAMETERS* pParameters, \ - UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ - \ - /* NAME: IXAudio2Voice::GetOutputFilterParameters - // DESCRIPTION: Returns the filter parameters from one of this voice's sends. - // - // ARGUMENTS: - // pDestinationVoice - Destination voice of the send whose filter parameters will be read. - // pParameters - Returns the filter parameters. - */\ - STDMETHOD_(void, GetOutputFilterParameters) (THIS_ _In_opt_ IXAudio2Voice* pDestinationVoice, \ - _Out_ XAUDIO2_FILTER_PARAMETERS* pParameters) PURE; \ - \ - /* NAME: IXAudio2Voice::SetVolume - // DESCRIPTION: Sets this voice's overall volume level. - // - // ARGUMENTS: - // Volume - New overall volume level to be used, as an amplitude factor. - // OperationSet - Used to identify this call as part of a deferred batch. - */\ - STDMETHOD(SetVolume) (THIS_ float Volume, \ - UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ - \ - /* NAME: IXAudio2Voice::GetVolume - // DESCRIPTION: Obtains this voice's current overall volume level. - // - // ARGUMENTS: - // pVolume: Returns the voice's current overall volume level. - */\ - STDMETHOD_(void, GetVolume) (THIS_ _Out_ float* pVolume) PURE; \ - \ - /* NAME: IXAudio2Voice::SetChannelVolumes - // DESCRIPTION: Sets this voice's per-channel volume levels. - // - // ARGUMENTS: - // Channels - Used to confirm the voice's channel count. - // pVolumes - Array of per-channel volume levels to be used. - // OperationSet - Used to identify this call as part of a deferred batch. - */\ - STDMETHOD(SetChannelVolumes) (THIS_ UINT32 Channels, _In_reads_(Channels) const float* pVolumes, \ - UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ - \ - /* NAME: IXAudio2Voice::GetChannelVolumes - // DESCRIPTION: Returns this voice's current per-channel volume levels. - // - // ARGUMENTS: - // Channels - Used to confirm the voice's channel count. - // pVolumes - Returns an array of the current per-channel volume levels. - */\ - STDMETHOD_(void, GetChannelVolumes) (THIS_ UINT32 Channels, _Out_writes_(Channels) float* pVolumes) PURE; \ - \ - /* NAME: IXAudio2Voice::SetOutputMatrix - // DESCRIPTION: Sets the volume levels used to mix from each channel of this - // voice's output audio to each channel of a given destination - // voice's input audio. - // - // ARGUMENTS: - // pDestinationVoice - The destination voice whose mix matrix to change. - // SourceChannels - Used to confirm this voice's output channel count - // (the number of channels produced by the last effect in the chain). - // DestinationChannels - Confirms the destination voice's input channels. - // pLevelMatrix - Array of [SourceChannels * DestinationChannels] send - // levels. The level used to send from source channel S to destination - // channel D should be in pLevelMatrix[S + SourceChannels * D]. - // OperationSet - Used to identify this call as part of a deferred batch. - */\ - STDMETHOD(SetOutputMatrix) (THIS_ _In_opt_ IXAudio2Voice* pDestinationVoice, \ - UINT32 SourceChannels, UINT32 DestinationChannels, \ - _In_reads_(SourceChannels * DestinationChannels) const float* pLevelMatrix, \ - UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ - \ - /* NAME: IXAudio2Voice::GetOutputMatrix - // DESCRIPTION: Obtains the volume levels used to send each channel of this - // voice's output audio to each channel of a given destination - // voice's input audio. - // - // ARGUMENTS: - // pDestinationVoice - The destination voice whose mix matrix to obtain. - // SourceChannels - Used to confirm this voice's output channel count - // (the number of channels produced by the last effect in the chain). - // DestinationChannels - Confirms the destination voice's input channels. - // pLevelMatrix - Array of send levels, as above. - */\ - STDMETHOD_(void, GetOutputMatrix) (THIS_ _In_opt_ IXAudio2Voice* pDestinationVoice, \ - UINT32 SourceChannels, UINT32 DestinationChannels, \ - _Out_writes_(SourceChannels * DestinationChannels) float* pLevelMatrix) PURE; \ - \ - /* NAME: IXAudio2Voice::DestroyVoice - // DESCRIPTION: Destroys this voice, stopping it if necessary and removing - // it from the XAudio2 graph. - */\ - STDMETHOD_(void, DestroyVoice) (THIS) PURE - - Declare_IXAudio2Voice_Methods(); -}; - - -/************************************************************************** - * - * IXAudio2SourceVoice: Source voice management interface. - * - **************************************************************************/ - -#undef INTERFACE -#define INTERFACE IXAudio2SourceVoice -DECLARE_INTERFACE_(IXAudio2SourceVoice, IXAudio2Voice) -{ - // Methods from IXAudio2Voice base interface - Declare_IXAudio2Voice_Methods(); - - // NAME: IXAudio2SourceVoice::Start - // DESCRIPTION: Makes this voice start consuming and processing audio. - // - // ARGUMENTS: - // Flags - Flags controlling how the voice should be started. - // OperationSet - Used to identify this call as part of a deferred batch. - // - STDMETHOD(Start) (THIS_ UINT32 Flags X2DEFAULT(0), UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; - - // NAME: IXAudio2SourceVoice::Stop - // DESCRIPTION: Makes this voice stop consuming audio. - // - // ARGUMENTS: - // Flags - Flags controlling how the voice should be stopped. - // OperationSet - Used to identify this call as part of a deferred batch. - // - STDMETHOD(Stop) (THIS_ UINT32 Flags X2DEFAULT(0), UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; - - // NAME: IXAudio2SourceVoice::SubmitSourceBuffer - // DESCRIPTION: Adds a new audio buffer to this voice's input queue. - // - // ARGUMENTS: - // pBuffer - Pointer to the buffer structure to be queued. - // pBufferWMA - Additional structure used only when submitting XWMA data. - // - STDMETHOD(SubmitSourceBuffer) (THIS_ _In_ const XAUDIO2_BUFFER* pBuffer, _In_opt_ const XAUDIO2_BUFFER_WMA* pBufferWMA X2DEFAULT(NULL)) PURE; - - // NAME: IXAudio2SourceVoice::FlushSourceBuffers - // DESCRIPTION: Removes all pending audio buffers from this voice's queue. - // - STDMETHOD(FlushSourceBuffers) (THIS) PURE; - - // NAME: IXAudio2SourceVoice::Discontinuity - // DESCRIPTION: Notifies the voice of an intentional break in the stream of - // audio buffers (e.g. the end of a sound), to prevent XAudio2 - // from interpreting an empty buffer queue as a glitch. - // - STDMETHOD(Discontinuity) (THIS) PURE; - - // NAME: IXAudio2SourceVoice::ExitLoop - // DESCRIPTION: Breaks out of the current loop when its end is reached. - // - // ARGUMENTS: - // OperationSet - Used to identify this call as part of a deferred batch. - // - STDMETHOD(ExitLoop) (THIS_ UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; - - // NAME: IXAudio2SourceVoice::GetState - // DESCRIPTION: Returns the number of buffers currently queued on this voice, - // the pContext value associated with the currently processing - // buffer (if any), and other voice state information. - // - // ARGUMENTS: - // pVoiceState - Returns the state information. - // Flags - Flags controlling what voice state is returned. - // - STDMETHOD_(void, GetState) (THIS_ _Out_ XAUDIO2_VOICE_STATE* pVoiceState, UINT32 Flags X2DEFAULT(0)) PURE; - - // NAME: IXAudio2SourceVoice::SetFrequencyRatio - // DESCRIPTION: Sets this voice's frequency adjustment, i.e. its pitch. - // - // ARGUMENTS: - // Ratio - Frequency change, expressed as source frequency / target frequency. - // OperationSet - Used to identify this call as part of a deferred batch. - // - STDMETHOD(SetFrequencyRatio) (THIS_ float Ratio, - UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; - - // NAME: IXAudio2SourceVoice::GetFrequencyRatio - // DESCRIPTION: Returns this voice's current frequency adjustment ratio. - // - // ARGUMENTS: - // pRatio - Returns the frequency adjustment. - // - STDMETHOD_(void, GetFrequencyRatio) (THIS_ _Out_ float* pRatio) PURE; - - // NAME: IXAudio2SourceVoice::SetSourceSampleRate - // DESCRIPTION: Reconfigures this voice to treat its source data as being - // at a different sample rate than the original one specified - // in CreateSourceVoice's pSourceFormat argument. - // - // ARGUMENTS: - // UINT32 - The intended sample rate of further submitted source data. - // - STDMETHOD(SetSourceSampleRate) (THIS_ UINT32 NewSourceSampleRate) PURE; -}; - - -/************************************************************************** - * - * IXAudio2SubmixVoice: Submixing voice management interface. - * - **************************************************************************/ - -#undef INTERFACE -#define INTERFACE IXAudio2SubmixVoice -DECLARE_INTERFACE_(IXAudio2SubmixVoice, IXAudio2Voice) -{ - // Methods from IXAudio2Voice base interface - Declare_IXAudio2Voice_Methods(); - - // There are currently no methods specific to submix voices. -}; - - -/************************************************************************** - * - * IXAudio2MasteringVoice: Mastering voice management interface. - * - **************************************************************************/ - -#undef INTERFACE -#define INTERFACE IXAudio2MasteringVoice -DECLARE_INTERFACE_(IXAudio2MasteringVoice, IXAudio2Voice) -{ - // Methods from IXAudio2Voice base interface - Declare_IXAudio2Voice_Methods(); - - // NAME: IXAudio2MasteringVoice::GetChannelMask - // DESCRIPTION: Returns the channel mask for this voice - // - // ARGUMENTS: - // pChannelMask - returns the channel mask for this voice. This corresponds - // to the dwChannelMask member of WAVEFORMATEXTENSIBLE. - // - STDMETHOD(GetChannelMask) (THIS_ _Out_ DWORD* pChannelmask) PURE; -}; - - -/************************************************************************** - * - * IXAudio2EngineCallback: Client notification interface for engine events. - * - * REMARKS: Contains methods to notify the client when certain events happen - * in the XAudio2 engine. This interface should be implemented by - * the client. XAudio2 will call these methods via the interface - * pointer provided by the client when it calls - * IXAudio2::RegisterForCallbacks. - * - **************************************************************************/ - -#undef INTERFACE -#define INTERFACE IXAudio2EngineCallback -DECLARE_INTERFACE(IXAudio2EngineCallback) -{ - // Called by XAudio2 just before an audio processing pass begins. - STDMETHOD_(void, OnProcessingPassStart) (THIS) PURE; - - // Called just after an audio processing pass ends. - STDMETHOD_(void, OnProcessingPassEnd) (THIS) PURE; - - // Called in the event of a critical system error which requires XAudio2 - // to be closed down and restarted. The error code is given in Error. - STDMETHOD_(void, OnCriticalError) (THIS_ HRESULT Error) PURE; -}; - - -/************************************************************************** - * - * IXAudio2VoiceCallback: Client notification interface for voice events. - * - * REMARKS: Contains methods to notify the client when certain events happen - * in an XAudio2 voice. This interface should be implemented by the - * client. XAudio2 will call these methods via an interface pointer - * provided by the client in the IXAudio2::CreateSourceVoice call. - * - **************************************************************************/ - -#undef INTERFACE -#define INTERFACE IXAudio2VoiceCallback -DECLARE_INTERFACE(IXAudio2VoiceCallback) -{ - // Called just before this voice's processing pass begins. - STDMETHOD_(void, OnVoiceProcessingPassStart) (THIS_ UINT32 BytesRequired) PURE; - - // Called just after this voice's processing pass ends. - STDMETHOD_(void, OnVoiceProcessingPassEnd) (THIS) PURE; - - // Called when this voice has just finished playing a buffer stream - // (as marked with the XAUDIO2_END_OF_STREAM flag on the last buffer). - STDMETHOD_(void, OnStreamEnd) (THIS) PURE; - - // Called when this voice is about to start processing a new buffer. - STDMETHOD_(void, OnBufferStart) (THIS_ void* pBufferContext) PURE; - - // Called when this voice has just finished processing a buffer. - // The buffer can now be reused or destroyed. - STDMETHOD_(void, OnBufferEnd) (THIS_ void* pBufferContext) PURE; - - // Called when this voice has just reached the end position of a loop. - STDMETHOD_(void, OnLoopEnd) (THIS_ void* pBufferContext) PURE; - - // Called in the event of a critical error during voice processing, - // such as a failing xAPO or an error from the hardware XMA decoder. - // The voice may have to be destroyed and re-created to recover from - // the error. The callback arguments report which buffer was being - // processed when the error occurred, and its HRESULT code. - STDMETHOD_(void, OnVoiceError) (THIS_ void* pBufferContext, HRESULT Error) PURE; -}; - - -/************************************************************************** - * - * Macros to make it easier to use the XAudio2 COM interfaces in C code. - * - **************************************************************************/ - -#ifndef __cplusplus - -// IXAudio2 -#define IXAudio2_QueryInterface(This,riid,ppvInterface) ((This)->lpVtbl->QueryInterface(This,riid,ppvInterface)) -#define IXAudio2_AddRef(This) ((This)->lpVtbl->AddRef(This)) -#define IXAudio2_Release(This) ((This)->lpVtbl->Release(This)) -#define IXAudio2_RegisterForCallbacks(This,pCallback) ((This)->lpVtbl->RegisterForCallbacks(This,pCallback)) -#define IXAudio2_UnregisterForCallbacks(This,pCallback) ((This)->lpVtbl->UnregisterForCallbacks(This,pCallback)) -#define IXAudio2_CreateSourceVoice(This,ppSourceVoice,pSourceFormat,Flags,MaxFrequencyRatio,pCallback,pSendList,pEffectChain) ((This)->lpVtbl->CreateSourceVoice(This,ppSourceVoice,pSourceFormat,Flags,MaxFrequencyRatio,pCallback,pSendList,pEffectChain)) -#define IXAudio2_CreateSubmixVoice(This,ppSubmixVoice,InputChannels,InputSampleRate,Flags,ProcessingStage,pSendList,pEffectChain) ((This)->lpVtbl->CreateSubmixVoice(This,ppSubmixVoice,InputChannels,InputSampleRate,Flags,ProcessingStage,pSendList,pEffectChain)) -#define IXAudio2_CreateMasteringVoice(This,ppMasteringVoice,InputChannels,InputSampleRate,Flags,DeviceId,pEffectChain,StreamCategory) ((This)->lpVtbl->CreateMasteringVoice(This,ppMasteringVoice,InputChannels,InputSampleRate,Flags,DeviceId,pEffectChain,StreamCategory)) -#define IXAudio2_StartEngine(This) ((This)->lpVtbl->StartEngine(This)) -#define IXAudio2_StopEngine(This) ((This)->lpVtbl->StopEngine(This)) -#define IXAudio2_CommitChanges(This,OperationSet) ((This)->lpVtbl->CommitChanges(This,OperationSet)) -#define IXAudio2_GetPerformanceData(This,pPerfData) ((This)->lpVtbl->GetPerformanceData(This,pPerfData)) -#define IXAudio2_SetDebugConfiguration(This,pDebugConfiguration,pReserved) ((This)->lpVtbl->SetDebugConfiguration(This,pDebugConfiguration,pReserved)) - -// IXAudio2Extension -#define IXAudio2Extension_GetProcessingQuantum(This,quantumNumerator,quantumDenominator) ((This)->lpVtbl->GetProcessingQuantum(This,quantumNumerator,quantumDenominator)) -#define IXAudio2Extension_GetProcessor(This,processor) ((This)->lpVtbl->GetProcessor(This,processor)) - -// IXAudio2Voice -#define IXAudio2Voice_GetVoiceDetails(This,pVoiceDetails) ((This)->lpVtbl->GetVoiceDetails(This,pVoiceDetails)) -#define IXAudio2Voice_SetOutputVoices(This,pSendList) ((This)->lpVtbl->SetOutputVoices(This,pSendList)) -#define IXAudio2Voice_SetEffectChain(This,pEffectChain) ((This)->lpVtbl->SetEffectChain(This,pEffectChain)) -#define IXAudio2Voice_EnableEffect(This,EffectIndex,OperationSet) ((This)->lpVtbl->EnableEffect(This,EffectIndex,OperationSet)) -#define IXAudio2Voice_DisableEffect(This,EffectIndex,OperationSet) ((This)->lpVtbl->DisableEffect(This,EffectIndex,OperationSet)) -#define IXAudio2Voice_GetEffectState(This,EffectIndex,pEnabled) ((This)->lpVtbl->GetEffectState(This,EffectIndex,pEnabled)) -#define IXAudio2Voice_SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize, OperationSet) ((This)->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet)) -#define IXAudio2Voice_GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize) ((This)->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize)) -#define IXAudio2Voice_SetFilterParameters(This,pParameters,OperationSet) ((This)->lpVtbl->SetFilterParameters(This,pParameters,OperationSet)) -#define IXAudio2Voice_GetFilterParameters(This,pParameters) ((This)->lpVtbl->GetFilterParameters(This,pParameters)) -#define IXAudio2Voice_SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet) ((This)->lpVtbl->SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet)) -#define IXAudio2Voice_GetOutputFilterParameters(This,pDestinationVoice,pParameters) ((This)->lpVtbl->GetOutputFilterParameters(This,pDestinationVoice,pParameters)) -#define IXAudio2Voice_SetVolume(This,Volume,OperationSet) ((This)->lpVtbl->SetVolume(This,Volume,OperationSet)) -#define IXAudio2Voice_GetVolume(This,pVolume) ((This)->lpVtbl->GetVolume(This,pVolume)) -#define IXAudio2Voice_SetChannelVolumes(This,Channels,pVolumes,OperationSet) ((This)->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet)) -#define IXAudio2Voice_GetChannelVolumes(This,Channels,pVolumes) ((This)->lpVtbl->GetChannelVolumes(This,Channels,pVolumes)) -#define IXAudio2Voice_SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet) ((This)->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet)) -#define IXAudio2Voice_GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix) ((This)->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix)) -#define IXAudio2Voice_DestroyVoice(This) ((This)->lpVtbl->DestroyVoice(This)) - -// IXAudio2SourceVoice -#define IXAudio2SourceVoice_GetVoiceDetails IXAudio2Voice_GetVoiceDetails -#define IXAudio2SourceVoice_SetOutputVoices IXAudio2Voice_SetOutputVoices -#define IXAudio2SourceVoice_SetEffectChain IXAudio2Voice_SetEffectChain -#define IXAudio2SourceVoice_EnableEffect IXAudio2Voice_EnableEffect -#define IXAudio2SourceVoice_DisableEffect IXAudio2Voice_DisableEffect -#define IXAudio2SourceVoice_GetEffectState IXAudio2Voice_GetEffectState -#define IXAudio2SourceVoice_SetEffectParameters IXAudio2Voice_SetEffectParameters -#define IXAudio2SourceVoice_GetEffectParameters IXAudio2Voice_GetEffectParameters -#define IXAudio2SourceVoice_SetFilterParameters IXAudio2Voice_SetFilterParameters -#define IXAudio2SourceVoice_GetFilterParameters IXAudio2Voice_GetFilterParameters -#define IXAudio2SourceVoice_SetOutputFilterParameters IXAudio2Voice_SetOutputFilterParameters -#define IXAudio2SourceVoice_GetOutputFilterParameters IXAudio2Voice_GetOutputFilterParameters -#define IXAudio2SourceVoice_SetVolume IXAudio2Voice_SetVolume -#define IXAudio2SourceVoice_GetVolume IXAudio2Voice_GetVolume -#define IXAudio2SourceVoice_SetChannelVolumes IXAudio2Voice_SetChannelVolumes -#define IXAudio2SourceVoice_GetChannelVolumes IXAudio2Voice_GetChannelVolumes -#define IXAudio2SourceVoice_SetOutputMatrix IXAudio2Voice_SetOutputMatrix -#define IXAudio2SourceVoice_GetOutputMatrix IXAudio2Voice_GetOutputMatrix -#define IXAudio2SourceVoice_DestroyVoice IXAudio2Voice_DestroyVoice -#define IXAudio2SourceVoice_Start(This,Flags,OperationSet) ((This)->lpVtbl->Start(This,Flags,OperationSet)) -#define IXAudio2SourceVoice_Stop(This,Flags,OperationSet) ((This)->lpVtbl->Stop(This,Flags,OperationSet)) -#define IXAudio2SourceVoice_SubmitSourceBuffer(This,pBuffer,pBufferWMA) ((This)->lpVtbl->SubmitSourceBuffer(This,pBuffer,pBufferWMA)) -#define IXAudio2SourceVoice_FlushSourceBuffers(This) ((This)->lpVtbl->FlushSourceBuffers(This)) -#define IXAudio2SourceVoice_Discontinuity(This) ((This)->lpVtbl->Discontinuity(This)) -#define IXAudio2SourceVoice_ExitLoop(This,OperationSet) ((This)->lpVtbl->ExitLoop(This,OperationSet)) -#define IXAudio2SourceVoice_GetState(This,pVoiceState,Flags) ((This)->lpVtbl->GetState(This,pVoiceState,Flags)) -#define IXAudio2SourceVoice_SetFrequencyRatio(This,Ratio,OperationSet) ((This)->lpVtbl->SetFrequencyRatio(This,Ratio,OperationSet)) -#define IXAudio2SourceVoice_GetFrequencyRatio(This,pRatio) ((This)->lpVtbl->GetFrequencyRatio(This,pRatio)) -#define IXAudio2SourceVoice_SetSourceSampleRate(This,NewSourceSampleRate) ((This)->lpVtbl->SetSourceSampleRate(This,NewSourceSampleRate)) - -// IXAudio2SubmixVoice -#define IXAudio2SubmixVoice_GetVoiceDetails IXAudio2Voice_GetVoiceDetails -#define IXAudio2SubmixVoice_SetOutputVoices IXAudio2Voice_SetOutputVoices -#define IXAudio2SubmixVoice_SetEffectChain IXAudio2Voice_SetEffectChain -#define IXAudio2SubmixVoice_EnableEffect IXAudio2Voice_EnableEffect -#define IXAudio2SubmixVoice_DisableEffect IXAudio2Voice_DisableEffect -#define IXAudio2SubmixVoice_GetEffectState IXAudio2Voice_GetEffectState -#define IXAudio2SubmixVoice_SetEffectParameters IXAudio2Voice_SetEffectParameters -#define IXAudio2SubmixVoice_GetEffectParameters IXAudio2Voice_GetEffectParameters -#define IXAudio2SubmixVoice_SetFilterParameters IXAudio2Voice_SetFilterParameters -#define IXAudio2SubmixVoice_GetFilterParameters IXAudio2Voice_GetFilterParameters -#define IXAudio2SubmixVoice_SetOutputFilterParameters IXAudio2Voice_SetOutputFilterParameters -#define IXAudio2SubmixVoice_GetOutputFilterParameters IXAudio2Voice_GetOutputFilterParameters -#define IXAudio2SubmixVoice_SetVolume IXAudio2Voice_SetVolume -#define IXAudio2SubmixVoice_GetVolume IXAudio2Voice_GetVolume -#define IXAudio2SubmixVoice_SetChannelVolumes IXAudio2Voice_SetChannelVolumes -#define IXAudio2SubmixVoice_GetChannelVolumes IXAudio2Voice_GetChannelVolumes -#define IXAudio2SubmixVoice_SetOutputMatrix IXAudio2Voice_SetOutputMatrix -#define IXAudio2SubmixVoice_GetOutputMatrix IXAudio2Voice_GetOutputMatrix -#define IXAudio2SubmixVoice_DestroyVoice IXAudio2Voice_DestroyVoice - -// IXAudio2MasteringVoice -#define IXAudio2MasteringVoice_GetVoiceDetails IXAudio2Voice_GetVoiceDetails -#define IXAudio2MasteringVoice_SetOutputVoices IXAudio2Voice_SetOutputVoices -#define IXAudio2MasteringVoice_SetEffectChain IXAudio2Voice_SetEffectChain -#define IXAudio2MasteringVoice_EnableEffect IXAudio2Voice_EnableEffect -#define IXAudio2MasteringVoice_DisableEffect IXAudio2Voice_DisableEffect -#define IXAudio2MasteringVoice_GetEffectState IXAudio2Voice_GetEffectState -#define IXAudio2MasteringVoice_SetEffectParameters IXAudio2Voice_SetEffectParameters -#define IXAudio2MasteringVoice_GetEffectParameters IXAudio2Voice_GetEffectParameters -#define IXAudio2MasteringVoice_SetFilterParameters IXAudio2Voice_SetFilterParameters -#define IXAudio2MasteringVoice_GetFilterParameters IXAudio2Voice_GetFilterParameters -#define IXAudio2MasteringVoice_SetOutputFilterParameters IXAudio2Voice_SetOutputFilterParameters -#define IXAudio2MasteringVoice_GetOutputFilterParameters IXAudio2Voice_GetOutputFilterParameters -#define IXAudio2MasteringVoice_SetVolume IXAudio2Voice_SetVolume -#define IXAudio2MasteringVoice_GetVolume IXAudio2Voice_GetVolume -#define IXAudio2MasteringVoice_SetChannelVolumes IXAudio2Voice_SetChannelVolumes -#define IXAudio2MasteringVoice_GetChannelVolumes IXAudio2Voice_GetChannelVolumes -#define IXAudio2MasteringVoice_SetOutputMatrix IXAudio2Voice_SetOutputMatrix -#define IXAudio2MasteringVoice_GetOutputMatrix IXAudio2Voice_GetOutputMatrix -#define IXAudio2MasteringVoice_DestroyVoice IXAudio2Voice_DestroyVoice -#define IXAudio2MasteringVoice_GetChannelMask(This,pChannelMask) ((This)->lpVtbl->GetChannelMask(This,pChannelMask)) - -#endif // #ifndef __cplusplus - - -/************************************************************************** - * - * Utility functions used to convert from pitch in semitones and volume - * in decibels to the frequency and amplitude ratio units used by XAudio2. - * These are only defined if the client #defines XAUDIO2_HELPER_FUNCTIONS - * prior to #including xaudio2.h. - * - **************************************************************************/ - -#ifdef XAUDIO2_HELPER_FUNCTIONS - -#define _USE_MATH_DEFINES // Make math.h define M_PI -#include // For powf, log10f, sinf and asinf - -// Calculate the argument to SetVolume from a decibel value -__inline float XAudio2DecibelsToAmplitudeRatio(float Decibels) -{ - return powf(10.0f, Decibels / 20.0f); -} - -// Recover a volume in decibels from an amplitude factor -__inline float XAudio2AmplitudeRatioToDecibels(float Volume) -{ - if (Volume == 0) - { - return -3.402823466e+38f; // Smallest float value (-FLT_MAX) - } - return 20.0f * log10f(Volume); -} - -// Calculate the argument to SetFrequencyRatio from a semitone value -__inline float XAudio2SemitonesToFrequencyRatio(float Semitones) -{ - // FrequencyRatio = 2 ^ Octaves - // = 2 ^ (Semitones / 12) - return powf(2.0f, Semitones / 12.0f); -} - -// Recover a pitch in semitones from a frequency ratio -__inline float XAudio2FrequencyRatioToSemitones(float FrequencyRatio) -{ - // Semitones = 12 * log2(FrequencyRatio) - // = 12 * log2(10) * log10(FrequencyRatio) - return 39.86313713864835f * log10f(FrequencyRatio); -} - -// Convert from filter cutoff frequencies expressed in Hertz to the radian -// frequency values used in XAUDIO2_FILTER_PARAMETERS.Frequency, state-variable -// filter types only. Use XAudio2CutoffFrequencyToOnePoleCoefficient() for one-pole filter types. -// Note that the highest CutoffFrequency supported is SampleRate/6. -// Higher values of CutoffFrequency will return XAUDIO2_MAX_FILTER_FREQUENCY. -__inline float XAudio2CutoffFrequencyToRadians(float CutoffFrequency, UINT32 SampleRate) -{ - if ((UINT32)(CutoffFrequency * 6.0f) >= SampleRate) - { - return XAUDIO2_MAX_FILTER_FREQUENCY; - } - return 2.0f * sinf((float)M_PI * CutoffFrequency / (float)SampleRate); -} - -// Convert from radian frequencies back to absolute frequencies in Hertz -__inline float XAudio2RadiansToCutoffFrequency(float Radians, float SampleRate) -{ - return SampleRate * asinf(Radians / 2.0f) / (float)M_PI; -} - -// Convert from filter cutoff frequencies expressed in Hertz to the filter -// coefficients used with XAUDIO2_FILTER_PARAMETERS.Frequency, -// LowPassOnePoleFilter and HighPassOnePoleFilter filter types only. -// Use XAudio2CutoffFrequencyToRadians() for state-variable filter types. -__inline float XAudio2CutoffFrequencyToOnePoleCoefficient(float CutoffFrequency, UINT32 SampleRate) -{ - if ((UINT32)CutoffFrequency >= SampleRate) - { - return XAUDIO2_MAX_FILTER_FREQUENCY; - } - return ( 1.0f - powf(1.0f - 2.0f * CutoffFrequency / (float)SampleRate, 2.0f) ); -} - - -#endif // #ifdef XAUDIO2_HELPER_FUNCTIONS - - -/************************************************************************** - * - * XAudio2Create: Top-level function that creates an XAudio2 instance. - * - * ARGUMENTS: - * - * Flags - Flags specifying the XAudio2 object's behavior. - * - * XAudio2Processor - An XAUDIO2_PROCESSOR value that specifies the - * hardware threads (Xbox) or processors (Windows) that XAudio2 - * will use. Note that XAudio2 supports concurrent processing on - * multiple threads, using any combination of XAUDIO2_PROCESSOR - * flags. The values are platform-specific; platform-independent - * code can use XAUDIO2_USE_DEFAULT_PROCESSOR to use the default on - * each platform. - * - **************************************************************************/ - -// We're an xaudio2 client -#define XAUDIO2_STDAPI EXTERN_C DECLSPEC_IMPORT HRESULT STDAPICALLTYPE - -XAUDIO2_STDAPI XAudio2Create(_Outptr_ IXAudio2** ppXAudio2, UINT32 Flags X2DEFAULT(0), - XAUDIO2_PROCESSOR XAudio2Processor X2DEFAULT(XAUDIO2_USE_DEFAULT_PROCESSOR)); - -// Undo the #pragma pack(push, 1) directive at the top of this file -#pragma pack(pop) - -#endif // #ifndef GUID_DEFS_ONLY - -#endif // #ifndef __XAUDIO2_INCLUDED__ +/************************************************************************** + * + * Copyright (c) Microsoft Corporation. All rights reserved. + * + * File: xaudio2.h + * Content: Declarations for the XAudio2 game audio API. + * + **************************************************************************/ + +#ifdef _MSC_VER +#pragma once +#endif + +#ifndef __XAUDIO2_INCLUDED__ +#define __XAUDIO2_INCLUDED__ + +#include + +// Current name of the DLL shipped in the same SDK as this header. +// The name reflects the current version +#define XAUDIO2_DLL_A "xaudio2_9redist.dll" +#define XAUDIO2_DLL_W L"xaudio2_9redist.dll" +#define XAUDIO2D_DLL_A "xaudio2_9redist.dll" +#define XAUDIO2D_DLL_W L"xaudio2_9redist.dll" + +#ifdef UNICODE + #define XAUDIO2_DLL XAUDIO2_DLL_W + #define XAUDIO2D_DLL XAUDIO2D_DLL_W +#else + #define XAUDIO2_DLL XAUDIO2_DLL_A + #define XAUDIO2D_DLL XAUDIO2D_DLL_A +#endif + + +/************************************************************************** + * + * XAudio2 COM object class and interface IDs. + * + **************************************************************************/ + +#include + +#ifdef __cplusplus + // XAudio 2.9 + interface __declspec(uuid("2B02E3CF-2E0B-4ec3-BE45-1B2A3FE7210D")) IXAudio2; + interface __declspec(uuid("84ac29bb-d619-44d2-b197-e4acf7df3ed6")) IXAudio2Extension; + EXTERN_C const GUID DECLSPEC_SELECTANY IID_IXAudio2Extension = __uuidof(IXAudio2Extension); + EXTERN_C const GUID DECLSPEC_SELECTANY IID_IXAudio2 = __uuidof(IXAudio2); + +#else // #ifdef __cplusplus + // Compiling with C for Windows 10 and later + DEFINE_GUID(IID_IXAudio2, 0x2B02E3CF, 0x2E0B, 0x4ec3, 0xBE, 0x45, 0x1B, 0x2A, 0x3F, 0xE7, 0x21, 0x0D); + DEFINE_GUID(IID_IXAudio2Extension, 0x84ac29bb, 0xd619, 0x44d2, 0xb1, 0x97, 0xe4, 0xac, 0xf7, 0xdf, 0x3e, 0xd6); +#endif // #ifdef __cplusplus + + +// Ignore the rest of this header if only the GUID definitions were requested +#ifndef GUID_DEFS_ONLY + +#include // Windows COM declarations +#include // Markers for documenting API semantics +#include // Basic data types and constants for audio work +#include // For AUDIO_STREAM_CATEGORY + +// The Windows 7 version of audiosessiontypes.h does not define AUDIO_STREAM_CATEGORY, so if we are targeting +// Windows 7 we might have to define it here, depending on which SDK is used. +#if _WIN32_WINNT < _WIN32_WINNT_WIN8 + +// If we are compiling for Windows 7, we might be using the Windows 7 Platform SDK, which does not have AUDIO_STREAM_CATEGORY. +// But we might be using a newer SDK (such as the Win8 Platform SDK), which has AUDIO_STREAM_CATEGORY. +// Determine if we are using the Windows 7 Platform SDK by checking if WAVE_FORMAT_WM9_SPECTRUM_ANALYZER is defined. +#ifndef WAVE_FORMAT_WM9_SPECTRUM_ANALYZER +typedef enum _AUDIO_STREAM_CATEGORY +{ + AudioCategory_Other = 0, + AudioCategory_ForegroundOnlyMedia = 1, + AudioCategory_Communications = 3, + AudioCategory_Alerts = 4, + AudioCategory_SoundEffects = 5, + AudioCategory_GameEffects = 6, + AudioCategory_GameMedia = 7, + AudioCategory_GameChat = 8, + AudioCategory_Speech = 9, + AudioCategory_Movie = 10, + AudioCategory_Media = 11, +} AUDIO_STREAM_CATEGORY; +#endif /* WAVE_FORMAT_WM9_SPECTRUM_ANALYZER */ +#endif /* NTDDI_VERSION < NTDDI_WIN8 */ + +// All structures defined in this file use tight field packing +#pragma pack(push, 1) + + +/************************************************************************** + * + * XAudio2 constants, flags and error codes. + * + **************************************************************************/ + +// Numeric boundary values +#define XAUDIO2_MAX_BUFFER_BYTES 0x80000000 // Maximum bytes allowed in a source buffer +#define XAUDIO2_MAX_QUEUED_BUFFERS 64 // Maximum buffers allowed in a voice queue +#define XAUDIO2_MAX_BUFFERS_SYSTEM 2 // Maximum buffers allowed for system threads (Xbox 360 only) +#define XAUDIO2_MAX_AUDIO_CHANNELS 64 // Maximum channels in an audio stream +#define XAUDIO2_MIN_SAMPLE_RATE 1000 // Minimum audio sample rate supported +#define XAUDIO2_MAX_SAMPLE_RATE 200000 // Maximum audio sample rate supported +#define XAUDIO2_MAX_VOLUME_LEVEL 16777216.0f // Maximum acceptable volume level (2^24) +#define XAUDIO2_MIN_FREQ_RATIO (1/1024.0f) // Minimum SetFrequencyRatio argument +#define XAUDIO2_MAX_FREQ_RATIO 1024.0f // Maximum MaxFrequencyRatio argument +#define XAUDIO2_DEFAULT_FREQ_RATIO 2.0f // Default MaxFrequencyRatio argument +#define XAUDIO2_MAX_FILTER_ONEOVERQ 1.5f // Maximum XAUDIO2_FILTER_PARAMETERS.OneOverQ +#define XAUDIO2_MAX_FILTER_FREQUENCY 1.0f // Maximum XAUDIO2_FILTER_PARAMETERS.Frequency +#define XAUDIO2_MAX_LOOP_COUNT 254 // Maximum non-infinite XAUDIO2_BUFFER.LoopCount +#define XAUDIO2_MAX_INSTANCES 8 // Maximum simultaneous XAudio2 objects on Xbox 360 + +// For XMA voices on Xbox 360 there is an additional restriction on the MaxFrequencyRatio +// argument and the voice's sample rate: the product of these numbers cannot exceed 600000 +// for one-channel voices or 300000 for voices with more than one channel. +#define XAUDIO2_MAX_RATIO_TIMES_RATE_XMA_MONO 600000 +#define XAUDIO2_MAX_RATIO_TIMES_RATE_XMA_MULTICHANNEL 300000 + +// Numeric values with special meanings +#define XAUDIO2_COMMIT_NOW 0 // Used as an OperationSet argument +#define XAUDIO2_COMMIT_ALL 0 // Used in IXAudio2::CommitChanges +#define XAUDIO2_INVALID_OPSET (UINT32)(-1) // Not allowed for OperationSet arguments +#define XAUDIO2_NO_LOOP_REGION 0 // Used in XAUDIO2_BUFFER.LoopCount +#define XAUDIO2_LOOP_INFINITE 255 // Used in XAUDIO2_BUFFER.LoopCount +#define XAUDIO2_DEFAULT_CHANNELS 0 // Used in CreateMasteringVoice +#define XAUDIO2_DEFAULT_SAMPLERATE 0 // Used in CreateMasteringVoice + +// Flags +#define XAUDIO2_DEBUG_ENGINE 0x0001 // Used in XAudio2Create +#define XAUDIO2_VOICE_NOPITCH 0x0002 // Used in IXAudio2::CreateSourceVoice +#define XAUDIO2_VOICE_NOSRC 0x0004 // Used in IXAudio2::CreateSourceVoice +#define XAUDIO2_VOICE_USEFILTER 0x0008 // Used in IXAudio2::CreateSource/SubmixVoice +#define XAUDIO2_PLAY_TAILS 0x0020 // Used in IXAudio2SourceVoice::Stop +#define XAUDIO2_END_OF_STREAM 0x0040 // Used in XAUDIO2_BUFFER.Flags +#define XAUDIO2_SEND_USEFILTER 0x0080 // Used in XAUDIO2_SEND_DESCRIPTOR.Flags +#define XAUDIO2_VOICE_NOSAMPLESPLAYED 0x0100 // Used in IXAudio2SourceVoice::GetState +#define XAUDIO2_STOP_ENGINE_WHEN_IDLE 0x2000 // Used in XAudio2Create to force the engine to Stop when no source voices are Started, and Start when a voice is Started +#define XAUDIO2_1024_QUANTUM 0x8000 // Used in XAudio2Create to specify nondefault processing quantum of 21.33 ms (1024 samples at 48KHz) +#define XAUDIO2_NO_VIRTUAL_AUDIO_CLIENT 0x10000 // Used in CreateMasteringVoice to create a virtual audio client + +// Default parameters for the built-in filter +#define XAUDIO2_DEFAULT_FILTER_TYPE LowPassFilter +#define XAUDIO2_DEFAULT_FILTER_FREQUENCY XAUDIO2_MAX_FILTER_FREQUENCY +#define XAUDIO2_DEFAULT_FILTER_ONEOVERQ 1.0f + +// Internal XAudio2 constants +// The audio frame quantum can be calculated by reducing the fraction: +// SamplesPerAudioFrame / SamplesPerSecond +#define XAUDIO2_QUANTUM_NUMERATOR 1 // On Windows, XAudio2 processes audio +#define XAUDIO2_QUANTUM_DENOMINATOR 100 // in 10ms chunks (= 1/100 seconds) +#define XAUDIO2_QUANTUM_MS (1000.0f * XAUDIO2_QUANTUM_NUMERATOR / XAUDIO2_QUANTUM_DENOMINATOR) + +// XAudio2 error codes +#define FACILITY_XAUDIO2 0x896 +#define XAUDIO2_E_INVALID_CALL ((HRESULT)0x88960001) // An API call or one of its arguments was illegal +#define XAUDIO2_E_XMA_DECODER_ERROR ((HRESULT)0x88960002) // The XMA hardware suffered an unrecoverable error +#define XAUDIO2_E_XAPO_CREATION_FAILED ((HRESULT)0x88960003) // XAudio2 failed to initialize an XAPO effect +#define XAUDIO2_E_DEVICE_INVALIDATED ((HRESULT)0x88960004) // An audio device became unusable (unplugged, etc) + +/************************************************************************** + * + * Forward declarations for the XAudio2 interfaces. + * + **************************************************************************/ + +#ifdef __cplusplus + #define FWD_DECLARE(x) interface x +#else + #define FWD_DECLARE(x) typedef interface x x +#endif + +FWD_DECLARE(IXAudio2); +FWD_DECLARE(IXAudio2Voice); +FWD_DECLARE(IXAudio2SourceVoice); +FWD_DECLARE(IXAudio2SubmixVoice); +FWD_DECLARE(IXAudio2MasteringVoice); +FWD_DECLARE(IXAudio2EngineCallback); +FWD_DECLARE(IXAudio2VoiceCallback); + + +/************************************************************************** + * + * XAudio2 structures and enumerations. + * + **************************************************************************/ + +// Used in XAudio2Create, specifies which CPU(s) to use. +typedef UINT32 XAUDIO2_PROCESSOR; +#define Processor1 0x00000001 +#define Processor2 0x00000002 +#define Processor3 0x00000004 +#define Processor4 0x00000008 +#define Processor5 0x00000010 +#define Processor6 0x00000020 +#define Processor7 0x00000040 +#define Processor8 0x00000080 +#define Processor9 0x00000100 +#define Processor10 0x00000200 +#define Processor11 0x00000400 +#define Processor12 0x00000800 +#define Processor13 0x00001000 +#define Processor14 0x00002000 +#define Processor15 0x00004000 +#define Processor16 0x00008000 +#define Processor17 0x00010000 +#define Processor18 0x00020000 +#define Processor19 0x00040000 +#define Processor20 0x00080000 +#define Processor21 0x00100000 +#define Processor22 0x00200000 +#define Processor23 0x00400000 +#define Processor24 0x00800000 +#define Processor25 0x01000000 +#define Processor26 0x02000000 +#define Processor27 0x04000000 +#define Processor28 0x08000000 +#define Processor29 0x10000000 +#define Processor30 0x20000000 +#define Processor31 0x40000000 +#define Processor32 0x80000000 +#define XAUDIO2_ANY_PROCESSOR 0xffffffff + +// This value indicates that XAudio2 will choose the default processor by itself. The actual value chosen +// may vary depending on the hardware platform. +#define XAUDIO2_USE_DEFAULT_PROCESSOR 0x00000000 + +// This definition is included for backwards compatibilty. New implementations should use +// XAUDIO2_USE_DEFAULT_PROCESSOR instead to let XAudio2 select the appropriate default processor for the hardware platform. +#define XAUDIO2_DEFAULT_PROCESSOR Processor1 + +// Returned by IXAudio2Voice::GetVoiceDetails +typedef struct XAUDIO2_VOICE_DETAILS +{ + UINT32 CreationFlags; // Flags the voice was created with. + UINT32 ActiveFlags; // Flags currently active. + UINT32 InputChannels; // Channels in the voice's input audio. + UINT32 InputSampleRate; // Sample rate of the voice's input audio. +} XAUDIO2_VOICE_DETAILS; + +// Used in XAUDIO2_VOICE_SENDS below +typedef struct XAUDIO2_SEND_DESCRIPTOR +{ + UINT32 Flags; // Either 0 or XAUDIO2_SEND_USEFILTER. + IXAudio2Voice* pOutputVoice; // This send's destination voice. +} XAUDIO2_SEND_DESCRIPTOR; + +// Used in the voice creation functions and in IXAudio2Voice::SetOutputVoices +typedef struct XAUDIO2_VOICE_SENDS +{ + UINT32 SendCount; // Number of sends from this voice. + XAUDIO2_SEND_DESCRIPTOR* pSends; // Array of SendCount send descriptors. +} XAUDIO2_VOICE_SENDS; + +// Used in XAUDIO2_EFFECT_CHAIN below +typedef struct XAUDIO2_EFFECT_DESCRIPTOR +{ + IUnknown* pEffect; // Pointer to the effect object's IUnknown interface. + BOOL InitialState; // TRUE if the effect should begin in the enabled state. + UINT32 OutputChannels; // How many output channels the effect should produce. +} XAUDIO2_EFFECT_DESCRIPTOR; + +// Used in the voice creation functions and in IXAudio2Voice::SetEffectChain +typedef struct XAUDIO2_EFFECT_CHAIN +{ + UINT32 EffectCount; // Number of effects in this voice's effect chain. + XAUDIO2_EFFECT_DESCRIPTOR* pEffectDescriptors; // Array of effect descriptors. +} XAUDIO2_EFFECT_CHAIN; + +// Used in XAUDIO2_FILTER_PARAMETERS below +typedef enum XAUDIO2_FILTER_TYPE +{ + LowPassFilter, // Attenuates frequencies above the cutoff frequency (state-variable filter). + BandPassFilter, // Attenuates frequencies outside a given range (state-variable filter). + HighPassFilter, // Attenuates frequencies below the cutoff frequency (state-variable filter). + NotchFilter, // Attenuates frequencies inside a given range (state-variable filter). + LowPassOnePoleFilter, // Attenuates frequencies above the cutoff frequency (one-pole filter, XAUDIO2_FILTER_PARAMETERS.OneOverQ has no effect) + HighPassOnePoleFilter // Attenuates frequencies below the cutoff frequency (one-pole filter, XAUDIO2_FILTER_PARAMETERS.OneOverQ has no effect) +} XAUDIO2_FILTER_TYPE; + +// Used in IXAudio2Voice::Set/GetFilterParameters and Set/GetOutputFilterParameters +typedef struct XAUDIO2_FILTER_PARAMETERS +{ + XAUDIO2_FILTER_TYPE Type; // Filter type. + float Frequency; // Filter coefficient. + // must be >= 0 and <= XAUDIO2_MAX_FILTER_FREQUENCY + // See XAudio2CutoffFrequencyToRadians() for state-variable filter types and + // XAudio2CutoffFrequencyToOnePoleCoefficient() for one-pole filter types. + float OneOverQ; // Reciprocal of the filter's quality factor Q; + // must be > 0 and <= XAUDIO2_MAX_FILTER_ONEOVERQ. + // Has no effect for one-pole filters. +} XAUDIO2_FILTER_PARAMETERS; + +// Used in IXAudio2SourceVoice::SubmitSourceBuffer +typedef struct XAUDIO2_BUFFER +{ + UINT32 Flags; // Either 0 or XAUDIO2_END_OF_STREAM. + UINT32 AudioBytes; // Size of the audio data buffer in bytes. + const BYTE* pAudioData; // Pointer to the audio data buffer. + UINT32 PlayBegin; // First sample in this buffer to be played. + UINT32 PlayLength; // Length of the region to be played in samples, + // or 0 to play the whole buffer. + UINT32 LoopBegin; // First sample of the region to be looped. + UINT32 LoopLength; // Length of the desired loop region in samples, + // or 0 to loop the entire buffer. + UINT32 LoopCount; // Number of times to repeat the loop region, + // or XAUDIO2_LOOP_INFINITE to loop forever. + void* pContext; // Context value to be passed back in callbacks. +} XAUDIO2_BUFFER; + +// Used in IXAudio2SourceVoice::SubmitSourceBuffer when submitting XWMA data. +// NOTE: If an XWMA sound is submitted in more than one buffer, each buffer's +// pDecodedPacketCumulativeBytes[PacketCount-1] value must be subtracted from +// all the entries in the next buffer's pDecodedPacketCumulativeBytes array. +// And whether a sound is submitted in more than one buffer or not, the final +// buffer of the sound should use the XAUDIO2_END_OF_STREAM flag, or else the +// client must call IXAudio2SourceVoice::Discontinuity after submitting it. +typedef struct XAUDIO2_BUFFER_WMA +{ + const UINT32* pDecodedPacketCumulativeBytes; // Decoded packet's cumulative size array. + // Each element is the number of bytes accumulated + // when the corresponding XWMA packet is decoded in + // order. The array must have PacketCount elements. + UINT32 PacketCount; // Number of XWMA packets submitted. Must be >= 1 and + // divide evenly into XAUDIO2_BUFFER.AudioBytes. +} XAUDIO2_BUFFER_WMA; + +// Returned by IXAudio2SourceVoice::GetState +typedef struct XAUDIO2_VOICE_STATE +{ + void* pCurrentBufferContext; // The pContext value provided in the XAUDIO2_BUFFER + // that is currently being processed, or NULL if + // there are no buffers in the queue. + UINT32 BuffersQueued; // Number of buffers currently queued on the voice + // (including the one that is being processed). + UINT64 SamplesPlayed; // Total number of samples produced by the voice since + // it began processing the current audio stream. + // If XAUDIO2_VOICE_NOSAMPLESPLAYED is specified + // in the call to IXAudio2SourceVoice::GetState, + // this member will not be calculated, saving CPU. +} XAUDIO2_VOICE_STATE; + +// Returned by IXAudio2::GetPerformanceData +typedef struct XAUDIO2_PERFORMANCE_DATA +{ + // CPU usage information + UINT64 AudioCyclesSinceLastQuery; // CPU cycles spent on audio processing since the + // last call to StartEngine or GetPerformanceData. + UINT64 TotalCyclesSinceLastQuery; // Total CPU cycles elapsed since the last call + // (only counts the CPU XAudio2 is running on). + UINT32 MinimumCyclesPerQuantum; // Fewest CPU cycles spent processing any one + // audio quantum since the last call. + UINT32 MaximumCyclesPerQuantum; // Most CPU cycles spent processing any one + // audio quantum since the last call. + + // Memory usage information + UINT32 MemoryUsageInBytes; // Total heap space currently in use. + + // Audio latency and glitching information + UINT32 CurrentLatencyInSamples; // Minimum delay from when a sample is read from a + // source buffer to when it reaches the speakers. + UINT32 GlitchesSinceEngineStarted; // Audio dropouts since the engine was started. + + // Data about XAudio2's current workload + UINT32 ActiveSourceVoiceCount; // Source voices currently playing. + UINT32 TotalSourceVoiceCount; // Source voices currently existing. + UINT32 ActiveSubmixVoiceCount; // Submix voices currently playing/existing. + + UINT32 ActiveResamplerCount; // Resample xAPOs currently active. + UINT32 ActiveMatrixMixCount; // MatrixMix xAPOs currently active. + + // Usage of the hardware XMA decoder (Xbox 360 only) + UINT32 ActiveXmaSourceVoices; // Number of source voices decoding XMA data. + UINT32 ActiveXmaStreams; // A voice can use more than one XMA stream. +} XAUDIO2_PERFORMANCE_DATA; + +// Used in IXAudio2::SetDebugConfiguration +typedef struct XAUDIO2_DEBUG_CONFIGURATION +{ + UINT32 TraceMask; // Bitmap of enabled debug message types. + UINT32 BreakMask; // Message types that will break into the debugger. + BOOL LogThreadID; // Whether to log the thread ID with each message. + BOOL LogFileline; // Whether to log the source file and line number. + BOOL LogFunctionName; // Whether to log the function name. + BOOL LogTiming; // Whether to log message timestamps. +} XAUDIO2_DEBUG_CONFIGURATION; + +// Values for the TraceMask and BreakMask bitmaps. Only ERRORS and WARNINGS +// are valid in BreakMask. WARNINGS implies ERRORS, DETAIL implies INFO, and +// FUNC_CALLS implies API_CALLS. By default, TraceMask is ERRORS and WARNINGS +// and all the other settings are zero. +#define XAUDIO2_LOG_ERRORS 0x0001 // For handled errors with serious effects. +#define XAUDIO2_LOG_WARNINGS 0x0002 // For handled errors that may be recoverable. +#define XAUDIO2_LOG_INFO 0x0004 // Informational chit-chat (e.g. state changes). +#define XAUDIO2_LOG_DETAIL 0x0008 // More detailed chit-chat. +#define XAUDIO2_LOG_API_CALLS 0x0010 // Public API function entries and exits. +#define XAUDIO2_LOG_FUNC_CALLS 0x0020 // Internal function entries and exits. +#define XAUDIO2_LOG_TIMING 0x0040 // Delays detected and other timing data. +#define XAUDIO2_LOG_LOCKS 0x0080 // Usage of critical sections and mutexes. +#define XAUDIO2_LOG_MEMORY 0x0100 // Memory heap usage information. +#define XAUDIO2_LOG_STREAMING 0x1000 // Audio streaming information. + + +/************************************************************************** + * + * IXAudio2: Top-level XAudio2 COM interface. + * + **************************************************************************/ + +// Use default arguments if compiling as C++ +#ifdef __cplusplus + #define X2DEFAULT(x) =x +#else + #define X2DEFAULT(x) +#endif + +#undef INTERFACE +#define INTERFACE IXAudio2 +DECLARE_INTERFACE_(IXAudio2, IUnknown) +{ + // NAME: IXAudio2::QueryInterface + // DESCRIPTION: Queries for a given COM interface on the XAudio2 object. + // Only IID_IUnknown, IID_IXAudio2 and IID_IXaudio2Extension are supported. + // + // ARGUMENTS: + // riid - IID of the interface to be obtained. + // ppvInterface - Returns a pointer to the requested interface. + // + STDMETHOD(QueryInterface) (THIS_ REFIID riid, _COM_Outptr_ void** ppvInterface) PURE; + + // NAME: IXAudio2::AddRef + // DESCRIPTION: Adds a reference to the XAudio2 object. + // + STDMETHOD_(ULONG, AddRef) (THIS) PURE; + + // NAME: IXAudio2::Release + // DESCRIPTION: Releases a reference to the XAudio2 object. + // + STDMETHOD_(ULONG, Release) (THIS) PURE; + + // NAME: IXAudio2::RegisterForCallbacks + // DESCRIPTION: Adds a new client to receive XAudio2's engine callbacks. + // + // ARGUMENTS: + // pCallback - Callback interface to be called during each processing pass. + // + STDMETHOD(RegisterForCallbacks) (THIS_ _In_ IXAudio2EngineCallback* pCallback) PURE; + + // NAME: IXAudio2::UnregisterForCallbacks + // DESCRIPTION: Removes an existing receiver of XAudio2 engine callbacks. + // + // ARGUMENTS: + // pCallback - Previously registered callback interface to be removed. + // + STDMETHOD_(void, UnregisterForCallbacks) (THIS_ _In_ IXAudio2EngineCallback* pCallback) PURE; + + // NAME: IXAudio2::CreateSourceVoice + // DESCRIPTION: Creates and configures a source voice. + // + // ARGUMENTS: + // ppSourceVoice - Returns the new object's IXAudio2SourceVoice interface. + // pSourceFormat - Format of the audio that will be fed to the voice. + // Flags - XAUDIO2_VOICE flags specifying the source voice's behavior. + // MaxFrequencyRatio - Maximum SetFrequencyRatio argument to be allowed. + // pCallback - Optional pointer to a client-provided callback interface. + // pSendList - Optional list of voices this voice should send audio to. + // pEffectChain - Optional list of effects to apply to the audio data. + // + STDMETHOD(CreateSourceVoice) (THIS_ _Outptr_ IXAudio2SourceVoice** ppSourceVoice, + _In_ const WAVEFORMATEX* pSourceFormat, + UINT32 Flags X2DEFAULT(0), + float MaxFrequencyRatio X2DEFAULT(XAUDIO2_DEFAULT_FREQ_RATIO), + _In_opt_ IXAudio2VoiceCallback* pCallback X2DEFAULT(NULL), + _In_opt_ const XAUDIO2_VOICE_SENDS* pSendList X2DEFAULT(NULL), + _In_opt_ const XAUDIO2_EFFECT_CHAIN* pEffectChain X2DEFAULT(NULL)) PURE; + + // NAME: IXAudio2::CreateSubmixVoice + // DESCRIPTION: Creates and configures a submix voice. + // + // ARGUMENTS: + // ppSubmixVoice - Returns the new object's IXAudio2SubmixVoice interface. + // InputChannels - Number of channels in this voice's input audio data. + // InputSampleRate - Sample rate of this voice's input audio data. + // Flags - XAUDIO2_VOICE flags specifying the submix voice's behavior. + // ProcessingStage - Arbitrary number that determines the processing order. + // pSendList - Optional list of voices this voice should send audio to. + // pEffectChain - Optional list of effects to apply to the audio data. + // + STDMETHOD(CreateSubmixVoice) (THIS_ _Outptr_ IXAudio2SubmixVoice** ppSubmixVoice, + UINT32 InputChannels, UINT32 InputSampleRate, + UINT32 Flags X2DEFAULT(0), UINT32 ProcessingStage X2DEFAULT(0), + _In_opt_ const XAUDIO2_VOICE_SENDS* pSendList X2DEFAULT(NULL), + _In_opt_ const XAUDIO2_EFFECT_CHAIN* pEffectChain X2DEFAULT(NULL)) PURE; + + + // NAME: IXAudio2::CreateMasteringVoice + // DESCRIPTION: Creates and configures a mastering voice. + // + // ARGUMENTS: + // ppMasteringVoice - Returns the new object's IXAudio2MasteringVoice interface. + // InputChannels - Number of channels in this voice's input audio data. + // InputSampleRate - Sample rate of this voice's input audio data. + // Flags - XAUDIO2_VOICE flags specifying the mastering voice's behavior. + // szDeviceId - Identifier of the device to receive the output audio. + // pEffectChain - Optional list of effects to apply to the audio data. + // StreamCategory - The audio stream category to use for this mastering voice + // + STDMETHOD(CreateMasteringVoice) (THIS_ _Outptr_ IXAudio2MasteringVoice** ppMasteringVoice, + UINT32 InputChannels X2DEFAULT(XAUDIO2_DEFAULT_CHANNELS), + UINT32 InputSampleRate X2DEFAULT(XAUDIO2_DEFAULT_SAMPLERATE), + UINT32 Flags X2DEFAULT(0), _In_opt_z_ LPCWSTR szDeviceId X2DEFAULT(NULL), + _In_opt_ const XAUDIO2_EFFECT_CHAIN* pEffectChain X2DEFAULT(NULL), + _In_ AUDIO_STREAM_CATEGORY StreamCategory X2DEFAULT(AudioCategory_GameEffects)) PURE; + + // NAME: IXAudio2::StartEngine + // DESCRIPTION: Creates and starts the audio processing thread. + // + STDMETHOD(StartEngine) (THIS) PURE; + + // NAME: IXAudio2::StopEngine + // DESCRIPTION: Stops and destroys the audio processing thread. + // + STDMETHOD_(void, StopEngine) (THIS) PURE; + + // NAME: IXAudio2::CommitChanges + // DESCRIPTION: Atomically applies a set of operations previously tagged + // with a given identifier. + // + // ARGUMENTS: + // OperationSet - Identifier of the set of operations to be applied. + // + STDMETHOD(CommitChanges) (THIS_ UINT32 OperationSet) PURE; + + // NAME: IXAudio2::GetPerformanceData + // DESCRIPTION: Returns current resource usage details: memory, CPU, etc. + // + // ARGUMENTS: + // pPerfData - Returns the performance data structure. + // + STDMETHOD_(void, GetPerformanceData) (THIS_ _Out_ XAUDIO2_PERFORMANCE_DATA* pPerfData) PURE; + + // NAME: IXAudio2::SetDebugConfiguration + // DESCRIPTION: Configures XAudio2's debug output (in debug builds only). + // + // ARGUMENTS: + // pDebugConfiguration - Structure describing the debug output behavior. + // pReserved - Optional parameter; must be NULL. + // + STDMETHOD_(void, SetDebugConfiguration) (THIS_ _In_opt_ const XAUDIO2_DEBUG_CONFIGURATION* pDebugConfiguration, + _Reserved_ void* pReserved X2DEFAULT(NULL)) PURE; +}; + +// This interface extends IXAudio2 with additional functionality. +// Use IXAudio2::QueryInterface to obtain a pointer to this interface. +#undef INTERFACE +#define INTERFACE IXAudio2Extension +DECLARE_INTERFACE_(IXAudio2Extension, IUnknown) +{ + // NAME: IXAudio2Extension::QueryInterface + // DESCRIPTION: Queries for a given COM interface on the XAudio2 object. + // Only IID_IUnknown, IID_IXAudio2 and IID_IXaudio2Extension are supported. + // + // ARGUMENTS: + // riid - IID of the interface to be obtained. + // ppvInterface - Returns a pointer to the requested interface. + // + STDMETHOD(QueryInterface) (THIS_ REFIID riid, _COM_Outptr_ void** ppvInterface) PURE; + + // NAME: IXAudio2Extension::AddRef + // DESCRIPTION: Adds a reference to the XAudio2 object. + // + STDMETHOD_(ULONG, AddRef) (THIS) PURE; + + // NAME: IXAudio2Extension::Release + // DESCRIPTION: Releases a reference to the XAudio2 object. + // + STDMETHOD_(ULONG, Release) (THIS) PURE; + + // NAME: IXAudio2Extension::GetProcessingQuantum + // DESCRIPTION: Returns the processing quantum + // quantumMilliseconds = (1000.0f * quantumNumerator / quantumDenominator) + // + // ARGUMENTS: + // quantumNumerator - Quantum numerator + // quantumDenominator - Quantum denominator + // + STDMETHOD_(void, GetProcessingQuantum)(THIS_ _Out_ UINT32* quantumNumerator, _Out_range_(!= , 0) UINT32* quantumDenominator); + + // NAME: IXAudio2Extension::GetProcessor + // DESCRIPTION: Returns the number of the processor used by XAudio2 + // + // ARGUMENTS: + // processor - Non-zero Processor number + // + STDMETHOD_(void, GetProcessor)(THIS_ _Out_range_(!= , 0) XAUDIO2_PROCESSOR* processor); +}; + +/************************************************************************** + * + * IXAudio2Voice: Base voice management interface. + * + **************************************************************************/ + +#undef INTERFACE +#define INTERFACE IXAudio2Voice +DECLARE_INTERFACE(IXAudio2Voice) +{ + // These methods are declared in a macro so that the same declarations + // can be used in the derived voice types (IXAudio2SourceVoice, etc). + + #define Declare_IXAudio2Voice_Methods() \ + \ + /* NAME: IXAudio2Voice::GetVoiceDetails + // DESCRIPTION: Returns the basic characteristics of this voice. + // + // ARGUMENTS: + // pVoiceDetails - Returns the voice's details. + */\ + STDMETHOD_(void, GetVoiceDetails) (THIS_ _Out_ XAUDIO2_VOICE_DETAILS* pVoiceDetails) PURE; \ + \ + /* NAME: IXAudio2Voice::SetOutputVoices + // DESCRIPTION: Replaces the set of submix/mastering voices that receive + // this voice's output. + // + // ARGUMENTS: + // pSendList - Optional list of voices this voice should send audio to. + */\ + STDMETHOD(SetOutputVoices) (THIS_ _In_opt_ const XAUDIO2_VOICE_SENDS* pSendList) PURE; \ + \ + /* NAME: IXAudio2Voice::SetEffectChain + // DESCRIPTION: Replaces this voice's current effect chain with a new one. + // + // ARGUMENTS: + // pEffectChain - Structure describing the new effect chain to be used. + */\ + STDMETHOD(SetEffectChain) (THIS_ _In_opt_ const XAUDIO2_EFFECT_CHAIN* pEffectChain) PURE; \ + \ + /* NAME: IXAudio2Voice::EnableEffect + // DESCRIPTION: Enables an effect in this voice's effect chain. + // + // ARGUMENTS: + // EffectIndex - Index of an effect within this voice's effect chain. + // OperationSet - Used to identify this call as part of a deferred batch. + */\ + STDMETHOD(EnableEffect) (THIS_ UINT32 EffectIndex, \ + UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ + \ + /* NAME: IXAudio2Voice::DisableEffect + // DESCRIPTION: Disables an effect in this voice's effect chain. + // + // ARGUMENTS: + // EffectIndex - Index of an effect within this voice's effect chain. + // OperationSet - Used to identify this call as part of a deferred batch. + */\ + STDMETHOD(DisableEffect) (THIS_ UINT32 EffectIndex, \ + UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ + \ + /* NAME: IXAudio2Voice::GetEffectState + // DESCRIPTION: Returns the running state of an effect. + // + // ARGUMENTS: + // EffectIndex - Index of an effect within this voice's effect chain. + // pEnabled - Returns the enabled/disabled state of the given effect. + */\ + STDMETHOD_(void, GetEffectState) (THIS_ UINT32 EffectIndex, _Out_ BOOL* pEnabled) PURE; \ + \ + /* NAME: IXAudio2Voice::SetEffectParameters + // DESCRIPTION: Sets effect-specific parameters. + // + // REMARKS: Unlike IXAPOParameters::SetParameters, this method may + // be called from any thread. XAudio2 implements + // appropriate synchronization to copy the parameters to the + // realtime audio processing thread. + // + // ARGUMENTS: + // EffectIndex - Index of an effect within this voice's effect chain. + // pParameters - Pointer to an effect-specific parameters block. + // ParametersByteSize - Size of the pParameters array in bytes. + // OperationSet - Used to identify this call as part of a deferred batch. + */\ + STDMETHOD(SetEffectParameters) (THIS_ UINT32 EffectIndex, \ + _In_reads_bytes_(ParametersByteSize) const void* pParameters, \ + UINT32 ParametersByteSize, \ + UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ + \ + /* NAME: IXAudio2Voice::GetEffectParameters + // DESCRIPTION: Obtains the current effect-specific parameters. + // + // ARGUMENTS: + // EffectIndex - Index of an effect within this voice's effect chain. + // pParameters - Returns the current values of the effect-specific parameters. + // ParametersByteSize - Size of the pParameters array in bytes. + */\ + STDMETHOD(GetEffectParameters) (THIS_ UINT32 EffectIndex, \ + _Out_writes_bytes_(ParametersByteSize) void* pParameters, \ + UINT32 ParametersByteSize) PURE; \ + \ + /* NAME: IXAudio2Voice::SetFilterParameters + // DESCRIPTION: Sets this voice's filter parameters. + // + // ARGUMENTS: + // pParameters - Pointer to the filter's parameter structure. + // OperationSet - Used to identify this call as part of a deferred batch. + */\ + STDMETHOD(SetFilterParameters) (THIS_ _In_ const XAUDIO2_FILTER_PARAMETERS* pParameters, \ + UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ + \ + /* NAME: IXAudio2Voice::GetFilterParameters + // DESCRIPTION: Returns this voice's current filter parameters. + // + // ARGUMENTS: + // pParameters - Returns the filter parameters. + */\ + STDMETHOD_(void, GetFilterParameters) (THIS_ _Out_ XAUDIO2_FILTER_PARAMETERS* pParameters) PURE; \ + \ + /* NAME: IXAudio2Voice::SetOutputFilterParameters + // DESCRIPTION: Sets the filter parameters on one of this voice's sends. + // + // ARGUMENTS: + // pDestinationVoice - Destination voice of the send whose filter parameters will be set. + // pParameters - Pointer to the filter's parameter structure. + // OperationSet - Used to identify this call as part of a deferred batch. + */\ + STDMETHOD(SetOutputFilterParameters) (THIS_ _In_opt_ IXAudio2Voice* pDestinationVoice, \ + _In_ const XAUDIO2_FILTER_PARAMETERS* pParameters, \ + UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ + \ + /* NAME: IXAudio2Voice::GetOutputFilterParameters + // DESCRIPTION: Returns the filter parameters from one of this voice's sends. + // + // ARGUMENTS: + // pDestinationVoice - Destination voice of the send whose filter parameters will be read. + // pParameters - Returns the filter parameters. + */\ + STDMETHOD_(void, GetOutputFilterParameters) (THIS_ _In_opt_ IXAudio2Voice* pDestinationVoice, \ + _Out_ XAUDIO2_FILTER_PARAMETERS* pParameters) PURE; \ + \ + /* NAME: IXAudio2Voice::SetVolume + // DESCRIPTION: Sets this voice's overall volume level. + // + // ARGUMENTS: + // Volume - New overall volume level to be used, as an amplitude factor. + // OperationSet - Used to identify this call as part of a deferred batch. + */\ + STDMETHOD(SetVolume) (THIS_ float Volume, \ + UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ + \ + /* NAME: IXAudio2Voice::GetVolume + // DESCRIPTION: Obtains this voice's current overall volume level. + // + // ARGUMENTS: + // pVolume: Returns the voice's current overall volume level. + */\ + STDMETHOD_(void, GetVolume) (THIS_ _Out_ float* pVolume) PURE; \ + \ + /* NAME: IXAudio2Voice::SetChannelVolumes + // DESCRIPTION: Sets this voice's per-channel volume levels. + // + // ARGUMENTS: + // Channels - Used to confirm the voice's channel count. + // pVolumes - Array of per-channel volume levels to be used. + // OperationSet - Used to identify this call as part of a deferred batch. + */\ + STDMETHOD(SetChannelVolumes) (THIS_ UINT32 Channels, _In_reads_(Channels) const float* pVolumes, \ + UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ + \ + /* NAME: IXAudio2Voice::GetChannelVolumes + // DESCRIPTION: Returns this voice's current per-channel volume levels. + // + // ARGUMENTS: + // Channels - Used to confirm the voice's channel count. + // pVolumes - Returns an array of the current per-channel volume levels. + */\ + STDMETHOD_(void, GetChannelVolumes) (THIS_ UINT32 Channels, _Out_writes_(Channels) float* pVolumes) PURE; \ + \ + /* NAME: IXAudio2Voice::SetOutputMatrix + // DESCRIPTION: Sets the volume levels used to mix from each channel of this + // voice's output audio to each channel of a given destination + // voice's input audio. + // + // ARGUMENTS: + // pDestinationVoice - The destination voice whose mix matrix to change. + // SourceChannels - Used to confirm this voice's output channel count + // (the number of channels produced by the last effect in the chain). + // DestinationChannels - Confirms the destination voice's input channels. + // pLevelMatrix - Array of [SourceChannels * DestinationChannels] send + // levels. The level used to send from source channel S to destination + // channel D should be in pLevelMatrix[S + SourceChannels * D]. + // OperationSet - Used to identify this call as part of a deferred batch. + */\ + STDMETHOD(SetOutputMatrix) (THIS_ _In_opt_ IXAudio2Voice* pDestinationVoice, \ + UINT32 SourceChannels, UINT32 DestinationChannels, \ + _In_reads_(SourceChannels * DestinationChannels) const float* pLevelMatrix, \ + UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ + \ + /* NAME: IXAudio2Voice::GetOutputMatrix + // DESCRIPTION: Obtains the volume levels used to send each channel of this + // voice's output audio to each channel of a given destination + // voice's input audio. + // + // ARGUMENTS: + // pDestinationVoice - The destination voice whose mix matrix to obtain. + // SourceChannels - Used to confirm this voice's output channel count + // (the number of channels produced by the last effect in the chain). + // DestinationChannels - Confirms the destination voice's input channels. + // pLevelMatrix - Array of send levels, as above. + */\ + STDMETHOD_(void, GetOutputMatrix) (THIS_ _In_opt_ IXAudio2Voice* pDestinationVoice, \ + UINT32 SourceChannels, UINT32 DestinationChannels, \ + _Out_writes_(SourceChannels * DestinationChannels) float* pLevelMatrix) PURE; \ + \ + /* NAME: IXAudio2Voice::DestroyVoice + // DESCRIPTION: Destroys this voice, stopping it if necessary and removing + // it from the XAudio2 graph. + */\ + STDMETHOD_(void, DestroyVoice) (THIS) PURE + + Declare_IXAudio2Voice_Methods(); +}; + + +/************************************************************************** + * + * IXAudio2SourceVoice: Source voice management interface. + * + **************************************************************************/ + +#undef INTERFACE +#define INTERFACE IXAudio2SourceVoice +DECLARE_INTERFACE_(IXAudio2SourceVoice, IXAudio2Voice) +{ + // Methods from IXAudio2Voice base interface + Declare_IXAudio2Voice_Methods(); + + // NAME: IXAudio2SourceVoice::Start + // DESCRIPTION: Makes this voice start consuming and processing audio. + // + // ARGUMENTS: + // Flags - Flags controlling how the voice should be started. + // OperationSet - Used to identify this call as part of a deferred batch. + // + STDMETHOD(Start) (THIS_ UINT32 Flags X2DEFAULT(0), UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; + + // NAME: IXAudio2SourceVoice::Stop + // DESCRIPTION: Makes this voice stop consuming audio. + // + // ARGUMENTS: + // Flags - Flags controlling how the voice should be stopped. + // OperationSet - Used to identify this call as part of a deferred batch. + // + STDMETHOD(Stop) (THIS_ UINT32 Flags X2DEFAULT(0), UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; + + // NAME: IXAudio2SourceVoice::SubmitSourceBuffer + // DESCRIPTION: Adds a new audio buffer to this voice's input queue. + // + // ARGUMENTS: + // pBuffer - Pointer to the buffer structure to be queued. + // pBufferWMA - Additional structure used only when submitting XWMA data. + // + STDMETHOD(SubmitSourceBuffer) (THIS_ _In_ const XAUDIO2_BUFFER* pBuffer, _In_opt_ const XAUDIO2_BUFFER_WMA* pBufferWMA X2DEFAULT(NULL)) PURE; + + // NAME: IXAudio2SourceVoice::FlushSourceBuffers + // DESCRIPTION: Removes all pending audio buffers from this voice's queue. + // + STDMETHOD(FlushSourceBuffers) (THIS) PURE; + + // NAME: IXAudio2SourceVoice::Discontinuity + // DESCRIPTION: Notifies the voice of an intentional break in the stream of + // audio buffers (e.g. the end of a sound), to prevent XAudio2 + // from interpreting an empty buffer queue as a glitch. + // + STDMETHOD(Discontinuity) (THIS) PURE; + + // NAME: IXAudio2SourceVoice::ExitLoop + // DESCRIPTION: Breaks out of the current loop when its end is reached. + // + // ARGUMENTS: + // OperationSet - Used to identify this call as part of a deferred batch. + // + STDMETHOD(ExitLoop) (THIS_ UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; + + // NAME: IXAudio2SourceVoice::GetState + // DESCRIPTION: Returns the number of buffers currently queued on this voice, + // the pContext value associated with the currently processing + // buffer (if any), and other voice state information. + // + // ARGUMENTS: + // pVoiceState - Returns the state information. + // Flags - Flags controlling what voice state is returned. + // + STDMETHOD_(void, GetState) (THIS_ _Out_ XAUDIO2_VOICE_STATE* pVoiceState, UINT32 Flags X2DEFAULT(0)) PURE; + + // NAME: IXAudio2SourceVoice::SetFrequencyRatio + // DESCRIPTION: Sets this voice's frequency adjustment, i.e. its pitch. + // + // ARGUMENTS: + // Ratio - Frequency change, expressed as source frequency / target frequency. + // OperationSet - Used to identify this call as part of a deferred batch. + // + STDMETHOD(SetFrequencyRatio) (THIS_ float Ratio, + UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; + + // NAME: IXAudio2SourceVoice::GetFrequencyRatio + // DESCRIPTION: Returns this voice's current frequency adjustment ratio. + // + // ARGUMENTS: + // pRatio - Returns the frequency adjustment. + // + STDMETHOD_(void, GetFrequencyRatio) (THIS_ _Out_ float* pRatio) PURE; + + // NAME: IXAudio2SourceVoice::SetSourceSampleRate + // DESCRIPTION: Reconfigures this voice to treat its source data as being + // at a different sample rate than the original one specified + // in CreateSourceVoice's pSourceFormat argument. + // + // ARGUMENTS: + // UINT32 - The intended sample rate of further submitted source data. + // + STDMETHOD(SetSourceSampleRate) (THIS_ UINT32 NewSourceSampleRate) PURE; +}; + + +/************************************************************************** + * + * IXAudio2SubmixVoice: Submixing voice management interface. + * + **************************************************************************/ + +#undef INTERFACE +#define INTERFACE IXAudio2SubmixVoice +DECLARE_INTERFACE_(IXAudio2SubmixVoice, IXAudio2Voice) +{ + // Methods from IXAudio2Voice base interface + Declare_IXAudio2Voice_Methods(); + + // There are currently no methods specific to submix voices. +}; + + +/************************************************************************** + * + * IXAudio2MasteringVoice: Mastering voice management interface. + * + **************************************************************************/ + +#undef INTERFACE +#define INTERFACE IXAudio2MasteringVoice +DECLARE_INTERFACE_(IXAudio2MasteringVoice, IXAudio2Voice) +{ + // Methods from IXAudio2Voice base interface + Declare_IXAudio2Voice_Methods(); + + // NAME: IXAudio2MasteringVoice::GetChannelMask + // DESCRIPTION: Returns the channel mask for this voice + // + // ARGUMENTS: + // pChannelMask - returns the channel mask for this voice. This corresponds + // to the dwChannelMask member of WAVEFORMATEXTENSIBLE. + // + STDMETHOD(GetChannelMask) (THIS_ _Out_ DWORD* pChannelmask) PURE; +}; + + +/************************************************************************** + * + * IXAudio2EngineCallback: Client notification interface for engine events. + * + * REMARKS: Contains methods to notify the client when certain events happen + * in the XAudio2 engine. This interface should be implemented by + * the client. XAudio2 will call these methods via the interface + * pointer provided by the client when it calls + * IXAudio2::RegisterForCallbacks. + * + **************************************************************************/ + +#undef INTERFACE +#define INTERFACE IXAudio2EngineCallback +DECLARE_INTERFACE(IXAudio2EngineCallback) +{ + // Called by XAudio2 just before an audio processing pass begins. + STDMETHOD_(void, OnProcessingPassStart) (THIS) PURE; + + // Called just after an audio processing pass ends. + STDMETHOD_(void, OnProcessingPassEnd) (THIS) PURE; + + // Called in the event of a critical system error which requires XAudio2 + // to be closed down and restarted. The error code is given in Error. + STDMETHOD_(void, OnCriticalError) (THIS_ HRESULT Error) PURE; +}; + + +/************************************************************************** + * + * IXAudio2VoiceCallback: Client notification interface for voice events. + * + * REMARKS: Contains methods to notify the client when certain events happen + * in an XAudio2 voice. This interface should be implemented by the + * client. XAudio2 will call these methods via an interface pointer + * provided by the client in the IXAudio2::CreateSourceVoice call. + * + **************************************************************************/ + +#undef INTERFACE +#define INTERFACE IXAudio2VoiceCallback +DECLARE_INTERFACE(IXAudio2VoiceCallback) +{ + // Called just before this voice's processing pass begins. + STDMETHOD_(void, OnVoiceProcessingPassStart) (THIS_ UINT32 BytesRequired) PURE; + + // Called just after this voice's processing pass ends. + STDMETHOD_(void, OnVoiceProcessingPassEnd) (THIS) PURE; + + // Called when this voice has just finished playing a buffer stream + // (as marked with the XAUDIO2_END_OF_STREAM flag on the last buffer). + STDMETHOD_(void, OnStreamEnd) (THIS) PURE; + + // Called when this voice is about to start processing a new buffer. + STDMETHOD_(void, OnBufferStart) (THIS_ void* pBufferContext) PURE; + + // Called when this voice has just finished processing a buffer. + // The buffer can now be reused or destroyed. + STDMETHOD_(void, OnBufferEnd) (THIS_ void* pBufferContext) PURE; + + // Called when this voice has just reached the end position of a loop. + STDMETHOD_(void, OnLoopEnd) (THIS_ void* pBufferContext) PURE; + + // Called in the event of a critical error during voice processing, + // such as a failing xAPO or an error from the hardware XMA decoder. + // The voice may have to be destroyed and re-created to recover from + // the error. The callback arguments report which buffer was being + // processed when the error occurred, and its HRESULT code. + STDMETHOD_(void, OnVoiceError) (THIS_ void* pBufferContext, HRESULT Error) PURE; +}; + + +/************************************************************************** + * + * Macros to make it easier to use the XAudio2 COM interfaces in C code. + * + **************************************************************************/ + +#ifndef __cplusplus + +// IXAudio2 +#define IXAudio2_QueryInterface(This,riid,ppvInterface) ((This)->lpVtbl->QueryInterface(This,riid,ppvInterface)) +#define IXAudio2_AddRef(This) ((This)->lpVtbl->AddRef(This)) +#define IXAudio2_Release(This) ((This)->lpVtbl->Release(This)) +#define IXAudio2_RegisterForCallbacks(This,pCallback) ((This)->lpVtbl->RegisterForCallbacks(This,pCallback)) +#define IXAudio2_UnregisterForCallbacks(This,pCallback) ((This)->lpVtbl->UnregisterForCallbacks(This,pCallback)) +#define IXAudio2_CreateSourceVoice(This,ppSourceVoice,pSourceFormat,Flags,MaxFrequencyRatio,pCallback,pSendList,pEffectChain) ((This)->lpVtbl->CreateSourceVoice(This,ppSourceVoice,pSourceFormat,Flags,MaxFrequencyRatio,pCallback,pSendList,pEffectChain)) +#define IXAudio2_CreateSubmixVoice(This,ppSubmixVoice,InputChannels,InputSampleRate,Flags,ProcessingStage,pSendList,pEffectChain) ((This)->lpVtbl->CreateSubmixVoice(This,ppSubmixVoice,InputChannels,InputSampleRate,Flags,ProcessingStage,pSendList,pEffectChain)) +#define IXAudio2_CreateMasteringVoice(This,ppMasteringVoice,InputChannels,InputSampleRate,Flags,DeviceId,pEffectChain,StreamCategory) ((This)->lpVtbl->CreateMasteringVoice(This,ppMasteringVoice,InputChannels,InputSampleRate,Flags,DeviceId,pEffectChain,StreamCategory)) +#define IXAudio2_StartEngine(This) ((This)->lpVtbl->StartEngine(This)) +#define IXAudio2_StopEngine(This) ((This)->lpVtbl->StopEngine(This)) +#define IXAudio2_CommitChanges(This,OperationSet) ((This)->lpVtbl->CommitChanges(This,OperationSet)) +#define IXAudio2_GetPerformanceData(This,pPerfData) ((This)->lpVtbl->GetPerformanceData(This,pPerfData)) +#define IXAudio2_SetDebugConfiguration(This,pDebugConfiguration,pReserved) ((This)->lpVtbl->SetDebugConfiguration(This,pDebugConfiguration,pReserved)) + +// IXAudio2Extension +#define IXAudio2Extension_GetProcessingQuantum(This,quantumNumerator,quantumDenominator) ((This)->lpVtbl->GetProcessingQuantum(This,quantumNumerator,quantumDenominator)) +#define IXAudio2Extension_GetProcessor(This,processor) ((This)->lpVtbl->GetProcessor(This,processor)) + +// IXAudio2Voice +#define IXAudio2Voice_GetVoiceDetails(This,pVoiceDetails) ((This)->lpVtbl->GetVoiceDetails(This,pVoiceDetails)) +#define IXAudio2Voice_SetOutputVoices(This,pSendList) ((This)->lpVtbl->SetOutputVoices(This,pSendList)) +#define IXAudio2Voice_SetEffectChain(This,pEffectChain) ((This)->lpVtbl->SetEffectChain(This,pEffectChain)) +#define IXAudio2Voice_EnableEffect(This,EffectIndex,OperationSet) ((This)->lpVtbl->EnableEffect(This,EffectIndex,OperationSet)) +#define IXAudio2Voice_DisableEffect(This,EffectIndex,OperationSet) ((This)->lpVtbl->DisableEffect(This,EffectIndex,OperationSet)) +#define IXAudio2Voice_GetEffectState(This,EffectIndex,pEnabled) ((This)->lpVtbl->GetEffectState(This,EffectIndex,pEnabled)) +#define IXAudio2Voice_SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize, OperationSet) ((This)->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet)) +#define IXAudio2Voice_GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize) ((This)->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize)) +#define IXAudio2Voice_SetFilterParameters(This,pParameters,OperationSet) ((This)->lpVtbl->SetFilterParameters(This,pParameters,OperationSet)) +#define IXAudio2Voice_GetFilterParameters(This,pParameters) ((This)->lpVtbl->GetFilterParameters(This,pParameters)) +#define IXAudio2Voice_SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet) ((This)->lpVtbl->SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet)) +#define IXAudio2Voice_GetOutputFilterParameters(This,pDestinationVoice,pParameters) ((This)->lpVtbl->GetOutputFilterParameters(This,pDestinationVoice,pParameters)) +#define IXAudio2Voice_SetVolume(This,Volume,OperationSet) ((This)->lpVtbl->SetVolume(This,Volume,OperationSet)) +#define IXAudio2Voice_GetVolume(This,pVolume) ((This)->lpVtbl->GetVolume(This,pVolume)) +#define IXAudio2Voice_SetChannelVolumes(This,Channels,pVolumes,OperationSet) ((This)->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet)) +#define IXAudio2Voice_GetChannelVolumes(This,Channels,pVolumes) ((This)->lpVtbl->GetChannelVolumes(This,Channels,pVolumes)) +#define IXAudio2Voice_SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet) ((This)->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet)) +#define IXAudio2Voice_GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix) ((This)->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix)) +#define IXAudio2Voice_DestroyVoice(This) ((This)->lpVtbl->DestroyVoice(This)) + +// IXAudio2SourceVoice +#define IXAudio2SourceVoice_GetVoiceDetails IXAudio2Voice_GetVoiceDetails +#define IXAudio2SourceVoice_SetOutputVoices IXAudio2Voice_SetOutputVoices +#define IXAudio2SourceVoice_SetEffectChain IXAudio2Voice_SetEffectChain +#define IXAudio2SourceVoice_EnableEffect IXAudio2Voice_EnableEffect +#define IXAudio2SourceVoice_DisableEffect IXAudio2Voice_DisableEffect +#define IXAudio2SourceVoice_GetEffectState IXAudio2Voice_GetEffectState +#define IXAudio2SourceVoice_SetEffectParameters IXAudio2Voice_SetEffectParameters +#define IXAudio2SourceVoice_GetEffectParameters IXAudio2Voice_GetEffectParameters +#define IXAudio2SourceVoice_SetFilterParameters IXAudio2Voice_SetFilterParameters +#define IXAudio2SourceVoice_GetFilterParameters IXAudio2Voice_GetFilterParameters +#define IXAudio2SourceVoice_SetOutputFilterParameters IXAudio2Voice_SetOutputFilterParameters +#define IXAudio2SourceVoice_GetOutputFilterParameters IXAudio2Voice_GetOutputFilterParameters +#define IXAudio2SourceVoice_SetVolume IXAudio2Voice_SetVolume +#define IXAudio2SourceVoice_GetVolume IXAudio2Voice_GetVolume +#define IXAudio2SourceVoice_SetChannelVolumes IXAudio2Voice_SetChannelVolumes +#define IXAudio2SourceVoice_GetChannelVolumes IXAudio2Voice_GetChannelVolumes +#define IXAudio2SourceVoice_SetOutputMatrix IXAudio2Voice_SetOutputMatrix +#define IXAudio2SourceVoice_GetOutputMatrix IXAudio2Voice_GetOutputMatrix +#define IXAudio2SourceVoice_DestroyVoice IXAudio2Voice_DestroyVoice +#define IXAudio2SourceVoice_Start(This,Flags,OperationSet) ((This)->lpVtbl->Start(This,Flags,OperationSet)) +#define IXAudio2SourceVoice_Stop(This,Flags,OperationSet) ((This)->lpVtbl->Stop(This,Flags,OperationSet)) +#define IXAudio2SourceVoice_SubmitSourceBuffer(This,pBuffer,pBufferWMA) ((This)->lpVtbl->SubmitSourceBuffer(This,pBuffer,pBufferWMA)) +#define IXAudio2SourceVoice_FlushSourceBuffers(This) ((This)->lpVtbl->FlushSourceBuffers(This)) +#define IXAudio2SourceVoice_Discontinuity(This) ((This)->lpVtbl->Discontinuity(This)) +#define IXAudio2SourceVoice_ExitLoop(This,OperationSet) ((This)->lpVtbl->ExitLoop(This,OperationSet)) +#define IXAudio2SourceVoice_GetState(This,pVoiceState,Flags) ((This)->lpVtbl->GetState(This,pVoiceState,Flags)) +#define IXAudio2SourceVoice_SetFrequencyRatio(This,Ratio,OperationSet) ((This)->lpVtbl->SetFrequencyRatio(This,Ratio,OperationSet)) +#define IXAudio2SourceVoice_GetFrequencyRatio(This,pRatio) ((This)->lpVtbl->GetFrequencyRatio(This,pRatio)) +#define IXAudio2SourceVoice_SetSourceSampleRate(This,NewSourceSampleRate) ((This)->lpVtbl->SetSourceSampleRate(This,NewSourceSampleRate)) + +// IXAudio2SubmixVoice +#define IXAudio2SubmixVoice_GetVoiceDetails IXAudio2Voice_GetVoiceDetails +#define IXAudio2SubmixVoice_SetOutputVoices IXAudio2Voice_SetOutputVoices +#define IXAudio2SubmixVoice_SetEffectChain IXAudio2Voice_SetEffectChain +#define IXAudio2SubmixVoice_EnableEffect IXAudio2Voice_EnableEffect +#define IXAudio2SubmixVoice_DisableEffect IXAudio2Voice_DisableEffect +#define IXAudio2SubmixVoice_GetEffectState IXAudio2Voice_GetEffectState +#define IXAudio2SubmixVoice_SetEffectParameters IXAudio2Voice_SetEffectParameters +#define IXAudio2SubmixVoice_GetEffectParameters IXAudio2Voice_GetEffectParameters +#define IXAudio2SubmixVoice_SetFilterParameters IXAudio2Voice_SetFilterParameters +#define IXAudio2SubmixVoice_GetFilterParameters IXAudio2Voice_GetFilterParameters +#define IXAudio2SubmixVoice_SetOutputFilterParameters IXAudio2Voice_SetOutputFilterParameters +#define IXAudio2SubmixVoice_GetOutputFilterParameters IXAudio2Voice_GetOutputFilterParameters +#define IXAudio2SubmixVoice_SetVolume IXAudio2Voice_SetVolume +#define IXAudio2SubmixVoice_GetVolume IXAudio2Voice_GetVolume +#define IXAudio2SubmixVoice_SetChannelVolumes IXAudio2Voice_SetChannelVolumes +#define IXAudio2SubmixVoice_GetChannelVolumes IXAudio2Voice_GetChannelVolumes +#define IXAudio2SubmixVoice_SetOutputMatrix IXAudio2Voice_SetOutputMatrix +#define IXAudio2SubmixVoice_GetOutputMatrix IXAudio2Voice_GetOutputMatrix +#define IXAudio2SubmixVoice_DestroyVoice IXAudio2Voice_DestroyVoice + +// IXAudio2MasteringVoice +#define IXAudio2MasteringVoice_GetVoiceDetails IXAudio2Voice_GetVoiceDetails +#define IXAudio2MasteringVoice_SetOutputVoices IXAudio2Voice_SetOutputVoices +#define IXAudio2MasteringVoice_SetEffectChain IXAudio2Voice_SetEffectChain +#define IXAudio2MasteringVoice_EnableEffect IXAudio2Voice_EnableEffect +#define IXAudio2MasteringVoice_DisableEffect IXAudio2Voice_DisableEffect +#define IXAudio2MasteringVoice_GetEffectState IXAudio2Voice_GetEffectState +#define IXAudio2MasteringVoice_SetEffectParameters IXAudio2Voice_SetEffectParameters +#define IXAudio2MasteringVoice_GetEffectParameters IXAudio2Voice_GetEffectParameters +#define IXAudio2MasteringVoice_SetFilterParameters IXAudio2Voice_SetFilterParameters +#define IXAudio2MasteringVoice_GetFilterParameters IXAudio2Voice_GetFilterParameters +#define IXAudio2MasteringVoice_SetOutputFilterParameters IXAudio2Voice_SetOutputFilterParameters +#define IXAudio2MasteringVoice_GetOutputFilterParameters IXAudio2Voice_GetOutputFilterParameters +#define IXAudio2MasteringVoice_SetVolume IXAudio2Voice_SetVolume +#define IXAudio2MasteringVoice_GetVolume IXAudio2Voice_GetVolume +#define IXAudio2MasteringVoice_SetChannelVolumes IXAudio2Voice_SetChannelVolumes +#define IXAudio2MasteringVoice_GetChannelVolumes IXAudio2Voice_GetChannelVolumes +#define IXAudio2MasteringVoice_SetOutputMatrix IXAudio2Voice_SetOutputMatrix +#define IXAudio2MasteringVoice_GetOutputMatrix IXAudio2Voice_GetOutputMatrix +#define IXAudio2MasteringVoice_DestroyVoice IXAudio2Voice_DestroyVoice +#define IXAudio2MasteringVoice_GetChannelMask(This,pChannelMask) ((This)->lpVtbl->GetChannelMask(This,pChannelMask)) + +#endif // #ifndef __cplusplus + + +/************************************************************************** + * + * Utility functions used to convert from pitch in semitones and volume + * in decibels to the frequency and amplitude ratio units used by XAudio2. + * These are only defined if the client #defines XAUDIO2_HELPER_FUNCTIONS + * prior to #including xaudio2.h. + * + **************************************************************************/ + +#ifdef XAUDIO2_HELPER_FUNCTIONS + +#define _USE_MATH_DEFINES // Make math.h define M_PI +#include // For powf, log10f, sinf and asinf + +// Calculate the argument to SetVolume from a decibel value +__inline float XAudio2DecibelsToAmplitudeRatio(float Decibels) +{ + return powf(10.0f, Decibels / 20.0f); +} + +// Recover a volume in decibels from an amplitude factor +__inline float XAudio2AmplitudeRatioToDecibels(float Volume) +{ + if (Volume == 0) + { + return -3.402823466e+38f; // Smallest float value (-FLT_MAX) + } + return 20.0f * log10f(Volume); +} + +// Calculate the argument to SetFrequencyRatio from a semitone value +__inline float XAudio2SemitonesToFrequencyRatio(float Semitones) +{ + // FrequencyRatio = 2 ^ Octaves + // = 2 ^ (Semitones / 12) + return powf(2.0f, Semitones / 12.0f); +} + +// Recover a pitch in semitones from a frequency ratio +__inline float XAudio2FrequencyRatioToSemitones(float FrequencyRatio) +{ + // Semitones = 12 * log2(FrequencyRatio) + // = 12 * log2(10) * log10(FrequencyRatio) + return 39.86313713864835f * log10f(FrequencyRatio); +} + +// Convert from filter cutoff frequencies expressed in Hertz to the radian +// frequency values used in XAUDIO2_FILTER_PARAMETERS.Frequency, state-variable +// filter types only. Use XAudio2CutoffFrequencyToOnePoleCoefficient() for one-pole filter types. +// Note that the highest CutoffFrequency supported is SampleRate/6. +// Higher values of CutoffFrequency will return XAUDIO2_MAX_FILTER_FREQUENCY. +__inline float XAudio2CutoffFrequencyToRadians(float CutoffFrequency, UINT32 SampleRate) +{ + if ((UINT32)(CutoffFrequency * 6.0f) >= SampleRate) + { + return XAUDIO2_MAX_FILTER_FREQUENCY; + } + return 2.0f * sinf((float)M_PI * CutoffFrequency / (float)SampleRate); +} + +// Convert from radian frequencies back to absolute frequencies in Hertz +__inline float XAudio2RadiansToCutoffFrequency(float Radians, float SampleRate) +{ + return SampleRate * asinf(Radians / 2.0f) / (float)M_PI; +} + +// Convert from filter cutoff frequencies expressed in Hertz to the filter +// coefficients used with XAUDIO2_FILTER_PARAMETERS.Frequency, +// LowPassOnePoleFilter and HighPassOnePoleFilter filter types only. +// Use XAudio2CutoffFrequencyToRadians() for state-variable filter types. +__inline float XAudio2CutoffFrequencyToOnePoleCoefficient(float CutoffFrequency, UINT32 SampleRate) +{ + if ((UINT32)CutoffFrequency >= SampleRate) + { + return XAUDIO2_MAX_FILTER_FREQUENCY; + } + return ( 1.0f - powf(1.0f - 2.0f * CutoffFrequency / (float)SampleRate, 2.0f) ); +} + + +#endif // #ifdef XAUDIO2_HELPER_FUNCTIONS + + +/************************************************************************** + * + * XAudio2Create: Top-level function that creates an XAudio2 instance. + * + * ARGUMENTS: + * + * Flags - Flags specifying the XAudio2 object's behavior. + * + * XAudio2Processor - An XAUDIO2_PROCESSOR value that specifies the + * hardware threads (Xbox) or processors (Windows) that XAudio2 + * will use. Note that XAudio2 supports concurrent processing on + * multiple threads, using any combination of XAUDIO2_PROCESSOR + * flags. The values are platform-specific; platform-independent + * code can use XAUDIO2_USE_DEFAULT_PROCESSOR to use the default on + * each platform. + * + **************************************************************************/ + +// We're an xaudio2 client +#define XAUDIO2_STDAPI EXTERN_C DECLSPEC_IMPORT HRESULT STDAPICALLTYPE + +XAUDIO2_STDAPI XAudio2Create(_Outptr_ IXAudio2** ppXAudio2, UINT32 Flags X2DEFAULT(0), + XAUDIO2_PROCESSOR XAudio2Processor X2DEFAULT(XAUDIO2_USE_DEFAULT_PROCESSOR)); + +// Undo the #pragma pack(push, 1) directive at the top of this file +#pragma pack(pop) + +#endif // #ifndef GUID_DEFS_ONLY + +#endif // #ifndef __XAUDIO2_INCLUDED__ + diff --git a/3rdparty/XAudio2Redist/libs/xaudio2_9redist.lib b/3rdparty/XAudio2Redist/libs/xaudio2_9redist.lib index 815774a2b939a07dd518d00129e0c252d16783bf..7678dd5c20e434ca8a103be0734f900fa8c8e9e7 100644 GIT binary patch delta 88 zcmZ1?zC?V35ev(#)4g9Oo3ZR*JUCg9U1PF1s}2Ba9LxZH8y}GX delta 88 zcmZ1?zC?V35erMzYxS#>%~*CY?wBmdt}$7h)rxV)<{(xrMi%Wgbtfh_uuTBV7ywBp m_6pWZQEGpmPHtqApL~yf23SUg(;+!Ow?Hp5Wyj(r9LxY%X&)Q_ diff --git a/bin/xaudio2_9redist.dll b/bin/xaudio2_9redist.dll index 552f0ef02bf02b2054277ba31db9880a004fe845..e41b2c60b9be8252a5ccde76dd19b86a376f2e73 100755 GIT binary patch delta 133252 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 I;0z3Z2Xx!T>;M1& delta 133052 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