]> gitweb.factorcode.org Git - factor.git/blob - basis/windows/directx/xaudio2/xaudio2.factor
67a9234367a3432d3f07be0a425283eb76bab1e7
[factor.git] / basis / windows / directx / xaudio2 / xaudio2.factor
1 USING: alien.c-types alien.syntax classes.struct math
2 windows.com windows.com.syntax windows.directx.audiodefs
3 windows.types ;
4 IN: windows.directx.xaudio2
5
6 LIBRARY: xaudio2
7
8 CONSTANT: XAUDIO2_MAX_BUFFER_BYTES        HEX: 80000000
9 CONSTANT: XAUDIO2_MAX_QUEUED_BUFFERS      64
10 CONSTANT: XAUDIO2_MAX_BUFFERS_SYSTEM      2
11 CONSTANT: XAUDIO2_MAX_AUDIO_CHANNELS      64
12 CONSTANT: XAUDIO2_MIN_SAMPLE_RATE         1000
13 CONSTANT: XAUDIO2_MAX_SAMPLE_RATE         200000
14 CONSTANT: XAUDIO2_MAX_VOLUME_LEVEL        16777216.0
15 : XAUDIO2_MIN_FREQ_RATIO ( -- z ) 1.0 1024.0 / ; inline
16 CONSTANT: XAUDIO2_MAX_FREQ_RATIO          1024.0
17 CONSTANT: XAUDIO2_DEFAULT_FREQ_RATIO      2.0
18 CONSTANT: XAUDIO2_MAX_FILTER_ONEOVERQ     1.5
19 CONSTANT: XAUDIO2_MAX_FILTER_FREQUENCY    1.0
20 CONSTANT: XAUDIO2_MAX_LOOP_COUNT          254
21 CONSTANT: XAUDIO2_MAX_INSTANCES           8
22
23 CONSTANT: XAUDIO2_MAX_RATIO_TIMES_RATE_XMA_MONO         600000
24 CONSTANT: XAUDIO2_MAX_RATIO_TIMES_RATE_XMA_MULTICHANNEL 300000
25
26 CONSTANT: XAUDIO2_COMMIT_NOW              0
27 CONSTANT: XAUDIO2_COMMIT_ALL              0
28 CONSTANT: XAUDIO2_INVALID_OPSET           HEX: ffffffff
29 CONSTANT: XAUDIO2_NO_LOOP_REGION          0
30 CONSTANT: XAUDIO2_LOOP_INFINITE           255
31 CONSTANT: XAUDIO2_DEFAULT_CHANNELS        0
32 CONSTANT: XAUDIO2_DEFAULT_SAMPLERATE      0
33
34
35 CONSTANT: XAUDIO2_DEBUG_ENGINE            HEX: 0001
36 CONSTANT: XAUDIO2_VOICE_NOPITCH           HEX: 0002
37 CONSTANT: XAUDIO2_VOICE_NOSRC             HEX: 0004
38 CONSTANT: XAUDIO2_VOICE_USEFILTER         HEX: 0008
39 CONSTANT: XAUDIO2_VOICE_MUSIC             HEX: 0010
40 CONSTANT: XAUDIO2_PLAY_TAILS              HEX: 0020
41 CONSTANT: XAUDIO2_END_OF_STREAM           HEX: 0040
42 CONSTANT: XAUDIO2_SEND_USEFILTER          HEX: 0080
43
44
45 CONSTANT: XAUDIO2_DEFAULT_FILTER_TYPE      0
46 CONSTANT: XAUDIO2_DEFAULT_FILTER_FREQUENCY 1.0
47 CONSTANT: XAUDIO2_DEFAULT_FILTER_ONEOVERQ  1.0
48
49 CONSTANT: XAUDIO2_QUANTUM_NUMERATOR   1
50 CONSTANT: XAUDIO2_QUANTUM_DENOMINATOR 100
51
52 : XAUDIO2_QUANTUM_MS ( -- z )
53     XAUDIO2_QUANTUM_DENOMINATOR 1000.0 XAUDIO2_QUANTUM_NUMERATOR * / ; inline
54
55 CONSTANT: XAUDIO2_E_INVALID_CALL          HEX: 88960001
56 CONSTANT: XAUDIO2_E_XMA_DECODER_ERROR     HEX: 88960002
57 CONSTANT: XAUDIO2_E_XAPO_CREATION_FAILED  HEX: 88960003
58 CONSTANT: XAUDIO2_E_DEVICE_INVALIDATED    HEX: 88960004
59
60 CONSTANT: Processor1  HEX: 00000001
61 CONSTANT: Processor2  HEX: 00000002
62 CONSTANT: Processor3  HEX: 00000004
63 CONSTANT: Processor4  HEX: 00000008
64 CONSTANT: Processor5  HEX: 00000010
65 CONSTANT: Processor6  HEX: 00000020
66 CONSTANT: Processor7  HEX: 00000040
67 CONSTANT: Processor8  HEX: 00000080
68 CONSTANT: Processor9  HEX: 00000100
69 CONSTANT: Processor10 HEX: 00000200
70 CONSTANT: Processor11 HEX: 00000400
71 CONSTANT: Processor12 HEX: 00000800
72 CONSTANT: Processor13 HEX: 00001000
73 CONSTANT: Processor14 HEX: 00002000
74 CONSTANT: Processor15 HEX: 00004000
75 CONSTANT: Processor16 HEX: 00008000
76 CONSTANT: Processor17 HEX: 00010000
77 CONSTANT: Processor18 HEX: 00020000
78 CONSTANT: Processor19 HEX: 00040000
79 CONSTANT: Processor20 HEX: 00080000
80 CONSTANT: Processor21 HEX: 00100000
81 CONSTANT: Processor22 HEX: 00200000
82 CONSTANT: Processor23 HEX: 00400000
83 CONSTANT: Processor24 HEX: 00800000
84 CONSTANT: Processor25 HEX: 01000000
85 CONSTANT: Processor26 HEX: 02000000
86 CONSTANT: Processor27 HEX: 04000000
87 CONSTANT: Processor28 HEX: 08000000
88 CONSTANT: Processor29 HEX: 10000000
89 CONSTANT: Processor30 HEX: 20000000
90 CONSTANT: Processor31 HEX: 40000000
91 CONSTANT: Processor32 HEX: 80000000
92 CONSTANT: XAUDIO2_ANY_PROCESSOR HEX: ffffffff
93 CONSTANT: XAUDIO2_DEFAULT_PROCESSOR HEX: ffffffff
94 TYPEDEF: int XAUDIO2_WINDOWS_PROCESSOR_SPECIFIER
95 TYPEDEF: int XAUDIO2_PROCESSOR
96
97 CONSTANT: NotDefaultDevice            HEX: 0
98 CONSTANT: DefaultConsoleDevice        HEX: 1
99 CONSTANT: DefaultMultimediaDevice     HEX: 2
100 CONSTANT: DefaultCommunicationsDevice HEX: 4
101 CONSTANT: DefaultGameDevice           HEX: 8
102 CONSTANT: GlobalDefaultDevice         HEX: f
103 CONSTANT: InvalidDeviceRole           HEX: 0
104 TYPEDEF: int XAUDIO2_DEVICE_ROLE
105
106 STRUCT: XAUDIO2_DEVICE_DETAILS
107     { DeviceID     WCHAR[256]           }
108     { DisplayName  WCHAR[256]           }
109     { Role         XAUDIO2_DEVICE_ROLE  }
110     { OutputFormat WAVEFORMATEXTENSIBLE } ;
111
112 STRUCT: XAUDIO2_VOICE_DETAILS
113     { CreationFlags   UINT32 }
114     { InputChannels   UINT32 }
115     { InputSampleRate UINT32 } ;
116
117 C-TYPE: IXAudio2Voice
118
119 STRUCT: XAUDIO2_SEND_DESCRIPTOR
120     { Flags        UINT32         }
121     { pOutputVoice IXAudio2Voice* } ;
122
123 STRUCT: XAUDIO2_VOICE_SENDS
124     { SendCount UINT32                   }
125     { pSends    XAUDIO2_SEND_DESCRIPTOR* } ;
126
127 STRUCT: XAUDIO2_EFFECT_DESCRIPTOR
128     { pEffect        IUnknown* }
129     { InitialState   BOOL      }
130     { OutputChannels UINT32    } ;
131
132 STRUCT: XAUDIO2_EFFECT_CHAIN
133     { EffectCount        UINT32                     }
134     { pEffectDescriptors XAUDIO2_EFFECT_DESCRIPTOR* } ;
135
136 C-ENUM:
137     LowPassFilter
138     BandPassFilter
139     HighPassFilter
140     NotchFilter ;
141 TYPEDEF: int XAUDIO2_FILTER_TYPE
142
143 STRUCT: XAUDIO2_FILTER_PARAMETERS
144     { Type      XAUDIO2_FILTER_TYPE }
145     { Frequency FLOAT               }
146     { OneOverQ  FLOAT               } ;
147
148 STRUCT: XAUDIO2_BUFFER
149     { Flags      UINT32 }
150     { AudioBytes UINT32 }
151     { pAudioData BYTE*  }
152     { PlayBegin  UINT32 }
153     { PlayLength UINT32 }
154     { LoopBegin  UINT32 }
155     { LoopLength UINT32 }
156     { LoopCount  UINT32 }
157     { pContext   void*  } ;
158
159
160 STRUCT: XAUDIO2_BUFFER_WMA
161     { pDecodedPacketCumulativeBytes UINT32* }
162     { PacketCount                   UINT32  } ;
163
164 STRUCT: XAUDIO2_VOICE_STATE
165     { pCurrentBufferContext void*  }
166     { BuffersQueued         UINT32 }
167     { SamplesPlayed         UINT64 } ;
168
169 STRUCT: XAUDIO2_PERFORMANCE_DATA
170     { AudioCyclesSinceLastQuery  UINT64 }
171     { TotalCyclesSinceLastQuery  UINT64 }
172     { MinimumCyclesPerQuantum    UINT32 }
173     { MaximumCyclesPerQuantum    UINT32 }
174     { MemoryUsageInBytes         UINT32 }
175     { CurrentLatencyInSamples    UINT32 }
176     { GlitchesSinceEngineStarted UINT32 }
177     { ActiveSourceVoiceCount     UINT32 }
178     { TotalSourceVoiceCount      UINT32 }
179     { ActiveSubmixVoiceCount     UINT32 }
180     { ActiveResamplerCount       UINT32 }
181     { ActiveMatrixMixCount       UINT32 }
182     { ActiveXmaSourceVoices      UINT32 }
183     { ActiveXmaStreams           UINT32 } ;
184
185 STRUCT: XAUDIO2_DEBUG_CONFIGURATION
186     { TraceMask       UINT32 }
187     { BreakMask       UINT32 }
188     { LogThreadID     BOOL   }
189     { LogFileline     BOOL   }
190     { LogFunctionName BOOL   }
191     { LogTiming       BOOL   } ;
192
193 CONSTANT: XAUDIO2_LOG_ERRORS     HEX: 0001
194 CONSTANT: XAUDIO2_LOG_WARNINGS   HEX: 0002
195 CONSTANT: XAUDIO2_LOG_INFO       HEX: 0004
196 CONSTANT: XAUDIO2_LOG_DETAIL     HEX: 0008
197 CONSTANT: XAUDIO2_LOG_API_CALLS  HEX: 0010
198 CONSTANT: XAUDIO2_LOG_FUNC_CALLS HEX: 0020
199 CONSTANT: XAUDIO2_LOG_TIMING     HEX: 0040
200 CONSTANT: XAUDIO2_LOG_LOCKS      HEX: 0080
201 CONSTANT: XAUDIO2_LOG_MEMORY     HEX: 0100
202 CONSTANT: XAUDIO2_LOG_STREAMING  HEX: 1000
203
204 C-TYPE: IXAudio2EngineCallback
205 C-TYPE: IXAudio2VoiceCallback
206
207 COM-INTERFACE: IXAudio2 IUnknown {8bcf1f58-9fe7-4583-8ac6-e2adc465c8bb}
208     HRESULT GetDeviceCount ( UINT32* pCount )
209     HRESULT GetDeviceDetails ( UINT32 Index, XAUDIO2_DEVICE_DETAILS* pDeviceDetails )
210     HRESULT Initialize ( UINT32 Flags, XAUDIO2_PROCESSOR XAudio2Processor )
211     HRESULT RegisterForCallbacks ( IXAudio2EngineCallback* pCallback )
212     void UnregisterForCallbacks ( IXAudio2EngineCallback* pCallback )
213     HRESULT CreateSourceVoice (
214         IXAudio2SourceVoice**  ppSourceVoice,
215         WAVEFORMATEX*          pSourceFormat,
216         UINT32                 Flags,
217         FLOAT                  MaxFrequencyRatio,
218         IXAudio2VoiceCallback* pCallback,
219         XAUDIO2_VOICE_SENDS*   pSendList,
220         XAUDIO2_EFFECT_CHAIN*  pEffectChain )
221     HRESULT CreateSubmixVoice (
222         IXAudio2SubmixVoice** ppSubmixVoice,
223         UINT32                InputChannels,
224         UINT32                InputSampleRate,
225         UINT32                Flags,
226         UINT32                ProcessingStage,
227         XAUDIO2_VOICE_SENDS*  pSendList,
228         XAUDIO2_EFFECT_CHAIN* pEffectChain )
229     HRESULT CreateMasteringVoice (
230         IXAudio2MasteringVoice** ppMasteringVoice,
231         UINT32                   InputChannels,
232         UINT32                   InputSampleRate,
233         UINT32                   Flags
234         UINT32                   DeviceIndex,
235         XAUDIO2_EFFECT_CHAIN*    pEffectChain )
236     HRESULT StartEngine (   )
237     void StopEngine (   )
238     HRESULT CommitChanges ( UINT32 OperationSet )
239     void GetPerformanceData ( XAUDIO2_PERFORMANCE_DATA* pPerfData )
240     void SetDebugConfiguration ( XAUDIO2_DEBUG_CONFIGURATION* pDebugConfiguration, void* pReserved ) ;
241
242 COM-INTERFACE: IXAudio2Voice f {00000000-0000-0000-0000-000000000000}
243     void GetVoiceDetails ( XAUDIO2_VOICE_DETAILS* pVoiceDetails )
244     HRESULT SetOutputVoices ( XAUDIO2_VOICE_SENDS* pSendList )
245     HRESULT SetEffectChain ( XAUDIO2_EFFECT_CHAIN* pEffectChain )
246     HRESULT EnableEffect ( UINT32 EffectIndex, UINT32 OperationSet )
247     HRESULT DisableEffect ( UINT32 EffectIndex, UINT32 OperationSet )
248     void GetEffectState ( UINT32 EffectIndex, BOOL* pEnabled )
249     HRESULT SetEffectParameters (
250         UINT32 EffectIndex,
251         void*  pParameters,
252         UINT32 ParametersByteSize,
253         UINT32 OperationSet )
254     HRESULT GetEffectParameters (
255         UINT32 EffectIndex,
256         void*  pParameters,
257         UINT32 ParametersByteSize )
258     HRESULT SetFilterParameters ( XAUDIO2_FILTER_PARAMETERS* pParameters, UINT32 OperationSet )
259     void GetFilterParameters ( XAUDIO2_FILTER_PARAMETERS* pParameters )
260     HRESULT SetOutputFilterParameters ( IXAudio2Voice*             pDestinationVoice,
261                                         XAUDIO2_FILTER_PARAMETERS* pParameters,
262                                         UINT32                     OperationSet )
263     void GetOutputFilterParameters ( IXAudio2Voice*             pDestinationVoice,
264                                      XAUDIO2_FILTER_PARAMETERS* pParameters )
265     HRESULT SetVolume ( FLOAT  Volume,
266                         UINT32 OperationSet )
267     void GetVolume ( FLOAT* pVolume )
268     HRESULT SetChannelVolumes ( UINT32 Channels,
269                                 FLOAT* pVolumes,
270                                 UINT32 OperationSet )
271     void GetChannelVolumes ( UINT32 Channels, FLOAT* pVolumes )
272     HRESULT SetOutputMatrix (
273         IXAudio2Voice* pDestinationVoice,
274         UINT32         SourceChannels,
275         UINT32         DestinationChannels,
276         FLOAT*         pLevelMatrix,
277         UINT32         OperationSet    )
278     void GetOutputMatrix (
279         IXAudio2Voice* pDestinationVoice,
280         UINT32         SourceChannels,
281         UINT32         DestinationChannels,
282         FLOAT*         pLevelMatrix )
283     void DestroyVoice (  ) ;
284
285 COM-INTERFACE: IXAudio2SourceVoice IXAudio2Voice {00000000-0000-0000-0000-000000000000}
286     HRESULT Start ( UINT32 Flags, UINT32 OperationSet )
287     HRESULT Stop ( UINT32 Flags, UINT32 OperationSet )
288     HRESULT SubmitSourceBuffer ( XAUDIO2_BUFFER* pBuffer, XAUDIO2_BUFFER_WMA* pBufferWMA )
289     HRESULT FlushSourceBuffers ( )
290     HRESULT Discontinuity ( )
291     HRESULT ExitLoop ( UINT32 OperationSet )
292     void GetState ( XAUDIO2_VOICE_STATE* pVoiceState )
293     HRESULT SetFrequencyRatio ( FLOAT Ratio, UINT32 OperationSet )
294     void GetFrequencyRatio ( FLOAT* pRatio )
295     HRESULT SetSourceSampleRate ( UINT32 NewSourceSampleRate ) ;
296
297 COM-INTERFACE: IXAudio2SubmixVoice IXAudio2Voice {00000000-0000-0000-0000-000000000000} ;
298 COM-INTERFACE: IXAudio2MasteringVoice IXAudio2Voice {00000000-0000-0000-0000-000000000000} ;
299     
300 COM-INTERFACE: IXAudio2EngineCallback f {00000000-0000-0000-0000-000000000000}
301     void OnProcessingPassStart (   )
302     void OnProcessingPassEnd (   )
303     void OnCriticalError ( HRESULT Error ) ;
304
305 COM-INTERFACE: IXAudio2VoiceCallback f {00000000-0000-0000-0000-000000000000}
306     void OnVoiceProcessingPassStart ( UINT32 BytesRequired )
307     void OnVoiceProcessingPassEnd (   )
308     void OnStreamEnd (   )
309     void OnBufferStart ( void* pBufferContext )
310     void OnBufferEnd ( void* pBufferContext )
311     void OnLoopEnd ( void* pBufferContext )
312     void OnVoiceError ( void* pBufferContext, HRESULT Error ) ;