Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1 | pmbaty | 1 | /************************************************************************** |
2 | * |
||
3 | * Copyright (c) Microsoft Corporation. All rights reserved. |
||
4 | * |
||
5 | * File: xaudio2.h |
||
6 | * Content: Declarations for the XAudio2 game audio API. |
||
7 | * |
||
8 | **************************************************************************/ |
||
9 | |||
10 | #ifndef __XAUDIO2_INCLUDED__ |
||
11 | #define __XAUDIO2_INCLUDED__ |
||
12 | |||
13 | |||
14 | /************************************************************************** |
||
15 | * |
||
16 | * XAudio2 COM object class and interface IDs. |
||
17 | * |
||
18 | **************************************************************************/ |
||
19 | |||
20 | #include <comdecl.h> // For DEFINE_CLSID and DEFINE_IID |
||
21 | |||
22 | // XAudio 2.0 (March 2008 SDK) |
||
23 | //DEFINE_CLSID(XAudio2, fac23f48, 31f5, 45a8, b4, 9b, 52, 25, d6, 14, 01, aa); |
||
24 | //DEFINE_CLSID(XAudio2_Debug, fac23f48, 31f5, 45a8, b4, 9b, 52, 25, d6, 14, 01, db); |
||
25 | |||
26 | // XAudio 2.1 (June 2008 SDK) |
||
27 | //DEFINE_CLSID(XAudio2, e21a7345, eb21, 468e, be, 50, 80, 4d, b9, 7c, f7, 08); |
||
28 | //DEFINE_CLSID(XAudio2_Debug, f7a76c21, 53d4, 46bb, ac, 53, 8b, 45, 9c, ae, 46, bd); |
||
29 | |||
30 | // XAudio 2.2 (August 2008 SDK) |
||
31 | //DEFINE_CLSID(XAudio2, b802058a, 464a, 42db, bc, 10, b6, 50, d6, f2, 58, 6a); |
||
32 | //DEFINE_CLSID(XAudio2_Debug, 97dfb7e7, 5161, 4015, 87, a9, c7, 9e, 6a, 19, 52, cc); |
||
33 | |||
34 | // XAudio 2.3 (November 2008 SDK) |
||
35 | //DEFINE_CLSID(XAudio2, 4c5e637a, 16c7, 4de3, 9c, 46, 5e, d2, 21, 81, 96, 2d); |
||
36 | //DEFINE_CLSID(XAudio2_Debug, ef0aa05d, 8075, 4e5d, be, ad, 45, be, 0c, 3c, cb, b3); |
||
37 | |||
38 | // XAudio 2.4 (March 2009 SDK) |
||
39 | //DEFINE_CLSID(XAudio2, 03219e78, 5bc3, 44d1, b9, 2e, f6, 3d, 89, cc, 65, 26); |
||
40 | //DEFINE_CLSID(XAudio2_Debug, 4256535c, 1ea4, 4d4b, 8a, d5, f9, db, 76, 2e, ca, 9e); |
||
41 | |||
42 | // XAudio 2.5 (August 2009 SDK) |
||
43 | DEFINE_CLSID(XAudio2, 4c9b6dde, 6809, 46e6, a2, 78, 9b, 6a, 97, 58, 86, 70); |
||
44 | DEFINE_CLSID(XAudio2_Debug, 715bdd1a, aa82, 436b, b0, fa, 6a, ce, a3, 9b, d0, a1); |
||
45 | |||
46 | DEFINE_IID(IXAudio2, 8bcf1f58, 9fe7, 4583, 8a, c6, e2, ad, c4, 65, c8, bb); |
||
47 | |||
48 | |||
49 | // Ignore the rest of this header if only the GUID definitions were requested |
||
50 | #ifndef GUID_DEFS_ONLY |
||
51 | |||
52 | #ifdef _XBOX |
||
53 | #include <xobjbase.h> // Xbox COM declarations (IUnknown, etc) |
||
54 | #else |
||
55 | #include <objbase.h> // Windows COM declarations |
||
56 | #endif |
||
57 | |||
58 | #include <sal.h> // Markers for documenting API semantics |
||
59 | #include <audiodefs.h> // Basic audio data types and constants |
||
60 | #include <xma2defs.h> // Data types and constants for XMA2 audio |
||
61 | |||
62 | // All structures defined in this file use tight field packing |
||
63 | #pragma pack(push, 1) |
||
64 | |||
65 | |||
66 | /************************************************************************** |
||
67 | * |
||
68 | * XAudio2 constants, flags and error codes. |
||
69 | * |
||
70 | **************************************************************************/ |
||
71 | |||
72 | // Numeric boundary values |
||
73 | #define XAUDIO2_MAX_BUFFER_BYTES 0x80000000 // Maximum bytes allowed in a source buffer |
||
74 | #define XAUDIO2_MAX_QUEUED_BUFFERS 64 // Maximum buffers allowed in a voice queue |
||
75 | #define XAUDIO2_MAX_BUFFERS_SYSTEM 2 // Maximum buffers allowed for system threads (Xbox 360 only) |
||
76 | #define XAUDIO2_MAX_AUDIO_CHANNELS 64 // Maximum channels in an audio stream |
||
77 | #define XAUDIO2_MIN_SAMPLE_RATE 1000 // Minimum audio sample rate supported |
||
78 | #define XAUDIO2_MAX_SAMPLE_RATE 200000 // Maximum audio sample rate supported |
||
79 | #define XAUDIO2_MAX_VOLUME_LEVEL 16777216.0f // Maximum acceptable volume level (2^24) |
||
80 | #define XAUDIO2_MIN_FREQ_RATIO (1/1024.0f) // Minimum SetFrequencyRatio argument |
||
81 | #define XAUDIO2_MAX_FREQ_RATIO 1024.0f // Maximum MaxFrequencyRatio argument |
||
82 | #define XAUDIO2_DEFAULT_FREQ_RATIO 2.0f // Default MaxFrequencyRatio argument |
||
83 | #define XAUDIO2_MAX_FILTER_ONEOVERQ 1.5f // Maximum XAUDIO2_FILTER_PARAMETERS.OneOverQ |
||
84 | #define XAUDIO2_MAX_FILTER_FREQUENCY 1.0f // Maximum XAUDIO2_FILTER_PARAMETERS.Frequency |
||
85 | #define XAUDIO2_MAX_LOOP_COUNT 254 // Maximum non-infinite XAUDIO2_BUFFER.LoopCount |
||
86 | #define XAUDIO2_MAX_INSTANCES 8 // Maximum simultaneous XAudio2 objects on Xbox 360 |
||
87 | |||
88 | // For XMA voices on Xbox 360 there is an additional restriction on the MaxFrequencyRatio |
||
89 | // argument and the voice's sample rate: the product of these numbers cannot exceed 600000 |
||
90 | // for one-channel voices or 300000 for voices with more than one channel. |
||
91 | #define XAUDIO2_MAX_RATIO_TIMES_RATE_XMA_MONO 600000 |
||
92 | #define XAUDIO2_MAX_RATIO_TIMES_RATE_XMA_MULTICHANNEL 300000 |
||
93 | |||
94 | // Numeric values with special meanings |
||
95 | #define XAUDIO2_COMMIT_NOW 0 // Used as an OperationSet argument |
||
96 | #define XAUDIO2_COMMIT_ALL 0 // Used in IXAudio2::CommitChanges |
||
97 | #define XAUDIO2_INVALID_OPSET (UINT32)(-1) // Not allowed for OperationSet arguments |
||
98 | #define XAUDIO2_NO_LOOP_REGION 0 // Used in XAUDIO2_BUFFER.LoopCount |
||
99 | #define XAUDIO2_LOOP_INFINITE 255 // Used in XAUDIO2_BUFFER.LoopCount |
||
100 | #define XAUDIO2_DEFAULT_CHANNELS 0 // Used in CreateMasteringVoice |
||
101 | #define XAUDIO2_DEFAULT_SAMPLERATE 0 // Used in CreateMasteringVoice |
||
102 | |||
103 | // Flags |
||
104 | #define XAUDIO2_DEBUG_ENGINE 0x0001 // Used in XAudio2Create on Windows only |
||
105 | #define XAUDIO2_VOICE_NOPITCH 0x0002 // Used in IXAudio2::CreateSourceVoice |
||
106 | #define XAUDIO2_VOICE_NOSRC 0x0004 // Used in IXAudio2::CreateSourceVoice |
||
107 | #define XAUDIO2_VOICE_USEFILTER 0x0008 // Used in IXAudio2::CreateSource/SubmixVoice |
||
108 | #define XAUDIO2_VOICE_MUSIC 0x0010 // Used in IXAudio2::CreateSourceVoice |
||
109 | #define XAUDIO2_PLAY_TAILS 0x0020 // Used in IXAudio2SourceVoice::Stop |
||
110 | #define XAUDIO2_END_OF_STREAM 0x0040 // Used in XAUDIO2_BUFFER.Flags |
||
111 | #define XAUDIO2_SEND_USEFILTER 0x0080 // Used in XAUDIO2_SEND_DESCRIPTOR.Flags |
||
112 | |||
113 | // Default parameters for the built-in filter |
||
114 | #define XAUDIO2_DEFAULT_FILTER_TYPE LowPassFilter |
||
115 | #define XAUDIO2_DEFAULT_FILTER_FREQUENCY XAUDIO2_MAX_FILTER_FREQUENCY |
||
116 | #define XAUDIO2_DEFAULT_FILTER_ONEOVERQ 1.0f |
||
117 | |||
118 | // Internal XAudio2 constants |
||
119 | #ifdef _XBOX |
||
120 | #define XAUDIO2_QUANTUM_NUMERATOR 2 // On Xbox 360, XAudio2 processes audio |
||
121 | #define XAUDIO2_QUANTUM_DENOMINATOR 375 // in 5.333ms chunks (= 2/375 seconds) |
||
122 | #else |
||
123 | #define XAUDIO2_QUANTUM_NUMERATOR 1 // On Windows, XAudio2 processes audio |
||
124 | #define XAUDIO2_QUANTUM_DENOMINATOR 100 // in 10ms chunks (= 1/100 seconds) |
||
125 | #endif |
||
126 | #define XAUDIO2_QUANTUM_MS (1000.0f * XAUDIO2_QUANTUM_NUMERATOR / XAUDIO2_QUANTUM_DENOMINATOR) |
||
127 | |||
128 | // XAudio2 error codes |
||
129 | #define FACILITY_XAUDIO2 0x896 |
||
130 | #define XAUDIO2_E_INVALID_CALL 0x88960001 // An API call or one of its arguments was illegal |
||
131 | #define XAUDIO2_E_XMA_DECODER_ERROR 0x88960002 // The XMA hardware suffered an unrecoverable error |
||
132 | #define XAUDIO2_E_XAPO_CREATION_FAILED 0x88960003 // XAudio2 failed to initialize an XAPO effect |
||
133 | #define XAUDIO2_E_DEVICE_INVALIDATED 0x88960004 // An audio device became unusable (unplugged, etc) |
||
134 | |||
135 | |||
136 | /************************************************************************** |
||
137 | * |
||
138 | * Forward declarations for the XAudio2 interfaces. |
||
139 | * |
||
140 | **************************************************************************/ |
||
141 | |||
142 | #ifdef __cplusplus |
||
143 | #define FWD_DECLARE(x) interface x |
||
144 | #else |
||
145 | #define FWD_DECLARE(x) typedef interface x x |
||
146 | #endif |
||
147 | |||
148 | FWD_DECLARE(IXAudio2); |
||
149 | FWD_DECLARE(IXAudio2Voice); |
||
150 | FWD_DECLARE(IXAudio2SourceVoice); |
||
151 | FWD_DECLARE(IXAudio2SubmixVoice); |
||
152 | FWD_DECLARE(IXAudio2MasteringVoice); |
||
153 | FWD_DECLARE(IXAudio2EngineCallback); |
||
154 | FWD_DECLARE(IXAudio2VoiceCallback); |
||
155 | |||
156 | |||
157 | /************************************************************************** |
||
158 | * |
||
159 | * XAudio2 structures and enumerations. |
||
160 | * |
||
161 | **************************************************************************/ |
||
162 | |||
163 | // Used in IXAudio2::Initialize |
||
164 | #ifdef _XBOX |
||
165 | typedef enum XAUDIO2_XBOX_HWTHREAD_SPECIFIER |
||
166 | { |
||
167 | XboxThread0 = 0x01, |
||
168 | XboxThread1 = 0x02, |
||
169 | XboxThread2 = 0x04, |
||
170 | XboxThread3 = 0x08, |
||
171 | XboxThread4 = 0x10, |
||
172 | XboxThread5 = 0x20, |
||
173 | XAUDIO2_ANY_PROCESSOR = XboxThread4, |
||
174 | XAUDIO2_DEFAULT_PROCESSOR = XAUDIO2_ANY_PROCESSOR |
||
175 | } XAUDIO2_XBOX_HWTHREAD_SPECIFIER, XAUDIO2_PROCESSOR; |
||
176 | #else |
||
177 | typedef enum XAUDIO2_WINDOWS_PROCESSOR_SPECIFIER |
||
178 | { |
||
179 | Processor1 = 0x00000001, |
||
180 | Processor2 = 0x00000002, |
||
181 | Processor3 = 0x00000004, |
||
182 | Processor4 = 0x00000008, |
||
183 | Processor5 = 0x00000010, |
||
184 | Processor6 = 0x00000020, |
||
185 | Processor7 = 0x00000040, |
||
186 | Processor8 = 0x00000080, |
||
187 | Processor9 = 0x00000100, |
||
188 | Processor10 = 0x00000200, |
||
189 | Processor11 = 0x00000400, |
||
190 | Processor12 = 0x00000800, |
||
191 | Processor13 = 0x00001000, |
||
192 | Processor14 = 0x00002000, |
||
193 | Processor15 = 0x00004000, |
||
194 | Processor16 = 0x00008000, |
||
195 | Processor17 = 0x00010000, |
||
196 | Processor18 = 0x00020000, |
||
197 | Processor19 = 0x00040000, |
||
198 | Processor20 = 0x00080000, |
||
199 | Processor21 = 0x00100000, |
||
200 | Processor22 = 0x00200000, |
||
201 | Processor23 = 0x00400000, |
||
202 | Processor24 = 0x00800000, |
||
203 | Processor25 = 0x01000000, |
||
204 | Processor26 = 0x02000000, |
||
205 | Processor27 = 0x04000000, |
||
206 | Processor28 = 0x08000000, |
||
207 | Processor29 = 0x10000000, |
||
208 | Processor30 = 0x20000000, |
||
209 | Processor31 = 0x40000000, |
||
210 | Processor32 = 0x80000000, |
||
211 | XAUDIO2_ANY_PROCESSOR = 0xffffffff, |
||
212 | XAUDIO2_DEFAULT_PROCESSOR = XAUDIO2_ANY_PROCESSOR |
||
213 | } XAUDIO2_WINDOWS_PROCESSOR_SPECIFIER, XAUDIO2_PROCESSOR; |
||
214 | #endif |
||
215 | |||
216 | // Used in XAUDIO2_DEVICE_DETAILS below to describe the types of applications |
||
217 | // that the user has specified each device as a default for. 0 means that the |
||
218 | // device isn't the default for any role. |
||
219 | typedef enum XAUDIO2_DEVICE_ROLE |
||
220 | { |
||
221 | NotDefaultDevice = 0x0, |
||
222 | DefaultConsoleDevice = 0x1, |
||
223 | DefaultMultimediaDevice = 0x2, |
||
224 | DefaultCommunicationsDevice = 0x4, |
||
225 | DefaultGameDevice = 0x8, |
||
226 | GlobalDefaultDevice = 0xf, |
||
227 | InvalidDeviceRole = ~GlobalDefaultDevice |
||
228 | } XAUDIO2_DEVICE_ROLE; |
||
229 | |||
230 | // Returned by IXAudio2::GetDeviceDetails |
||
231 | typedef struct XAUDIO2_DEVICE_DETAILS |
||
232 | { |
||
233 | WCHAR DeviceID[256]; // String identifier for the audio device. |
||
234 | WCHAR DisplayName[256]; // Friendly name suitable for display to a human. |
||
235 | XAUDIO2_DEVICE_ROLE Role; // Roles that the device should be used for. |
||
236 | WAVEFORMATEXTENSIBLE OutputFormat; // The device's native PCM audio output format. |
||
237 | } XAUDIO2_DEVICE_DETAILS; |
||
238 | |||
239 | // Returned by IXAudio2Voice::GetVoiceDetails |
||
240 | typedef struct XAUDIO2_VOICE_DETAILS |
||
241 | { |
||
242 | UINT32 CreationFlags; // Flags the voice was created with. |
||
243 | UINT32 InputChannels; // Channels in the voice's input audio. |
||
244 | UINT32 InputSampleRate; // Sample rate of the voice's input audio. |
||
245 | } XAUDIO2_VOICE_DETAILS; |
||
246 | |||
247 | // Used in XAUDIO2_VOICE_SENDS below |
||
248 | typedef struct XAUDIO2_SEND_DESCRIPTOR |
||
249 | { |
||
250 | UINT32 Flags; // Either 0 or XAUDIO2_SEND_USEFILTER. |
||
251 | IXAudio2Voice* pOutputVoice; // This send's destination voice. |
||
252 | } XAUDIO2_SEND_DESCRIPTOR; |
||
253 | |||
254 | // Used in the voice creation functions and in IXAudio2Voice::SetOutputVoices |
||
255 | typedef struct XAUDIO2_VOICE_SENDS |
||
256 | { |
||
257 | UINT32 SendCount; // Number of sends from this voice. |
||
258 | XAUDIO2_SEND_DESCRIPTOR* pSends; // Array of SendCount send descriptors. |
||
259 | } XAUDIO2_VOICE_SENDS; |
||
260 | |||
261 | // Used in XAUDIO2_EFFECT_CHAIN below |
||
262 | typedef struct XAUDIO2_EFFECT_DESCRIPTOR |
||
263 | { |
||
264 | IUnknown* pEffect; // Pointer to the effect object's IUnknown interface. |
||
265 | BOOL InitialState; // TRUE if the effect should begin in the enabled state. |
||
266 | UINT32 OutputChannels; // How many output channels the effect should produce. |
||
267 | } XAUDIO2_EFFECT_DESCRIPTOR; |
||
268 | |||
269 | // Used in the voice creation functions and in IXAudio2Voice::SetEffectChain |
||
270 | typedef struct XAUDIO2_EFFECT_CHAIN |
||
271 | { |
||
272 | UINT32 EffectCount; // Number of effects in this voice's effect chain. |
||
273 | XAUDIO2_EFFECT_DESCRIPTOR* pEffectDescriptors; // Array of effect descriptors. |
||
274 | } XAUDIO2_EFFECT_CHAIN; |
||
275 | |||
276 | // Used in XAUDIO2_FILTER_PARAMETERS below |
||
277 | typedef enum XAUDIO2_FILTER_TYPE |
||
278 | { |
||
279 | LowPassFilter, // Attenuates frequencies above the cutoff frequency. |
||
280 | BandPassFilter, // Attenuates frequencies outside a given range. |
||
281 | HighPassFilter, // Attenuates frequencies below the cutoff frequency. |
||
282 | NotchFilter // Attenuates frequencies inside a given range. |
||
283 | } XAUDIO2_FILTER_TYPE; |
||
284 | |||
285 | // Used in IXAudio2Voice::Set/GetFilterParameters and Set/GetOutputFilterParameters |
||
286 | typedef struct XAUDIO2_FILTER_PARAMETERS |
||
287 | { |
||
288 | XAUDIO2_FILTER_TYPE Type; // Low-pass, band-pass or high-pass. |
||
289 | float Frequency; // Radian frequency (2 * sin(pi*CutoffFrequency/SampleRate)); |
||
290 | // must be >= 0 and <= XAUDIO2_MAX_FILTER_FREQUENCY |
||
291 | // (giving a maximum CutoffFrequency of SampleRate/6). |
||
292 | float OneOverQ; // Reciprocal of the filter's quality factor Q; |
||
293 | // must be > 0 and <= XAUDIO2_MAX_FILTER_ONEOVERQ. |
||
294 | } XAUDIO2_FILTER_PARAMETERS; |
||
295 | |||
296 | // Used in IXAudio2SourceVoice::SubmitSourceBuffer |
||
297 | typedef struct XAUDIO2_BUFFER |
||
298 | { |
||
299 | UINT32 Flags; // Either 0 or XAUDIO2_END_OF_STREAM. |
||
300 | UINT32 AudioBytes; // Size of the audio data buffer in bytes. |
||
301 | BYTE* pAudioData; // Pointer to the audio data buffer. |
||
302 | UINT32 PlayBegin; // First sample in this buffer to be played. |
||
303 | UINT32 PlayLength; // Length of the region to be played in samples, |
||
304 | // or 0 to play the whole buffer. |
||
305 | UINT32 LoopBegin; // First sample of the region to be looped. |
||
306 | UINT32 LoopLength; // Length of the desired loop region in samples, |
||
307 | // or 0 to loop the entire buffer. |
||
308 | UINT32 LoopCount; // Number of times to repeat the loop region, |
||
309 | // or XAUDIO2_LOOP_INFINITE to loop forever. |
||
310 | void* pContext; // Context value to be passed back in callbacks. |
||
311 | } XAUDIO2_BUFFER; |
||
312 | |||
313 | // Used in IXAudio2SourceVoice::SubmitSourceBuffer when submitting XWMA data. |
||
314 | // NOTE: If an XWMA sound is submitted in more than one buffer, each buffer's |
||
315 | // pDecodedPacketCumulativeBytes[PacketCount-1] value must be subtracted from |
||
316 | // all the entries in the next buffer's pDecodedPacketCumulativeBytes array. |
||
317 | // And whether a sound is submitted in more than one buffer or not, the final |
||
318 | // buffer of the sound should use the XAUDIO2_END_OF_STREAM flag, or else the |
||
319 | // client must call IXAudio2SourceVoice::Discontinuity after submitting it. |
||
320 | typedef struct XAUDIO2_BUFFER_WMA |
||
321 | { |
||
322 | UINT32* pDecodedPacketCumulativeBytes; // Decoded packet's cumulative size array. |
||
323 | // Each element is the number of bytes accumulated |
||
324 | // when the corresponding XWMA packet is decoded in |
||
325 | // order. The array must have PacketCount elements. |
||
326 | UINT32 PacketCount; // Number of XWMA packets submitted. Must be >= 1 and |
||
327 | // divide evenly into XAUDIO2_BUFFER.AudioBytes. |
||
328 | } XAUDIO2_BUFFER_WMA; |
||
329 | |||
330 | // Returned by IXAudio2SourceVoice::GetState |
||
331 | typedef struct XAUDIO2_VOICE_STATE |
||
332 | { |
||
333 | void* pCurrentBufferContext; // The pContext value provided in the XAUDIO2_BUFFER |
||
334 | // that is currently being processed, or NULL if |
||
335 | // there are no buffers in the queue. |
||
336 | UINT32 BuffersQueued; // Number of buffers currently queued on the voice |
||
337 | // (including the one that is being processed). |
||
338 | UINT64 SamplesPlayed; // Total number of samples produced by the voice since |
||
339 | // it began processing the current audio stream. |
||
340 | } XAUDIO2_VOICE_STATE; |
||
341 | |||
342 | // Returned by IXAudio2::GetPerformanceData |
||
343 | typedef struct XAUDIO2_PERFORMANCE_DATA |
||
344 | { |
||
345 | // CPU usage information |
||
346 | UINT64 AudioCyclesSinceLastQuery; // CPU cycles spent on audio processing since the |
||
347 | // last call to StartEngine or GetPerformanceData. |
||
348 | UINT64 TotalCyclesSinceLastQuery; // Total CPU cycles elapsed since the last call |
||
349 | // (only counts the CPU XAudio2 is running on). |
||
350 | UINT32 MinimumCyclesPerQuantum; // Fewest CPU cycles spent processing any one |
||
351 | // audio quantum since the last call. |
||
352 | UINT32 MaximumCyclesPerQuantum; // Most CPU cycles spent processing any one |
||
353 | // audio quantum since the last call. |
||
354 | |||
355 | // Memory usage information |
||
356 | UINT32 MemoryUsageInBytes; // Total heap space currently in use. |
||
357 | |||
358 | // Audio latency and glitching information |
||
359 | UINT32 CurrentLatencyInSamples; // Minimum delay from when a sample is read from a |
||
360 | // source buffer to when it reaches the speakers. |
||
361 | UINT32 GlitchesSinceEngineStarted; // Audio dropouts since the engine was started. |
||
362 | |||
363 | // Data about XAudio2's current workload |
||
364 | UINT32 ActiveSourceVoiceCount; // Source voices currently playing. |
||
365 | UINT32 TotalSourceVoiceCount; // Source voices currently existing. |
||
366 | UINT32 ActiveSubmixVoiceCount; // Submix voices currently playing/existing. |
||
367 | |||
368 | UINT32 ActiveResamplerCount; // Resample xAPOs currently active. |
||
369 | UINT32 ActiveMatrixMixCount; // MatrixMix xAPOs currently active. |
||
370 | |||
371 | // Usage of the hardware XMA decoder (Xbox 360 only) |
||
372 | UINT32 ActiveXmaSourceVoices; // Number of source voices decoding XMA data. |
||
373 | UINT32 ActiveXmaStreams; // A voice can use more than one XMA stream. |
||
374 | } XAUDIO2_PERFORMANCE_DATA; |
||
375 | |||
376 | // Used in IXAudio2::SetDebugConfiguration |
||
377 | typedef struct XAUDIO2_DEBUG_CONFIGURATION |
||
378 | { |
||
379 | UINT32 TraceMask; // Bitmap of enabled debug message types. |
||
380 | UINT32 BreakMask; // Message types that will break into the debugger. |
||
381 | BOOL LogThreadID; // Whether to log the thread ID with each message. |
||
382 | BOOL LogFileline; // Whether to log the source file and line number. |
||
383 | BOOL LogFunctionName; // Whether to log the function name. |
||
384 | BOOL LogTiming; // Whether to log message timestamps. |
||
385 | } XAUDIO2_DEBUG_CONFIGURATION; |
||
386 | |||
387 | // Values for the TraceMask and BreakMask bitmaps. Only ERRORS and WARNINGS |
||
388 | // are valid in BreakMask. WARNINGS implies ERRORS, DETAIL implies INFO, and |
||
389 | // FUNC_CALLS implies API_CALLS. By default, TraceMask is ERRORS and WARNINGS |
||
390 | // and all the other settings are zero. |
||
391 | #define XAUDIO2_LOG_ERRORS 0x0001 // For handled errors with serious effects. |
||
392 | #define XAUDIO2_LOG_WARNINGS 0x0002 // For handled errors that may be recoverable. |
||
393 | #define XAUDIO2_LOG_INFO 0x0004 // Informational chit-chat (e.g. state changes). |
||
394 | #define XAUDIO2_LOG_DETAIL 0x0008 // More detailed chit-chat. |
||
395 | #define XAUDIO2_LOG_API_CALLS 0x0010 // Public API function entries and exits. |
||
396 | #define XAUDIO2_LOG_FUNC_CALLS 0x0020 // Internal function entries and exits. |
||
397 | #define XAUDIO2_LOG_TIMING 0x0040 // Delays detected and other timing data. |
||
398 | #define XAUDIO2_LOG_LOCKS 0x0080 // Usage of critical sections and mutexes. |
||
399 | #define XAUDIO2_LOG_MEMORY 0x0100 // Memory heap usage information. |
||
400 | #define XAUDIO2_LOG_STREAMING 0x1000 // Audio streaming information. |
||
401 | |||
402 | |||
403 | /************************************************************************** |
||
404 | * |
||
405 | * IXAudio2: Top-level XAudio2 COM interface. |
||
406 | * |
||
407 | **************************************************************************/ |
||
408 | |||
409 | // Use default arguments if compiling as C++ |
||
410 | #ifdef __cplusplus |
||
411 | #define X2DEFAULT(x) =x |
||
412 | #else |
||
413 | #define X2DEFAULT(x) |
||
414 | #endif |
||
415 | |||
416 | #undef INTERFACE |
||
417 | #define INTERFACE IXAudio2 |
||
418 | DECLARE_INTERFACE_(IXAudio2, IUnknown) |
||
419 | { |
||
420 | // NAME: IXAudio2::QueryInterface |
||
421 | // DESCRIPTION: Queries for a given COM interface on the XAudio2 object. |
||
422 | // Only IID_IUnknown and IID_IXAudio2 are supported. |
||
423 | // |
||
424 | // ARGUMENTS: |
||
425 | // riid - IID of the interface to be obtained. |
||
426 | // ppvInterface - Returns a pointer to the requested interface. |
||
427 | // |
||
428 | STDMETHOD(QueryInterface) (THIS_ REFIID riid, __deref_out void** ppvInterface) PURE; |
||
429 | |||
430 | // NAME: IXAudio2::AddRef |
||
431 | // DESCRIPTION: Adds a reference to the XAudio2 object. |
||
432 | // |
||
433 | STDMETHOD_(ULONG, AddRef) (THIS) PURE; |
||
434 | |||
435 | // NAME: IXAudio2::Release |
||
436 | // DESCRIPTION: Releases a reference to the XAudio2 object. |
||
437 | // |
||
438 | STDMETHOD_(ULONG, Release) (THIS) PURE; |
||
439 | |||
440 | // NAME: IXAudio2::GetDeviceCount |
||
441 | // DESCRIPTION: Returns the number of audio output devices available. |
||
442 | // |
||
443 | // ARGUMENTS: |
||
444 | // pCount - Returns the device count. |
||
445 | // |
||
446 | STDMETHOD(GetDeviceCount) (THIS_ __out UINT32* pCount) PURE; |
||
447 | |||
448 | // NAME: IXAudio2::GetDeviceDetails |
||
449 | // DESCRIPTION: Returns information about the device with the given index. |
||
450 | // |
||
451 | // ARGUMENTS: |
||
452 | // Index - Index of the device to be queried. |
||
453 | // pDeviceDetails - Returns the device details. |
||
454 | // |
||
455 | STDMETHOD(GetDeviceDetails) (THIS_ UINT32 Index, __out XAUDIO2_DEVICE_DETAILS* pDeviceDetails) PURE; |
||
456 | |||
457 | // NAME: IXAudio2::Initialize |
||
458 | // DESCRIPTION: Sets global XAudio2 parameters and prepares it for use. |
||
459 | // |
||
460 | // ARGUMENTS: |
||
461 | // Flags - Flags specifying the XAudio2 object's behavior. Currently unused. |
||
462 | // XAudio2Processor - An XAUDIO2_PROCESSOR enumeration value that specifies |
||
463 | // the hardware thread (Xbox) or processor (Windows) that XAudio2 will use. |
||
464 | // The enumeration values are platform-specific; platform-independent code |
||
465 | // can use XAUDIO2_DEFAULT_PROCESSOR to use the default on each platform. |
||
466 | // |
||
467 | STDMETHOD(Initialize) (THIS_ UINT32 Flags X2DEFAULT(0), |
||
468 | XAUDIO2_PROCESSOR XAudio2Processor X2DEFAULT(XAUDIO2_DEFAULT_PROCESSOR)) PURE; |
||
469 | |||
470 | // NAME: IXAudio2::RegisterForCallbacks |
||
471 | // DESCRIPTION: Adds a new client to receive XAudio2's engine callbacks. |
||
472 | // |
||
473 | // ARGUMENTS: |
||
474 | // pCallback - Callback interface to be called during each processing pass. |
||
475 | // |
||
476 | STDMETHOD(RegisterForCallbacks) (__in IXAudio2EngineCallback* pCallback) PURE; |
||
477 | |||
478 | // NAME: IXAudio2::UnregisterForCallbacks |
||
479 | // DESCRIPTION: Removes an existing receiver of XAudio2 engine callbacks. |
||
480 | // |
||
481 | // ARGUMENTS: |
||
482 | // pCallback - Previously registered callback interface to be removed. |
||
483 | // |
||
484 | STDMETHOD_(void, UnregisterForCallbacks) (__in IXAudio2EngineCallback* pCallback) PURE; |
||
485 | |||
486 | // NAME: IXAudio2::CreateSourceVoice |
||
487 | // DESCRIPTION: Creates and configures a source voice. |
||
488 | // |
||
489 | // ARGUMENTS: |
||
490 | // ppSourceVoice - Returns the new object's IXAudio2SourceVoice interface. |
||
491 | // pSourceFormat - Format of the audio that will be fed to the voice. |
||
492 | // Flags - XAUDIO2_VOICE flags specifying the source voice's behavior. |
||
493 | // MaxFrequencyRatio - Maximum SetFrequencyRatio argument to be allowed. |
||
494 | // pCallback - Optional pointer to a client-provided callback interface. |
||
495 | // pSendList - Optional list of voices this voice should send audio to. |
||
496 | // pEffectChain - Optional list of effects to apply to the audio data. |
||
497 | // |
||
498 | STDMETHOD(CreateSourceVoice) (THIS_ __deref_out IXAudio2SourceVoice** ppSourceVoice, |
||
499 | __in const WAVEFORMATEX* pSourceFormat, |
||
500 | UINT32 Flags X2DEFAULT(0), |
||
501 | float MaxFrequencyRatio X2DEFAULT(XAUDIO2_DEFAULT_FREQ_RATIO), |
||
502 | __in_opt IXAudio2VoiceCallback* pCallback X2DEFAULT(NULL), |
||
503 | __in_opt const XAUDIO2_VOICE_SENDS* pSendList X2DEFAULT(NULL), |
||
504 | __in_opt const XAUDIO2_EFFECT_CHAIN* pEffectChain X2DEFAULT(NULL)) PURE; |
||
505 | |||
506 | // NAME: IXAudio2::CreateSubmixVoice |
||
507 | // DESCRIPTION: Creates and configures a submix voice. |
||
508 | // |
||
509 | // ARGUMENTS: |
||
510 | // ppSubmixVoice - Returns the new object's IXAudio2SubmixVoice interface. |
||
511 | // InputChannels - Number of channels in this voice's input audio data. |
||
512 | // InputSampleRate - Sample rate of this voice's input audio data. |
||
513 | // Flags - XAUDIO2_VOICE flags specifying the submix voice's behavior. |
||
514 | // ProcessingStage - Arbitrary number that determines the processing order. |
||
515 | // pSendList - Optional list of voices this voice should send audio to. |
||
516 | // pEffectChain - Optional list of effects to apply to the audio data. |
||
517 | // |
||
518 | STDMETHOD(CreateSubmixVoice) (THIS_ __deref_out IXAudio2SubmixVoice** ppSubmixVoice, |
||
519 | UINT32 InputChannels, UINT32 InputSampleRate, |
||
520 | UINT32 Flags X2DEFAULT(0), UINT32 ProcessingStage X2DEFAULT(0), |
||
521 | __in_opt const XAUDIO2_VOICE_SENDS* pSendList X2DEFAULT(NULL), |
||
522 | __in_opt const XAUDIO2_EFFECT_CHAIN* pEffectChain X2DEFAULT(NULL)) PURE; |
||
523 | |||
524 | |||
525 | // NAME: IXAudio2::CreateMasteringVoice |
||
526 | // DESCRIPTION: Creates and configures a mastering voice. |
||
527 | // |
||
528 | // ARGUMENTS: |
||
529 | // ppMasteringVoice - Returns the new object's IXAudio2MasteringVoice interface. |
||
530 | // InputChannels - Number of channels in this voice's input audio data. |
||
531 | // InputSampleRate - Sample rate of this voice's input audio data. |
||
532 | // Flags - XAUDIO2_VOICE flags specifying the mastering voice's behavior. |
||
533 | // DeviceIndex - Identifier of the device to receive the output audio. |
||
534 | // pEffectChain - Optional list of effects to apply to the audio data. |
||
535 | // |
||
536 | STDMETHOD(CreateMasteringVoice) (THIS_ __deref_out IXAudio2MasteringVoice** ppMasteringVoice, |
||
537 | UINT32 InputChannels X2DEFAULT(XAUDIO2_DEFAULT_CHANNELS), |
||
538 | UINT32 InputSampleRate X2DEFAULT(XAUDIO2_DEFAULT_SAMPLERATE), |
||
539 | UINT32 Flags X2DEFAULT(0), UINT32 DeviceIndex X2DEFAULT(0), |
||
540 | __in_opt const XAUDIO2_EFFECT_CHAIN* pEffectChain X2DEFAULT(NULL)) PURE; |
||
541 | |||
542 | // NAME: IXAudio2::StartEngine |
||
543 | // DESCRIPTION: Creates and starts the audio processing thread. |
||
544 | // |
||
545 | STDMETHOD(StartEngine) (THIS) PURE; |
||
546 | |||
547 | // NAME: IXAudio2::StopEngine |
||
548 | // DESCRIPTION: Stops and destroys the audio processing thread. |
||
549 | // |
||
550 | STDMETHOD_(void, StopEngine) (THIS) PURE; |
||
551 | |||
552 | // NAME: IXAudio2::CommitChanges |
||
553 | // DESCRIPTION: Atomically applies a set of operations previously tagged |
||
554 | // with a given identifier. |
||
555 | // |
||
556 | // ARGUMENTS: |
||
557 | // OperationSet - Identifier of the set of operations to be applied. |
||
558 | // |
||
559 | STDMETHOD(CommitChanges) (THIS_ UINT32 OperationSet) PURE; |
||
560 | |||
561 | // NAME: IXAudio2::GetPerformanceData |
||
562 | // DESCRIPTION: Returns current resource usage details: memory, CPU, etc. |
||
563 | // |
||
564 | // ARGUMENTS: |
||
565 | // pPerfData - Returns the performance data structure. |
||
566 | // |
||
567 | STDMETHOD_(void, GetPerformanceData) (THIS_ __out XAUDIO2_PERFORMANCE_DATA* pPerfData) PURE; |
||
568 | |||
569 | // NAME: IXAudio2::SetDebugConfiguration |
||
570 | // DESCRIPTION: Configures XAudio2's debug output (in debug builds only). |
||
571 | // |
||
572 | // ARGUMENTS: |
||
573 | // pDebugConfiguration - Structure describing the debug output behavior. |
||
574 | // pReserved - Optional parameter; must be NULL. |
||
575 | // |
||
576 | STDMETHOD_(void, SetDebugConfiguration) (THIS_ __in_opt const XAUDIO2_DEBUG_CONFIGURATION* pDebugConfiguration, |
||
577 | __in_opt __reserved void* pReserved X2DEFAULT(NULL)) PURE; |
||
578 | }; |
||
579 | |||
580 | |||
581 | /************************************************************************** |
||
582 | * |
||
583 | * IXAudio2Voice: Base voice management interface. |
||
584 | * |
||
585 | **************************************************************************/ |
||
586 | |||
587 | #undef INTERFACE |
||
588 | #define INTERFACE IXAudio2Voice |
||
589 | DECLARE_INTERFACE(IXAudio2Voice) |
||
590 | { |
||
591 | // These methods are declared in a macro so that the same declarations |
||
592 | // can be used in the derived voice types (IXAudio2SourceVoice, etc). |
||
593 | |||
594 | #define Declare_IXAudio2Voice_Methods() \ |
||
595 | \ |
||
596 | /* NAME: IXAudio2Voice::GetVoiceDetails |
||
597 | // DESCRIPTION: Returns the basic characteristics of this voice. |
||
598 | // |
||
599 | // ARGUMENTS: |
||
600 | // pVoiceDetails - Returns the voice's details. |
||
601 | */\ |
||
602 | STDMETHOD_(void, GetVoiceDetails) (THIS_ __out XAUDIO2_VOICE_DETAILS* pVoiceDetails) PURE; \ |
||
603 | \ |
||
604 | /* NAME: IXAudio2Voice::SetOutputVoices |
||
605 | // DESCRIPTION: Replaces the set of submix/mastering voices that receive |
||
606 | // this voice's output. |
||
607 | // |
||
608 | // ARGUMENTS: |
||
609 | // pSendList - Optional list of voices this voice should send audio to. |
||
610 | */\ |
||
611 | STDMETHOD(SetOutputVoices) (THIS_ __in_opt const XAUDIO2_VOICE_SENDS* pSendList) PURE; \ |
||
612 | \ |
||
613 | /* NAME: IXAudio2Voice::SetEffectChain |
||
614 | // DESCRIPTION: Replaces this voice's current effect chain with a new one. |
||
615 | // |
||
616 | // ARGUMENTS: |
||
617 | // pEffectChain - Structure describing the new effect chain to be used. |
||
618 | */\ |
||
619 | STDMETHOD(SetEffectChain) (THIS_ __in_opt const XAUDIO2_EFFECT_CHAIN* pEffectChain) PURE; \ |
||
620 | \ |
||
621 | /* NAME: IXAudio2Voice::EnableEffect |
||
622 | // DESCRIPTION: Enables an effect in this voice's effect chain. |
||
623 | // |
||
624 | // ARGUMENTS: |
||
625 | // EffectIndex - Index of an effect within this voice's effect chain. |
||
626 | // OperationSet - Used to identify this call as part of a deferred batch. |
||
627 | */\ |
||
628 | STDMETHOD(EnableEffect) (THIS_ UINT32 EffectIndex, \ |
||
629 | UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ |
||
630 | \ |
||
631 | /* NAME: IXAudio2Voice::DisableEffect |
||
632 | // DESCRIPTION: Disables an effect in this voice's effect chain. |
||
633 | // |
||
634 | // ARGUMENTS: |
||
635 | // EffectIndex - Index of an effect within this voice's effect chain. |
||
636 | // OperationSet - Used to identify this call as part of a deferred batch. |
||
637 | */\ |
||
638 | STDMETHOD(DisableEffect) (THIS_ UINT32 EffectIndex, \ |
||
639 | UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ |
||
640 | \ |
||
641 | /* NAME: IXAudio2Voice::GetEffectState |
||
642 | // DESCRIPTION: Returns the running state of an effect. |
||
643 | // |
||
644 | // ARGUMENTS: |
||
645 | // EffectIndex - Index of an effect within this voice's effect chain. |
||
646 | // pEnabled - Returns the enabled/disabled state of the given effect. |
||
647 | */\ |
||
648 | STDMETHOD_(void, GetEffectState) (THIS_ UINT32 EffectIndex, __out BOOL* pEnabled) PURE; \ |
||
649 | \ |
||
650 | /* NAME: IXAudio2Voice::SetEffectParameters |
||
651 | // DESCRIPTION: Sets effect-specific parameters. |
||
652 | // |
||
653 | // REMARKS: Unlike IXAPOParameters::SetParameters, this method may |
||
654 | // be called from any thread. XAudio2 implements |
||
655 | // appropriate synchronization to copy the parameters to the |
||
656 | // realtime audio processing thread. |
||
657 | // |
||
658 | // ARGUMENTS: |
||
659 | // EffectIndex - Index of an effect within this voice's effect chain. |
||
660 | // pParameters - Pointer to an effect-specific parameters block. |
||
661 | // ParametersByteSize - Size of the pParameters array in bytes. |
||
662 | // OperationSet - Used to identify this call as part of a deferred batch. |
||
663 | */\ |
||
664 | STDMETHOD(SetEffectParameters) (THIS_ UINT32 EffectIndex, \ |
||
665 | __in_bcount(ParametersByteSize) const void* pParameters, \ |
||
666 | UINT32 ParametersByteSize, \ |
||
667 | UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ |
||
668 | \ |
||
669 | /* NAME: IXAudio2Voice::GetEffectParameters |
||
670 | // DESCRIPTION: Obtains the current effect-specific parameters. |
||
671 | // |
||
672 | // ARGUMENTS: |
||
673 | // EffectIndex - Index of an effect within this voice's effect chain. |
||
674 | // pParameters - Returns the current values of the effect-specific parameters. |
||
675 | // ParametersByteSize - Size of the pParameters array in bytes. |
||
676 | */\ |
||
677 | STDMETHOD(GetEffectParameters) (THIS_ UINT32 EffectIndex, \ |
||
678 | __out_bcount(ParametersByteSize) void* pParameters, \ |
||
679 | UINT32 ParametersByteSize) PURE; \ |
||
680 | \ |
||
681 | /* NAME: IXAudio2Voice::SetFilterParameters |
||
682 | // DESCRIPTION: Sets this voice's filter parameters. |
||
683 | // |
||
684 | // ARGUMENTS: |
||
685 | // pParameters - Pointer to the filter's parameter structure. |
||
686 | // OperationSet - Used to identify this call as part of a deferred batch. |
||
687 | */\ |
||
688 | STDMETHOD(SetFilterParameters) (THIS_ __in const XAUDIO2_FILTER_PARAMETERS* pParameters, \ |
||
689 | UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ |
||
690 | \ |
||
691 | /* NAME: IXAudio2Voice::GetFilterParameters |
||
692 | // DESCRIPTION: Returns this voice's current filter parameters. |
||
693 | // |
||
694 | // ARGUMENTS: |
||
695 | // pParameters - Returns the filter parameters. |
||
696 | */\ |
||
697 | STDMETHOD_(void, GetFilterParameters) (THIS_ __out XAUDIO2_FILTER_PARAMETERS* pParameters) PURE; \ |
||
698 | \ |
||
699 | /* NAME: IXAudio2Voice::SetOutputFilterParameters |
||
700 | // DESCRIPTION: Sets the filter parameters on one of this voice's sends. |
||
701 | // |
||
702 | // ARGUMENTS: |
||
703 | // pDestinationVoice - Destination voice of the send whose filter parameters will be set. |
||
704 | // pParameters - Pointer to the filter's parameter structure. |
||
705 | // OperationSet - Used to identify this call as part of a deferred batch. |
||
706 | */\ |
||
707 | STDMETHOD(SetOutputFilterParameters) (THIS_ __in_opt IXAudio2Voice* pDestinationVoice, \ |
||
708 | __in const XAUDIO2_FILTER_PARAMETERS* pParameters, \ |
||
709 | UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ |
||
710 | \ |
||
711 | /* NAME: IXAudio2Voice::GetOutputFilterParameters |
||
712 | // DESCRIPTION: Returns the filter parameters from one of this voice's sends. |
||
713 | // |
||
714 | // ARGUMENTS: |
||
715 | // pDestinationVoice - Destination voice of the send whose filter parameters will be read. |
||
716 | // pParameters - Returns the filter parameters. |
||
717 | */\ |
||
718 | STDMETHOD_(void, GetOutputFilterParameters) (THIS_ __in_opt IXAudio2Voice* pDestinationVoice, \ |
||
719 | __out XAUDIO2_FILTER_PARAMETERS* pParameters) PURE; \ |
||
720 | \ |
||
721 | /* NAME: IXAudio2Voice::SetVolume |
||
722 | // DESCRIPTION: Sets this voice's overall volume level. |
||
723 | // |
||
724 | // ARGUMENTS: |
||
725 | // Volume - New overall volume level to be used, as an amplitude factor. |
||
726 | // OperationSet - Used to identify this call as part of a deferred batch. |
||
727 | */\ |
||
728 | STDMETHOD(SetVolume) (THIS_ float Volume, \ |
||
729 | UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ |
||
730 | \ |
||
731 | /* NAME: IXAudio2Voice::GetVolume |
||
732 | // DESCRIPTION: Obtains this voice's current overall volume level. |
||
733 | // |
||
734 | // ARGUMENTS: |
||
735 | // pVolume: Returns the voice's current overall volume level. |
||
736 | */\ |
||
737 | STDMETHOD_(void, GetVolume) (THIS_ __out float* pVolume) PURE; \ |
||
738 | \ |
||
739 | /* NAME: IXAudio2Voice::SetChannelVolumes |
||
740 | // DESCRIPTION: Sets this voice's per-channel volume levels. |
||
741 | // |
||
742 | // ARGUMENTS: |
||
743 | // Channels - Used to confirm the voice's channel count. |
||
744 | // pVolumes - Array of per-channel volume levels to be used. |
||
745 | // OperationSet - Used to identify this call as part of a deferred batch. |
||
746 | */\ |
||
747 | STDMETHOD(SetChannelVolumes) (THIS_ UINT32 Channels, __in_ecount(Channels) const float* pVolumes, \ |
||
748 | UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ |
||
749 | \ |
||
750 | /* NAME: IXAudio2Voice::GetChannelVolumes |
||
751 | // DESCRIPTION: Returns this voice's current per-channel volume levels. |
||
752 | // |
||
753 | // ARGUMENTS: |
||
754 | // Channels - Used to confirm the voice's channel count. |
||
755 | // pVolumes - Returns an array of the current per-channel volume levels. |
||
756 | */\ |
||
757 | STDMETHOD_(void, GetChannelVolumes) (THIS_ UINT32 Channels, __out_ecount(Channels) float* pVolumes) PURE; \ |
||
758 | \ |
||
759 | /* NAME: IXAudio2Voice::SetOutputMatrix |
||
760 | // DESCRIPTION: Sets the volume levels used to mix from each channel of this |
||
761 | // voice's output audio to each channel of a given destination |
||
762 | // voice's input audio. |
||
763 | // |
||
764 | // ARGUMENTS: |
||
765 | // pDestinationVoice - The destination voice whose mix matrix to change. |
||
766 | // SourceChannels - Used to confirm this voice's output channel count |
||
767 | // (the number of channels produced by the last effect in the chain). |
||
768 | // DestinationChannels - Confirms the destination voice's input channels. |
||
769 | // pLevelMatrix - Array of [SourceChannels * DestinationChannels] send |
||
770 | // levels. The level used to send from source channel S to destination |
||
771 | // channel D should be in pLevelMatrix[S + SourceChannels * D]. |
||
772 | // OperationSet - Used to identify this call as part of a deferred batch. |
||
773 | */\ |
||
774 | STDMETHOD(SetOutputMatrix) (THIS_ __in_opt IXAudio2Voice* pDestinationVoice, \ |
||
775 | UINT32 SourceChannels, UINT32 DestinationChannels, \ |
||
776 | __in_ecount(SourceChannels * DestinationChannels) const float* pLevelMatrix, \ |
||
777 | UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ |
||
778 | \ |
||
779 | /* NAME: IXAudio2Voice::GetOutputMatrix |
||
780 | // DESCRIPTION: Obtains the volume levels used to send each channel of this |
||
781 | // voice's output audio to each channel of a given destination |
||
782 | // voice's input audio. |
||
783 | // |
||
784 | // ARGUMENTS: |
||
785 | // pDestinationVoice - The destination voice whose mix matrix to obtain. |
||
786 | // SourceChannels - Used to confirm this voice's output channel count |
||
787 | // (the number of channels produced by the last effect in the chain). |
||
788 | // DestinationChannels - Confirms the destination voice's input channels. |
||
789 | // pLevelMatrix - Array of send levels, as above. |
||
790 | */\ |
||
791 | STDMETHOD_(void, GetOutputMatrix) (THIS_ __in_opt IXAudio2Voice* pDestinationVoice, \ |
||
792 | UINT32 SourceChannels, UINT32 DestinationChannels, \ |
||
793 | __out_ecount(SourceChannels * DestinationChannels) float* pLevelMatrix) PURE; \ |
||
794 | \ |
||
795 | /* NAME: IXAudio2Voice::DestroyVoice |
||
796 | // DESCRIPTION: Destroys this voice, stopping it if necessary and removing |
||
797 | // it from the XAudio2 graph. |
||
798 | */\ |
||
799 | STDMETHOD_(void, DestroyVoice) (THIS) PURE |
||
800 | |||
801 | Declare_IXAudio2Voice_Methods(); |
||
802 | }; |
||
803 | |||
804 | |||
805 | /************************************************************************** |
||
806 | * |
||
807 | * IXAudio2SourceVoice: Source voice management interface. |
||
808 | * |
||
809 | **************************************************************************/ |
||
810 | |||
811 | #undef INTERFACE |
||
812 | #define INTERFACE IXAudio2SourceVoice |
||
813 | DECLARE_INTERFACE_(IXAudio2SourceVoice, IXAudio2Voice) |
||
814 | { |
||
815 | // Methods from IXAudio2Voice base interface |
||
816 | Declare_IXAudio2Voice_Methods(); |
||
817 | |||
818 | // NAME: IXAudio2SourceVoice::Start |
||
819 | // DESCRIPTION: Makes this voice start consuming and processing audio. |
||
820 | // |
||
821 | // ARGUMENTS: |
||
822 | // Flags - Flags controlling how the voice should be started. |
||
823 | // OperationSet - Used to identify this call as part of a deferred batch. |
||
824 | // |
||
825 | STDMETHOD(Start) (THIS_ UINT32 Flags X2DEFAULT(0), UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; |
||
826 | |||
827 | // NAME: IXAudio2SourceVoice::Stop |
||
828 | // DESCRIPTION: Makes this voice stop consuming audio. |
||
829 | // |
||
830 | // ARGUMENTS: |
||
831 | // Flags - Flags controlling how the voice should be stopped. |
||
832 | // OperationSet - Used to identify this call as part of a deferred batch. |
||
833 | // |
||
834 | STDMETHOD(Stop) (THIS_ UINT32 Flags X2DEFAULT(0), UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; |
||
835 | |||
836 | // NAME: IXAudio2SourceVoice::SubmitSourceBuffer |
||
837 | // DESCRIPTION: Adds a new audio buffer to this voice's input queue. |
||
838 | // |
||
839 | // ARGUMENTS: |
||
840 | // pBuffer - Pointer to the buffer structure to be queued. |
||
841 | // pBufferWMA - Additional structure used only when submitting XWMA data. |
||
842 | // |
||
843 | STDMETHOD(SubmitSourceBuffer) (THIS_ __in const XAUDIO2_BUFFER* pBuffer, __in_opt const XAUDIO2_BUFFER_WMA* pBufferWMA X2DEFAULT(NULL)) PURE; |
||
844 | |||
845 | // NAME: IXAudio2SourceVoice::FlushSourceBuffers |
||
846 | // DESCRIPTION: Removes all pending audio buffers from this voice's queue. |
||
847 | // |
||
848 | STDMETHOD(FlushSourceBuffers) (THIS) PURE; |
||
849 | |||
850 | // NAME: IXAudio2SourceVoice::Discontinuity |
||
851 | // DESCRIPTION: Notifies the voice of an intentional break in the stream of |
||
852 | // audio buffers (e.g. the end of a sound), to prevent XAudio2 |
||
853 | // from interpreting an empty buffer queue as a glitch. |
||
854 | // |
||
855 | STDMETHOD(Discontinuity) (THIS) PURE; |
||
856 | |||
857 | // NAME: IXAudio2SourceVoice::ExitLoop |
||
858 | // DESCRIPTION: Breaks out of the current loop when its end is reached. |
||
859 | // |
||
860 | // ARGUMENTS: |
||
861 | // OperationSet - Used to identify this call as part of a deferred batch. |
||
862 | // |
||
863 | STDMETHOD(ExitLoop) (THIS_ UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; |
||
864 | |||
865 | // NAME: IXAudio2SourceVoice::GetState |
||
866 | // DESCRIPTION: Returns the number of buffers currently queued on this voice, |
||
867 | // the pContext value associated with the currently processing |
||
868 | // buffer (if any), and other voice state information. |
||
869 | // |
||
870 | // ARGUMENTS: |
||
871 | // pVoiceState - Returns the state information. |
||
872 | // |
||
873 | STDMETHOD_(void, GetState) (THIS_ __out XAUDIO2_VOICE_STATE* pVoiceState) PURE; |
||
874 | |||
875 | // NAME: IXAudio2SourceVoice::SetFrequencyRatio |
||
876 | // DESCRIPTION: Sets this voice's frequency adjustment, i.e. its pitch. |
||
877 | // |
||
878 | // ARGUMENTS: |
||
879 | // Ratio - Frequency change, expressed as source frequency / target frequency. |
||
880 | // OperationSet - Used to identify this call as part of a deferred batch. |
||
881 | // |
||
882 | STDMETHOD(SetFrequencyRatio) (THIS_ float Ratio, |
||
883 | UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; |
||
884 | |||
885 | // NAME: IXAudio2SourceVoice::GetFrequencyRatio |
||
886 | // DESCRIPTION: Returns this voice's current frequency adjustment ratio. |
||
887 | // |
||
888 | // ARGUMENTS: |
||
889 | // pRatio - Returns the frequency adjustment. |
||
890 | // |
||
891 | STDMETHOD_(void, GetFrequencyRatio) (THIS_ __out float* pRatio) PURE; |
||
892 | |||
893 | // NAME: IXAudio2SourceVoice::SetSourceSampleRate |
||
894 | // DESCRIPTION: Reconfigures this voice to treat its source data as being |
||
895 | // at a different sample rate than the original one specified |
||
896 | // in CreateSourceVoice's pSourceFormat argument. |
||
897 | // |
||
898 | // ARGUMENTS: |
||
899 | // UINT32 - The intended sample rate of further submitted source data. |
||
900 | // |
||
901 | STDMETHOD(SetSourceSampleRate) (THIS_ UINT32 NewSourceSampleRate) PURE; |
||
902 | }; |
||
903 | |||
904 | |||
905 | /************************************************************************** |
||
906 | * |
||
907 | * IXAudio2SubmixVoice: Submixing voice management interface. |
||
908 | * |
||
909 | **************************************************************************/ |
||
910 | |||
911 | #undef INTERFACE |
||
912 | #define INTERFACE IXAudio2SubmixVoice |
||
913 | DECLARE_INTERFACE_(IXAudio2SubmixVoice, IXAudio2Voice) |
||
914 | { |
||
915 | // Methods from IXAudio2Voice base interface |
||
916 | Declare_IXAudio2Voice_Methods(); |
||
917 | |||
918 | // There are currently no methods specific to submix voices. |
||
919 | }; |
||
920 | |||
921 | |||
922 | /************************************************************************** |
||
923 | * |
||
924 | * IXAudio2MasteringVoice: Mastering voice management interface. |
||
925 | * |
||
926 | **************************************************************************/ |
||
927 | |||
928 | #undef INTERFACE |
||
929 | #define INTERFACE IXAudio2MasteringVoice |
||
930 | DECLARE_INTERFACE_(IXAudio2MasteringVoice, IXAudio2Voice) |
||
931 | { |
||
932 | // Methods from IXAudio2Voice base interface |
||
933 | Declare_IXAudio2Voice_Methods(); |
||
934 | |||
935 | // There are currently no methods specific to mastering voices. |
||
936 | }; |
||
937 | |||
938 | |||
939 | /************************************************************************** |
||
940 | * |
||
941 | * IXAudio2EngineCallback: Client notification interface for engine events. |
||
942 | * |
||
943 | * REMARKS: Contains methods to notify the client when certain events happen |
||
944 | * in the XAudio2 engine. This interface should be implemented by |
||
945 | * the client. XAudio2 will call these methods via the interface |
||
946 | * pointer provided by the client when it calls XAudio2Create or |
||
947 | * IXAudio2::Initialize. |
||
948 | * |
||
949 | **************************************************************************/ |
||
950 | |||
951 | #undef INTERFACE |
||
952 | #define INTERFACE IXAudio2EngineCallback |
||
953 | DECLARE_INTERFACE(IXAudio2EngineCallback) |
||
954 | { |
||
955 | // Called by XAudio2 just before an audio processing pass begins. |
||
956 | STDMETHOD_(void, OnProcessingPassStart) (THIS) PURE; |
||
957 | |||
958 | // Called just after an audio processing pass ends. |
||
959 | STDMETHOD_(void, OnProcessingPassEnd) (THIS) PURE; |
||
960 | |||
961 | // Called in the event of a critical system error which requires XAudio2 |
||
962 | // to be closed down and restarted. The error code is given in Error. |
||
963 | STDMETHOD_(void, OnCriticalError) (THIS_ HRESULT Error) PURE; |
||
964 | }; |
||
965 | |||
966 | |||
967 | /************************************************************************** |
||
968 | * |
||
969 | * IXAudio2VoiceCallback: Client notification interface for voice events. |
||
970 | * |
||
971 | * REMARKS: Contains methods to notify the client when certain events happen |
||
972 | * in an XAudio2 voice. This interface should be implemented by the |
||
973 | * client. XAudio2 will call these methods via an interface pointer |
||
974 | * provided by the client in the IXAudio2::CreateSourceVoice call. |
||
975 | * |
||
976 | **************************************************************************/ |
||
977 | |||
978 | #undef INTERFACE |
||
979 | #define INTERFACE IXAudio2VoiceCallback |
||
980 | DECLARE_INTERFACE(IXAudio2VoiceCallback) |
||
981 | { |
||
982 | // Called just before this voice's processing pass begins. |
||
983 | STDMETHOD_(void, OnVoiceProcessingPassStart) (THIS_ UINT32 BytesRequired) PURE; |
||
984 | |||
985 | // Called just after this voice's processing pass ends. |
||
986 | STDMETHOD_(void, OnVoiceProcessingPassEnd) (THIS) PURE; |
||
987 | |||
988 | // Called when this voice has just finished playing a buffer stream |
||
989 | // (as marked with the XAUDIO2_END_OF_STREAM flag on the last buffer). |
||
990 | STDMETHOD_(void, OnStreamEnd) (THIS) PURE; |
||
991 | |||
992 | // Called when this voice is about to start processing a new buffer. |
||
993 | STDMETHOD_(void, OnBufferStart) (THIS_ void* pBufferContext) PURE; |
||
994 | |||
995 | // Called when this voice has just finished processing a buffer. |
||
996 | // The buffer can now be reused or destroyed. |
||
997 | STDMETHOD_(void, OnBufferEnd) (THIS_ void* pBufferContext) PURE; |
||
998 | |||
999 | // Called when this voice has just reached the end position of a loop. |
||
1000 | STDMETHOD_(void, OnLoopEnd) (THIS_ void* pBufferContext) PURE; |
||
1001 | |||
1002 | // Called in the event of a critical error during voice processing, |
||
1003 | // such as a failing xAPO or an error from the hardware XMA decoder. |
||
1004 | // The voice may have to be destroyed and re-created to recover from |
||
1005 | // the error. The callback arguments report which buffer was being |
||
1006 | // processed when the error occurred, and its HRESULT code. |
||
1007 | STDMETHOD_(void, OnVoiceError) (THIS_ void* pBufferContext, HRESULT Error) PURE; |
||
1008 | }; |
||
1009 | |||
1010 | |||
1011 | /************************************************************************** |
||
1012 | * |
||
1013 | * Macros to make it easier to use the XAudio2 COM interfaces in C code. |
||
1014 | * |
||
1015 | **************************************************************************/ |
||
1016 | |||
1017 | #ifndef __cplusplus |
||
1018 | |||
1019 | // IXAudio2 |
||
1020 | #define IXAudio2_QueryInterface(This,riid,ppvInterface) ((This)->lpVtbl->QueryInterface(This,riid,ppvInterface)) |
||
1021 | #define IXAudio2_AddRef(This) ((This)->lpVtbl->AddRef(This)) |
||
1022 | #define IXAudio2_Release(This) ((This)->lpVtbl->Release(This)) |
||
1023 | #define IXAudio2_GetDeviceCount(This,puCount) ((This)->lpVtbl->GetDeviceCount(This,puCount)) |
||
1024 | #define IXAudio2_GetDeviceDetails(This,Index,pDeviceDetails) ((This)->lpVtbl->GetDeviceDetails(This,Index,pDeviceDetails)) |
||
1025 | #define IXAudio2_Initialize(This,Flags,XAudio2Processor) ((This)->lpVtbl->Initialize(This,Flags,XAudio2Processor)) |
||
1026 | #define IXAudio2_CreateSourceVoice(This,ppSourceVoice,pSourceFormat,Flags,MaxFrequencyRatio,pCallback,pSendList,pEffectChain) ((This)->lpVtbl->CreateSourceVoice(This,ppSourceVoice,pSourceFormat,Flags,MaxFrequencyRatio,pCallback,pSendList,pEffectChain)) |
||
1027 | #define IXAudio2_CreateSubmixVoice(This,ppSubmixVoice,InputChannels,InputSampleRate,Flags,ProcessingStage,pSendList,pEffectChain) ((This)->lpVtbl->CreateSubmixVoice(This,ppSubmixVoice,InputChannels,InputSampleRate,Flags,ProcessingStage,pSendList,pEffectChain)) |
||
1028 | #define IXAudio2_CreateMasteringVoice(This,ppMasteringVoice,InputChannels,InputSampleRate,Flags,DeviceIndex,pEffectChain) ((This)->lpVtbl->CreateMasteringVoice(This,ppMasteringVoice,InputChannels,InputSampleRate,Flags,DeviceIndex,pEffectChain)) |
||
1029 | #define IXAudio2_StartEngine(This) ((This)->lpVtbl->StartEngine(This)) |
||
1030 | #define IXAudio2_StopEngine(This) ((This)->lpVtbl->StopEngine(This)) |
||
1031 | #define IXAudio2_CommitChanges(This,OperationSet) ((This)->lpVtbl->CommitChanges(This,OperationSet)) |
||
1032 | #define IXAudio2_GetPerformanceData(This,pPerfData) ((This)->lpVtbl->GetPerformanceData(This,pPerfData)) |
||
1033 | #define IXAudio2_SetDebugConfiguration(This,pDebugConfiguration,pReserved) ((This)->lpVtbl->SetDebugConfiguration(This,pDebugConfiguration,pReserved)) |
||
1034 | |||
1035 | // IXAudio2Voice |
||
1036 | #define IXAudio2Voice_GetVoiceDetails(This,pVoiceDetails) ((This)->lpVtbl->GetVoiceDetails(This,pVoiceDetails)) |
||
1037 | #define IXAudio2Voice_SetOutputVoices(This,pSendList) ((This)->lpVtbl->SetOutputVoices(This,pSendList)) |
||
1038 | #define IXAudio2Voice_SetEffectChain(This,pEffectChain) ((This)->lpVtbl->SetEffectChain(This,pEffectChain)) |
||
1039 | #define IXAudio2Voice_EnableEffect(This,EffectIndex,OperationSet) ((This)->lpVtbl->EnableEffect(This,EffectIndex,OperationSet)) |
||
1040 | #define IXAudio2Voice_DisableEffect(This,EffectIndex,OperationSet) ((This)->lpVtbl->DisableEffect(This,EffectIndex,OperationSet)) |
||
1041 | #define IXAudio2Voice_GetEffectState(This,EffectIndex,pEnabled) ((This)->lpVtbl->GetEffectState(This,EffectIndex,pEnabled)) |
||
1042 | #define IXAudio2Voice_SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize, OperationSet) ((This)->lpVtbl->SetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize,OperationSet)) |
||
1043 | #define IXAudio2Voice_GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize) ((This)->lpVtbl->GetEffectParameters(This,EffectIndex,pParameters,ParametersByteSize)) |
||
1044 | #define IXAudio2Voice_SetFilterParameters(This,pParameters,OperationSet) ((This)->lpVtbl->SetFilterParameters(This,pParameters,OperationSet)) |
||
1045 | #define IXAudio2Voice_GetFilterParameters(This,pParameters) ((This)->lpVtbl->GetFilterParameters(This,pParameters)) |
||
1046 | #define IXAudio2Voice_SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet) ((This)->lpVtbl->SetOutputFilterParameters(This,pDestinationVoice,pParameters,OperationSet)) |
||
1047 | #define IXAudio2Voice_GetOutputFilterParameters(This,pDestinationVoice,pParameters) ((This)->lpVtbl->GetOutputFilterParameters(This,pDestinationVoice,pParameters)) |
||
1048 | #define IXAudio2Voice_SetVolume(This,Volume,OperationSet) ((This)->lpVtbl->SetVolume(This,Volume,OperationSet)) |
||
1049 | #define IXAudio2Voice_GetVolume(This,pVolume) ((This)->lpVtbl->GetVolume(This,pVolume)) |
||
1050 | #define IXAudio2Voice_SetChannelVolumes(This,Channels,pVolumes,OperationSet) ((This)->lpVtbl->SetChannelVolumes(This,Channels,pVolumes,OperationSet)) |
||
1051 | #define IXAudio2Voice_GetChannelVolumes(This,Channels,pVolumes) ((This)->lpVtbl->GetChannelVolumes(This,Channels,pVolumes)) |
||
1052 | #define IXAudio2Voice_SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet) ((This)->lpVtbl->SetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix,OperationSet)) |
||
1053 | #define IXAudio2Voice_GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix) ((This)->lpVtbl->GetOutputMatrix(This,pDestinationVoice,SourceChannels,DestinationChannels,pLevelMatrix)) |
||
1054 | #define IXAudio2Voice_DestroyVoice(This) ((This)->lpVtbl->DestroyVoice(This)) |
||
1055 | |||
1056 | // IXAudio2SourceVoice |
||
1057 | #define IXAudio2SourceVoice_GetVoiceDetails IXAudio2Voice_GetVoiceDetails |
||
1058 | #define IXAudio2SourceVoice_SetOutputVoices IXAudio2Voice_SetOutputVoices |
||
1059 | #define IXAudio2SourceVoice_SetEffectChain IXAudio2Voice_SetEffectChain |
||
1060 | #define IXAudio2SourceVoice_EnableEffect IXAudio2Voice_EnableEffect |
||
1061 | #define IXAudio2SourceVoice_DisableEffect IXAudio2Voice_DisableEffect |
||
1062 | #define IXAudio2SourceVoice_GetEffectState IXAudio2Voice_GetEffectState |
||
1063 | #define IXAudio2SourceVoice_SetEffectParameters IXAudio2Voice_SetEffectParameters |
||
1064 | #define IXAudio2SourceVoice_GetEffectParameters IXAudio2Voice_GetEffectParameters |
||
1065 | #define IXAudio2SourceVoice_SetFilterParameters IXAudio2Voice_SetFilterParameters |
||
1066 | #define IXAudio2SourceVoice_GetFilterParameters IXAudio2Voice_GetFilterParameters |
||
1067 | #define IXAudio2SourceVoice_SetOutputFilterParameters IXAudio2Voice_SetOutputFilterParameters |
||
1068 | #define IXAudio2SourceVoice_GetOutputFilterParameters IXAudio2Voice_GetOutputFilterParameters |
||
1069 | #define IXAudio2SourceVoice_SetVolume IXAudio2Voice_SetVolume |
||
1070 | #define IXAudio2SourceVoice_GetVolume IXAudio2Voice_GetVolume |
||
1071 | #define IXAudio2SourceVoice_SetChannelVolumes IXAudio2Voice_SetChannelVolumes |
||
1072 | #define IXAudio2SourceVoice_GetChannelVolumes IXAudio2Voice_GetChannelVolumes |
||
1073 | #define IXAudio2SourceVoice_SetOutputMatrix IXAudio2Voice_SetOutputMatrix |
||
1074 | #define IXAudio2SourceVoice_GetOutputMatrix IXAudio2Voice_GetOutputMatrix |
||
1075 | #define IXAudio2SourceVoice_DestroyVoice IXAudio2Voice_DestroyVoice |
||
1076 | #define IXAudio2SourceVoice_Start(This,Flags,OperationSet) ((This)->lpVtbl->Start(This,Flags,OperationSet)) |
||
1077 | #define IXAudio2SourceVoice_Stop(This,Flags,OperationSet) ((This)->lpVtbl->Stop(This,Flags,OperationSet)) |
||
1078 | #define IXAudio2SourceVoice_SubmitSourceBuffer(This,pBuffer,pBufferWMA) ((This)->lpVtbl->SubmitSourceBuffer(This,pBuffer,pBufferWMA)) |
||
1079 | #define IXAudio2SourceVoice_FlushSourceBuffers(This) ((This)->lpVtbl->FlushSourceBuffers(This)) |
||
1080 | #define IXAudio2SourceVoice_Discontinuity(This) ((This)->lpVtbl->Discontinuity(This)) |
||
1081 | #define IXAudio2SourceVoice_ExitLoop(This,OperationSet) ((This)->lpVtbl->ExitLoop(This,OperationSet)) |
||
1082 | #define IXAudio2SourceVoice_GetState(This,pVoiceState) ((This)->lpVtbl->GetState(This,pVoiceState)) |
||
1083 | #define IXAudio2SourceVoice_SetFrequencyRatio(This,Ratio,OperationSet) ((This)->lpVtbl->SetFrequencyRatio(This,Ratio,OperationSet)) |
||
1084 | #define IXAudio2SourceVoice_GetFrequencyRatio(This,pRatio) ((This)->lpVtbl->GetFrequencyRatio(This,pRatio)) |
||
1085 | #define IXAudio2SourceVoice_SetSourceSampleRate(This,NewSourceSampleRate) ((This)->lpVtbl->SetSourceSampleRate(This,NewSourceSampleRate)) |
||
1086 | |||
1087 | // IXAudio2SubmixVoice |
||
1088 | #define IXAudio2SubmixVoice_GetVoiceDetails IXAudio2Voice_GetVoiceDetails |
||
1089 | #define IXAudio2SubmixVoice_SetOutputVoices IXAudio2Voice_SetOutputVoices |
||
1090 | #define IXAudio2SubmixVoice_SetEffectChain IXAudio2Voice_SetEffectChain |
||
1091 | #define IXAudio2SubmixVoice_EnableEffect IXAudio2Voice_EnableEffect |
||
1092 | #define IXAudio2SubmixVoice_DisableEffect IXAudio2Voice_DisableEffect |
||
1093 | #define IXAudio2SubmixVoice_GetEffectState IXAudio2Voice_GetEffectState |
||
1094 | #define IXAudio2SubmixVoice_SetEffectParameters IXAudio2Voice_SetEffectParameters |
||
1095 | #define IXAudio2SubmixVoice_GetEffectParameters IXAudio2Voice_GetEffectParameters |
||
1096 | #define IXAudio2SubmixVoice_SetFilterParameters IXAudio2Voice_SetFilterParameters |
||
1097 | #define IXAudio2SubmixVoice_GetFilterParameters IXAudio2Voice_GetFilterParameters |
||
1098 | #define IXAudio2SubmixVoice_SetOutputFilterParameters IXAudio2Voice_SetOutputFilterParameters |
||
1099 | #define IXAudio2SubmixVoice_GetOutputFilterParameters IXAudio2Voice_GetOutputFilterParameters |
||
1100 | #define IXAudio2SubmixVoice_SetVolume IXAudio2Voice_SetVolume |
||
1101 | #define IXAudio2SubmixVoice_GetVolume IXAudio2Voice_GetVolume |
||
1102 | #define IXAudio2SubmixVoice_SetChannelVolumes IXAudio2Voice_SetChannelVolumes |
||
1103 | #define IXAudio2SubmixVoice_GetChannelVolumes IXAudio2Voice_GetChannelVolumes |
||
1104 | #define IXAudio2SubmixVoice_SetOutputMatrix IXAudio2Voice_SetOutputMatrix |
||
1105 | #define IXAudio2SubmixVoice_GetOutputMatrix IXAudio2Voice_GetOutputMatrix |
||
1106 | #define IXAudio2SubmixVoice_DestroyVoice IXAudio2Voice_DestroyVoice |
||
1107 | |||
1108 | // IXAudio2MasteringVoice |
||
1109 | #define IXAudio2MasteringVoice_GetVoiceDetails IXAudio2Voice_GetVoiceDetails |
||
1110 | #define IXAudio2MasteringVoice_SetOutputVoices IXAudio2Voice_SetOutputVoices |
||
1111 | #define IXAudio2MasteringVoice_SetEffectChain IXAudio2Voice_SetEffectChain |
||
1112 | #define IXAudio2MasteringVoice_EnableEffect IXAudio2Voice_EnableEffect |
||
1113 | #define IXAudio2MasteringVoice_DisableEffect IXAudio2Voice_DisableEffect |
||
1114 | #define IXAudio2MasteringVoice_GetEffectState IXAudio2Voice_GetEffectState |
||
1115 | #define IXAudio2MasteringVoice_SetEffectParameters IXAudio2Voice_SetEffectParameters |
||
1116 | #define IXAudio2MasteringVoice_GetEffectParameters IXAudio2Voice_GetEffectParameters |
||
1117 | #define IXAudio2MasteringVoice_SetFilterParameters IXAudio2Voice_SetFilterParameters |
||
1118 | #define IXAudio2MasteringVoice_GetFilterParameters IXAudio2Voice_GetFilterParameters |
||
1119 | #define IXAudio2MasteringVoice_SetOutputFilterParameters IXAudio2Voice_SetOutputFilterParameters |
||
1120 | #define IXAudio2MasteringVoice_GetOutputFilterParameters IXAudio2Voice_GetOutputFilterParameters |
||
1121 | #define IXAudio2MasteringVoice_SetVolume IXAudio2Voice_SetVolume |
||
1122 | #define IXAudio2MasteringVoice_GetVolume IXAudio2Voice_GetVolume |
||
1123 | #define IXAudio2MasteringVoice_SetChannelVolumes IXAudio2Voice_SetChannelVolumes |
||
1124 | #define IXAudio2MasteringVoice_GetChannelVolumes IXAudio2Voice_GetChannelVolumes |
||
1125 | #define IXAudio2MasteringVoice_SetOutputMatrix IXAudio2Voice_SetOutputMatrix |
||
1126 | #define IXAudio2MasteringVoice_GetOutputMatrix IXAudio2Voice_GetOutputMatrix |
||
1127 | #define IXAudio2MasteringVoice_DestroyVoice IXAudio2Voice_DestroyVoice |
||
1128 | |||
1129 | #endif // #ifndef __cplusplus |
||
1130 | |||
1131 | |||
1132 | /************************************************************************** |
||
1133 | * |
||
1134 | * Utility functions used to convert from pitch in semitones and volume |
||
1135 | * in decibels to the frequency and amplitude ratio units used by XAudio2. |
||
1136 | * These are only defined if the client #defines XAUDIO2_HELPER_FUNCTIONS |
||
1137 | * prior to #including xaudio2.h. |
||
1138 | * |
||
1139 | **************************************************************************/ |
||
1140 | |||
1141 | #ifdef XAUDIO2_HELPER_FUNCTIONS |
||
1142 | |||
1143 | #define _USE_MATH_DEFINES // Make math.h define M_PI |
||
1144 | #include <math.h> // For powf, log10f, sinf and asinf |
||
1145 | |||
1146 | // Calculate the argument to SetVolume from a decibel value |
||
1147 | __inline float XAudio2DecibelsToAmplitudeRatio(float Decibels) |
||
1148 | { |
||
1149 | return powf(10.0f, Decibels / 20.0f); |
||
1150 | } |
||
1151 | |||
1152 | // Recover a volume in decibels from an amplitude factor |
||
1153 | __inline float XAudio2AmplitudeRatioToDecibels(float Volume) |
||
1154 | { |
||
1155 | if (Volume == 0) |
||
1156 | { |
||
1157 | return -3.402823466e+38f; // Smallest float value (-FLT_MAX) |
||
1158 | } |
||
1159 | return 20.0f * log10f(Volume); |
||
1160 | } |
||
1161 | |||
1162 | // Calculate the argument to SetFrequencyRatio from a semitone value |
||
1163 | __inline float XAudio2SemitonesToFrequencyRatio(float Semitones) |
||
1164 | { |
||
1165 | // FrequencyRatio = 2 ^ Octaves |
||
1166 | // = 2 ^ (Semitones / 12) |
||
1167 | return powf(2.0f, Semitones / 12.0f); |
||
1168 | } |
||
1169 | |||
1170 | // Recover a pitch in semitones from a frequency ratio |
||
1171 | __inline float XAudio2FrequencyRatioToSemitones(float FrequencyRatio) |
||
1172 | { |
||
1173 | // Semitones = 12 * log2(FrequencyRatio) |
||
1174 | // = 12 * log2(10) * log10(FrequencyRatio) |
||
1175 | return 39.86313713864835f * log10f(FrequencyRatio); |
||
1176 | } |
||
1177 | |||
1178 | // Convert from filter cutoff frequencies expressed in Hertz to the radian |
||
1179 | // frequency values used in XAUDIO2_FILTER_PARAMETERS.Frequency. Note that |
||
1180 | // the highest CutoffFrequency supported is SampleRate/6. Higher values of |
||
1181 | // CutoffFrequency will return XAUDIO2_MAX_FILTER_FREQUENCY. |
||
1182 | __inline float XAudio2CutoffFrequencyToRadians(float CutoffFrequency, UINT32 SampleRate) |
||
1183 | { |
||
1184 | if ((UINT32)(CutoffFrequency * 6.0f) >= SampleRate) |
||
1185 | { |
||
1186 | return XAUDIO2_MAX_FILTER_FREQUENCY; |
||
1187 | } |
||
1188 | return 2.0f * sinf((float)M_PI * CutoffFrequency / SampleRate); |
||
1189 | } |
||
1190 | |||
1191 | // Convert from radian frequencies back to absolute frequencies in Hertz |
||
1192 | __inline float XAudio2RadiansToCutoffFrequency(float Radians, float SampleRate) |
||
1193 | { |
||
1194 | return SampleRate * asinf(Radians / 2.0f) / (float)M_PI; |
||
1195 | } |
||
1196 | #endif // #ifdef XAUDIO2_HELPER_FUNCTIONS |
||
1197 | |||
1198 | |||
1199 | /************************************************************************** |
||
1200 | * |
||
1201 | * XAudio2Create: Top-level function that creates an XAudio2 instance. |
||
1202 | * |
||
1203 | * On Windows this is just an inline function that calls CoCreateInstance |
||
1204 | * and Initialize. The arguments are described above, under Initialize, |
||
1205 | * except that the XAUDIO2_DEBUG_ENGINE flag can be used here to select |
||
1206 | * the debug version of XAudio2. |
||
1207 | * |
||
1208 | * On Xbox, this function is implemented in the XAudio2 library, and the |
||
1209 | * XAUDIO2_DEBUG_ENGINE flag has no effect; the client must explicitly |
||
1210 | * link with the debug version of the library to obtain debug behavior. |
||
1211 | * |
||
1212 | **************************************************************************/ |
||
1213 | |||
1214 | #ifdef _XBOX |
||
1215 | |||
1216 | STDAPI XAudio2Create(__deref_out IXAudio2** ppXAudio2, UINT32 Flags X2DEFAULT(0), |
||
1217 | XAUDIO2_PROCESSOR XAudio2Processor X2DEFAULT(XAUDIO2_DEFAULT_PROCESSOR)); |
||
1218 | |||
1219 | #else // Windows |
||
1220 | |||
1221 | __inline HRESULT XAudio2Create(__deref_out IXAudio2** ppXAudio2, UINT32 Flags X2DEFAULT(0), |
||
1222 | XAUDIO2_PROCESSOR XAudio2Processor X2DEFAULT(XAUDIO2_DEFAULT_PROCESSOR)) |
||
1223 | { |
||
1224 | // Instantiate the appropriate XAudio2 engine |
||
1225 | IXAudio2* pXAudio2; |
||
1226 | |||
1227 | #ifdef __cplusplus |
||
1228 | |||
1229 | HRESULT hr = CoCreateInstance((Flags & XAUDIO2_DEBUG_ENGINE) ? __uuidof(XAudio2_Debug) : __uuidof(XAudio2), |
||
1230 | NULL, CLSCTX_INPROC_SERVER, __uuidof(IXAudio2), (void**)&pXAudio2); |
||
1231 | if (SUCCEEDED(hr)) |
||
1232 | { |
||
1233 | hr = pXAudio2->Initialize(Flags, XAudio2Processor); |
||
1234 | |||
1235 | if (SUCCEEDED(hr)) |
||
1236 | { |
||
1237 | *ppXAudio2 = pXAudio2; |
||
1238 | } |
||
1239 | else |
||
1240 | { |
||
1241 | pXAudio2->Release(); |
||
1242 | } |
||
1243 | } |
||
1244 | |||
1245 | #else |
||
1246 | |||
1247 | HRESULT hr = CoCreateInstance((Flags & XAUDIO2_DEBUG_ENGINE) ? &CLSID_XAudio2_Debug : &CLSID_XAudio2, |
||
1248 | NULL, CLSCTX_INPROC_SERVER, &IID_IXAudio2, (void**)&pXAudio2); |
||
1249 | if (SUCCEEDED(hr)) |
||
1250 | { |
||
1251 | hr = pXAudio2->lpVtbl->Initialize(pXAudio2, Flags, XAudio2Processor); |
||
1252 | |||
1253 | if (SUCCEEDED(hr)) |
||
1254 | { |
||
1255 | *ppXAudio2 = pXAudio2; |
||
1256 | } |
||
1257 | else |
||
1258 | { |
||
1259 | pXAudio2->lpVtbl->Release(pXAudio2); |
||
1260 | } |
||
1261 | } |
||
1262 | |||
1263 | #endif // #ifdef __cplusplus |
||
1264 | |||
1265 | return hr; |
||
1266 | } |
||
1267 | |||
1268 | #endif // #ifdef _XBOX |
||
1269 | |||
1270 | |||
1271 | // Undo the #pragma pack(push, 1) directive at the top of this file |
||
1272 | #pragma pack(pop) |
||
1273 | |||
1274 | #endif // #ifndef GUID_DEFS_ONLY |
||
1275 | #endif // #ifndef __XAUDIO2_INCLUDED__ |