2 * OpenAL cross platform audio library
3 * Copyright (C) 1999-2000 by authors.
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Library General Public License for more details.
14 * You should have received a copy of the GNU Library General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 * Boston, MA 02111-1307, USA.
18 * Or go to http://www.gnu.org/copyleft/lgpl.html
31 #define AL_BUILD_LIBRARY
36 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_ENABLE
)(ALenum capability
);
37 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_DISABLE
)(ALenum capability
);
38 typedef ALAPI
ALboolean (ALAPIENTRY
*ALAPI_IS_ENABLED
)(ALenum capability
);
40 typedef ALAPI
const ALchar
* (ALAPIENTRY
*ALAPI_GET_STRING
)(ALenum param
);
41 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_GET_BOOLEANV
)(ALenum param
, ALboolean
* data
);
42 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_GET_INTEGERV
)(ALenum param
, ALint
* data
);
43 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_GET_FLOATV
)(ALenum param
, ALfloat
* data
);
44 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_GET_DOUBLEV
)(ALenum param
, ALdouble
* data
);
45 typedef ALAPI
ALboolean (ALAPIENTRY
*ALAPI_GET_BOOLEAN
)(ALenum param
);
46 typedef ALAPI
ALint (ALAPIENTRY
*ALAPI_GET_INTEGER
)(ALenum param
);
47 typedef ALAPI
ALfloat (ALAPIENTRY
*ALAPI_GET_FLOAT
)(ALenum param
);
48 typedef ALAPI
ALdouble (ALAPIENTRY
*ALAPI_GET_DOUBLE
)(ALenum param
);
50 typedef ALAPI
ALenum (ALAPIENTRY
*ALAPI_GET_ERROR
)(ALvoid
);
52 typedef ALAPI
ALboolean (ALAPIENTRY
*ALAPI_IS_EXTENSION_PRESENT
)(const ALchar
* ename
);
53 typedef ALAPI ALvoid
* (ALAPIENTRY
*ALAPI_GET_PROC_ADDRESS
)(const ALchar
* fname
);
54 typedef ALAPI
ALenum (ALAPIENTRY
*ALAPI_GET_ENUM_VALUE
)(const ALchar
* ename
);
56 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_LISTENERF
)(ALenum param
, ALfloat value
);
57 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_LISTENER3F
)(ALenum param
, ALfloat v1
, ALfloat v2
, ALfloat v3
);
58 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_LISTENERFV
)(ALenum param
, const ALfloat
* values
);
59 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_LISTENERI
)(ALenum param
, ALint value
);
60 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_LISTENER3I
)( ALenum param
, ALint value1
, ALint value2
, ALint value3
);
61 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_LISTENERIV
)( ALenum param
, const ALint
* values
);
62 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_GET_LISTENERF
)(ALenum param
, ALfloat
* value
);
63 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_GET_LISTENER3F
)(ALenum param
, ALfloat
* v1
, ALfloat
* v2
, ALfloat
* v3
);
64 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_GET_LISTENERFV
)(ALenum param
, ALfloat
* values
);
65 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_GET_LISTENERI
)(ALenum param
, ALint
* value
);
66 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_GET_LISTENER3I
)( ALenum param
, ALint
*value1
, ALint
*value2
, ALint
*value3
);
67 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_GET_LISTENERIV
)( ALenum param
, ALint
* values
);
69 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_GEN_SOURCES
)(ALsizei n
, ALuint
* sourceNames
);
70 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_DELETE_SOURCES
)(ALsizei n
, const ALuint
* sourceNames
);
71 typedef ALAPI
ALboolean (ALAPIENTRY
*ALAPI_IS_SOURCE
)(ALuint id
);
72 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_SOURCEF
)(ALuint sourceName
, ALenum param
, ALfloat value
);
73 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_SOURCE3F
)(ALuint sourceName
, ALenum param
, ALfloat v1
, ALfloat v2
, ALfloat v3
);
74 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_SOURCEFV
)(ALuint sourceName
, ALenum param
, const ALfloat
* values
);
75 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_SOURCEI
)(ALuint sourceName
, ALenum param
, ALint value
);
76 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_SOURCE3I
)( ALuint sid
, ALenum param
, ALint value1
, ALint value2
, ALint value3
);
77 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_SOURCEIV
)( ALuint sid
, ALenum param
, const ALint
* values
);
78 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_GET_SOURCEF
)(ALuint sourceName
, ALenum param
, ALfloat
* value
);
79 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_GET_SOURCE3F
)(ALuint sourceName
, ALenum param
, ALfloat
* v1
, ALfloat
* v2
, ALfloat
* v3
);
80 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_GET_SOURCEFV
)(ALuint sourceName
, ALenum param
, const ALfloat
* values
);
81 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_GET_SOURCEI
)(ALuint sourceName
, ALenum param
, ALint
* value
);
82 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_GET_SOURCE3I
)( ALuint sid
, ALenum param
, ALint
* value1
, ALint
* value2
, ALint
* value3
);
83 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_GET_SOURCEIV
)( ALuint sid
, ALenum param
, ALint
* values
);
84 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_SOURCE_PLAYV
)(ALsizei n
, const ALuint
* sources
);
85 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_SOURCE_STOPV
)(ALsizei n
, const ALuint
* sources
);
86 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_SOURCE_REWINDV
)(ALsizei n
, const ALuint
* sources
);
87 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_SOURCE_PAUSEV
)(ALsizei n
, const ALuint
* sources
);
88 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_SOURCE_PLAY
)(ALuint sourceName
);
89 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_SOURCE_STOP
)(ALuint sourceName
);
90 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_SOURCE_REWIND
)(ALuint sourceName
);
91 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_SOURCE_PAUSE
)(ALuint sourceName
);
93 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_SOURCE_QUEUE_BUFFERS
)(ALuint sourceName
, ALsizei n
, const ALuint
* bufferNames
);
94 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_SOURCE_UNQUEUE_BUFFERS
)(ALuint sourceName
, ALsizei n
, ALuint
* bufferNames
);
96 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_GEN_BUFFERS
)(ALsizei n
, ALuint
* bufferNames
);
97 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_DELETE_BUFFERS
)(ALsizei n
, const ALuint
* bufferNames
);
98 typedef ALAPI
ALboolean (ALAPIENTRY
*ALAPI_IS_BUFFER
)(ALuint bufferName
);
99 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_BUFFER_DATA
)(ALuint bufferName
, ALenum format
, const ALvoid
* data
, ALsizei size
, ALuint freq
);
101 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_BUFFERF
)( ALuint bid
, ALenum param
, ALfloat value
);
102 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_BUFFER3F
)( ALuint bid
, ALenum param
, ALfloat value1
, ALfloat value2
, ALfloat value3
);
103 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_BUFFERFV
)( ALuint bid
, ALenum param
, const ALfloat
* values
);
104 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_BUFFERI
)( ALuint bid
, ALenum param
, ALint value
);
105 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_BUFFER3I
)( ALuint bid
, ALenum param
, ALint value1
, ALint value2
, ALint value3
);
106 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_BUFFERIV
)( ALuint bid
, ALenum param
, const ALint
* values
);
108 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_GET_BUFFERF
)( ALuint bid
, ALenum param
, ALfloat
* value
);
109 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_GET_BUFFER3F
)( ALuint bid
, ALenum param
, ALfloat
* value1
, ALfloat
* value2
, ALfloat
* value3
);
110 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_GET_BUFFERFV
)( ALuint bid
, ALenum param
, ALfloat
* values
);
111 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_GET_BUFFERI
)( ALuint bid
, ALenum param
, ALint
* value
);
112 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_GET_BUFFER3I
)( ALuint bid
, ALenum param
, ALint
* value1
, ALint
* value2
, ALint
* value3
);
113 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_GET_BUFFERIV
)( ALuint bid
, ALenum param
, ALint
* values
);
115 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_DOPPLER_FACTOR
)(ALfloat value
);
116 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_DOPPLER_VELOCITY
)(ALfloat value
);
117 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_SPEED_OF_SOUND
)(ALfloat value
);
118 typedef ALAPI
ALvoid (ALAPIENTRY
*ALAPI_DISTANCE_MODEL
)(ALenum value
);
120 typedef struct ALAPI_FXN_TABLE_STRUCT
122 ALAPI_ENABLE alEnable
;
123 ALAPI_DISABLE alDisable
;
124 ALAPI_IS_ENABLED alIsEnabled
;
126 ALAPI_GET_STRING alGetString
;
127 ALAPI_GET_BOOLEANV alGetBooleanv
;
128 ALAPI_GET_INTEGERV alGetIntegerv
;
129 ALAPI_GET_FLOATV alGetFloatv
;
130 ALAPI_GET_DOUBLEV alGetDoublev
;
131 ALAPI_GET_BOOLEAN alGetBoolean
;
132 ALAPI_GET_INTEGER alGetInteger
;
133 ALAPI_GET_FLOAT alGetFloat
;
134 ALAPI_GET_DOUBLE alGetDouble
;
136 ALAPI_GET_ERROR alGetError
;
138 ALAPI_IS_EXTENSION_PRESENT alIsExtensionPresent
;
139 ALAPI_GET_PROC_ADDRESS alGetProcAddress
;
140 ALAPI_GET_ENUM_VALUE alGetEnumValue
;
142 ALAPI_LISTENERF alListenerf
;
143 ALAPI_LISTENER3F alListener3f
;
144 ALAPI_LISTENERFV alListenerfv
;
145 ALAPI_LISTENERI alListeneri
;
146 ALAPI_LISTENER3I alListener3i
;
147 ALAPI_LISTENERIV alListeneriv
;
149 ALAPI_GET_LISTENERF alGetListenerf
;
150 ALAPI_GET_LISTENER3F alGetListener3f
;
151 ALAPI_GET_LISTENERFV alGetListenerfv
;
152 ALAPI_GET_LISTENERI alGetListeneri
;
153 ALAPI_GET_LISTENER3I alGetListener3i
;
154 ALAPI_GET_LISTENERIV alGetListeneriv
;
156 ALAPI_GEN_SOURCES alGenSources
;
157 ALAPI_DELETE_SOURCES alDeleteSources
;
158 ALAPI_IS_SOURCE alIsSource
;
159 ALAPI_SOURCEF alSourcef
;
160 ALAPI_SOURCE3F alSource3f
;
161 ALAPI_SOURCEFV alSourcefv
;
162 ALAPI_SOURCEI alSourcei
;
163 ALAPI_SOURCE3I alSource3i
;
164 ALAPI_SOURCEIV alSourceiv
;
165 ALAPI_GET_SOURCEF alGetSourcef
;
166 ALAPI_GET_SOURCE3F alGetSource3f
;
167 ALAPI_GET_SOURCEFV alGetSourcefv
;
168 ALAPI_GET_SOURCEI alGetSourcei
;
169 ALAPI_GET_SOURCE3I alGetSource3i
;
170 ALAPI_GET_SOURCEIV alGetSourceiv
;
171 ALAPI_SOURCE_PLAYV alSourcePlayv
;
172 ALAPI_SOURCE_STOPV alSourceStopv
;
173 ALAPI_SOURCE_REWINDV alSourceRewindv
;
174 ALAPI_SOURCE_PAUSEV alSourcePausev
;
175 ALAPI_SOURCE_PLAY alSourcePlay
;
176 ALAPI_SOURCE_STOP alSourceStop
;
177 ALAPI_SOURCE_REWIND alSourceRewind
;
178 ALAPI_SOURCE_PAUSE alSourcePause
;
180 ALAPI_SOURCE_QUEUE_BUFFERS alSourceQueueBuffers
;
181 ALAPI_SOURCE_UNQUEUE_BUFFERS alSourceUnqueueBuffers
;
183 ALAPI_GEN_BUFFERS alGenBuffers
;
184 ALAPI_DELETE_BUFFERS alDeleteBuffers
;
185 ALAPI_IS_BUFFER alIsBuffer
;
186 ALAPI_BUFFER_DATA alBufferData
;
187 ALAPI_BUFFERF alBufferf
;
188 ALAPI_BUFFER3F alBuffer3f
;
189 ALAPI_BUFFERFV alBufferfv
;
190 ALAPI_BUFFERI alBufferi
;
191 ALAPI_BUFFER3I alBuffer3i
;
192 ALAPI_BUFFERIV alBufferiv
;
193 ALAPI_GET_BUFFERF alGetBufferf
;
194 ALAPI_GET_BUFFER3F alGetBuffer3f
;
195 ALAPI_GET_BUFFERFV alGetBufferfv
;
196 ALAPI_GET_BUFFERI alGetBufferi
;
197 ALAPI_GET_BUFFER3I alGetBuffer3i
;
198 ALAPI_GET_BUFFERIV alGetBufferiv
;
200 ALAPI_DOPPLER_FACTOR alDopplerFactor
;
201 ALAPI_DOPPLER_VELOCITY alDopplerVelocity
;
202 ALAPI_SPEED_OF_SOUND alSpeedOfSound
;
203 ALAPI_DISTANCE_MODEL alDistanceModel
;
210 typedef struct ALCdevice_struct ALCdevice
;
211 typedef struct ALCcontext_struct ALCcontext
;
213 typedef ALCAPI ALCcontext
* (ALCAPIENTRY
*ALCAPI_CREATE_CONTEXT
)(ALCdevice
* device
, const ALint
* attrList
);
214 typedef ALCAPI
ALboolean (ALCAPIENTRY
*ALCAPI_MAKE_CONTEXT_CURRENT
)(ALCcontext
* context
);
215 typedef ALCAPI
ALvoid (ALCAPIENTRY
*ALCAPI_PROCESS_CONTEXT
)(ALCcontext
* context
);
216 typedef ALCAPI
ALCvoid (ALCAPIENTRY
*ALCAPI_SUSPEND_CONTEXT
)(ALCcontext
* context
);
217 typedef ALCAPI
ALvoid (ALCAPIENTRY
*ALCAPI_DESTROY_CONTEXT
)(ALCcontext
* context
);
218 typedef ALCAPI ALCcontext
* (ALCAPIENTRY
*ALCAPI_GET_CURRENT_CONTEXT
)(ALvoid
);
219 typedef ALCAPI ALCdevice
* (ALCAPIENTRY
*ALCAPI_GET_CONTEXTS_DEVICE
)(ALCcontext
* context
);
221 typedef ALCAPI ALCdevice
* (ALCAPIENTRY
*ALCAPI_OPEN_DEVICE
)(const ALCchar
* deviceName
);
222 typedef ALCAPI
ALCboolean (ALCAPIENTRY
*ALCAPI_CLOSE_DEVICE
)(ALCdevice
* device
);
224 typedef ALCAPI
ALenum (ALCAPIENTRY
*ALCAPI_GET_ERROR
)(ALCdevice
* device
);
226 typedef ALCAPI
ALboolean (ALCAPIENTRY
*ALCAPI_IS_EXTENSION_PRESENT
)(ALCdevice
* device
, const ALCchar
* eName
);
227 typedef ALCAPI ALvoid
* (ALCAPIENTRY
*ALCAPI_GET_PROC_ADDRESS
)(ALCdevice
* device
, const ALCchar
* fName
);
228 typedef ALCAPI
ALenum (ALCAPIENTRY
*ALCAPI_GET_ENUM_VALUE
)(ALCdevice
* device
, const ALCchar
* eName
);
230 typedef ALCAPI
const ALCchar
* (ALCAPIENTRY
*ALCAPI_GET_STRING
)(ALCdevice
* device
, ALenum param
);
231 typedef ALCAPI
ALvoid (ALCAPIENTRY
*ALCAPI_GET_INTEGERV
)(ALCdevice
* device
, ALenum param
, ALsizei size
, ALint
* data
);
233 typedef ALCAPI ALCdevice
* (ALCAPIENTRY
*ALCAPI_CAPTURE_OPEN_DEVICE
)( const ALCchar
*devicename
, ALCuint frequency
, ALCenum format
, ALCsizei buffersize
);
234 typedef ALCAPI
ALCboolean (ALCAPIENTRY
*ALCAPI_CAPTURE_CLOSE_DEVICE
)( ALCdevice
*device
);
235 typedef ALCAPI
void (ALCAPIENTRY
*ALCAPI_CAPTURE_START
)( ALCdevice
*device
);
236 typedef ALCAPI
void (ALCAPIENTRY
*ALCAPI_CAPTURE_STOP
)( ALCdevice
*device
);
237 typedef ALCAPI
void (ALCAPIENTRY
*ALCAPI_CAPTURE_SAMPLES
)( ALCdevice
*device
, ALCvoid
*buffer
, ALCsizei samples
);
239 typedef struct ALCAPI_FXN_TABLE_STRUCT
241 ALCAPI_CREATE_CONTEXT alcCreateContext
;
242 ALCAPI_MAKE_CONTEXT_CURRENT alcMakeContextCurrent
;
243 ALCAPI_PROCESS_CONTEXT alcProcessContext
;
244 ALCAPI_SUSPEND_CONTEXT alcSuspendContext
;
245 ALCAPI_DESTROY_CONTEXT alcDestroyContext
;
246 ALCAPI_GET_CURRENT_CONTEXT alcGetCurrentContext
;
247 ALCAPI_GET_CONTEXTS_DEVICE alcGetContextsDevice
;
249 ALCAPI_OPEN_DEVICE alcOpenDevice
;
250 ALCAPI_CLOSE_DEVICE alcCloseDevice
;
252 ALCAPI_GET_ERROR alcGetError
;
254 ALCAPI_IS_EXTENSION_PRESENT alcIsExtensionPresent
;
255 ALCAPI_GET_PROC_ADDRESS alcGetProcAddress
;
256 ALCAPI_GET_ENUM_VALUE alcGetEnumValue
;
258 ALCAPI_GET_STRING alcGetString
;
259 ALCAPI_GET_INTEGERV alcGetIntegerv
;
261 ALCAPI_CAPTURE_OPEN_DEVICE alcCaptureOpenDevice
;
262 ALCAPI_CAPTURE_CLOSE_DEVICE alcCaptureCloseDevice
;
263 ALCAPI_CAPTURE_START alcCaptureStart
;
264 ALCAPI_CAPTURE_STOP alcCaptureStop
;
265 ALCAPI_CAPTURE_SAMPLES alcCaptureSamples
;
273 //*****************************************************************************
274 // Additional Defines
275 //*****************************************************************************
277 typedef struct ALCdevice_struct
280 // These variables must always be initialized.
286 // Support for 3rd party OpenAL implementations.
289 ALCAPI_FXN_TABLE AlcApi
;
292 ALCdevice
* CaptureDevice
;
294 struct ALCdevice_struct
* DllDevice
;
298 typedef struct ALCcontext_struct
301 // These variables are always initialized.
303 ALlistEntry ListEntry
;
307 ALAPI_FXN_TABLE AlApi
;
308 CRITICAL_SECTION Lock
;
309 struct ALCcontext_struct
* DllContext
;
314 extern ALlist
* alContextList
;
315 extern ALCcontext
* alCurrentContext
;
317 // Device Enumeration structures, strings and variables
318 typedef struct _ALDEVICE
320 ALchar
*pszDeviceName
;
321 TCHAR
*pszHostDLLFilename
;
322 struct _ALDEVICE
*pNextDevice
;
325 extern ALchar
*pszDefaultDeviceSpecifier
;
326 extern ALchar
*pszDeviceSpecifierList
;
327 extern ALchar
*pszDefaultCaptureDeviceSpecifier
;
328 extern ALchar
*pszCaptureDeviceSpecifierList
;
329 extern ALchar
*pszDefaultAllDevicesSpecifier
;
330 extern ALchar
*pszAllDevicesSpecifierList
;
332 extern ALDEVICE
*g_pDeviceList
;
333 extern ALDEVICE
*g_pCaptureDeviceList
;
334 extern ALDEVICE
*g_pAllDevicesList
;