1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
#![allow(dead_code, non_camel_case_types, non_upper_case_globals, non_snake_case)]

use std::os::raw::{c_char, c_double, c_float, c_int, c_short, c_uchar, c_uint, c_ushort, c_void};

pub type al_boolean = c_char;
pub type al_char = c_char;
pub type al_byte = c_char;
pub type al_ubyte = c_uchar;
pub type al_short = c_short;
pub type al_ushort = c_ushort;
pub type al_int = c_int;
pub type al_uint = c_uint;
pub type al_sizei = c_int;
pub type al_enum = c_int;
pub type al_float = c_float;
pub type al_double = c_double;
pub type al_void = c_void;

pub const AL_NONE: al_enum = 0;
pub const AL_FALSE: al_enum = 0;
pub const AL_TRUE: al_enum = 1;
pub const AL_SOURCE_RELATIVE: al_enum = 0x202;
pub const AL_CONE_INNER_ANGLE: al_enum = 0x1001;
pub const AL_CONE_OUTER_ANGLE: al_enum = 0x1002;
pub const AL_PITCH: al_enum = 0x1003;
pub const AL_POSITION: al_enum = 0x1004;
pub const AL_DIRECTION: al_enum = 0x1005;
pub const AL_VELOCITY: al_enum = 0x1006;
pub const AL_LOOPING: al_enum = 0x1007;
pub const AL_BUFFER: al_enum = 0x1009;
pub const AL_GAIN: al_enum = 0x100A;
pub const AL_MIN_GAIN: al_enum = 0x100D;
pub const AL_MAX_GAIN: al_enum = 0x100E;
pub const AL_ORIENTATION: al_enum = 0x100F;
pub const AL_SOURCE_STATE: al_enum = 0x1010;
pub const AL_INITIAL: al_enum = 0x1011;
pub const AL_PLAYING: al_enum = 0x1012;
pub const AL_PAUSED: al_enum = 0x1013;
pub const AL_STOPPED: al_enum = 0x1014;
pub const AL_BUFFERS_QUEUED: al_enum = 0x1015;
pub const AL_BUFFERS_PROCESSED: al_enum = 0x1016;
pub const AL_REFERENCE_DISTANCE: al_enum = 0x1020;
pub const AL_ROLLOFF_FACTOR: al_enum = 0x1021;
pub const AL_CONE_OUTER_GAIN: al_enum = 0x1022;
pub const AL_MAX_DISTANCE: al_enum = 0x1023;
pub const AL_SEC_OFFSET: al_enum = 0x1024;
pub const AL_SAMPLE_OFFSET: al_enum = 0x1025;
pub const AL_BYTE_OFFSET: al_enum = 0x1026;
pub const AL_SOURCE_TYPE: al_enum = 0x1027;
pub const AL_STATIC: al_enum = 0x1028;
pub const AL_STREAMING: al_enum = 0x1029;
pub const AL_UNDETERMINED: al_enum = 0x1030;
pub const AL_FORMAT_MONO8: al_enum = 0x1100;
pub const AL_FORMAT_MONO16: al_enum = 0x1101;
pub const AL_FORMAT_STEREO8: al_enum = 0x1102;
pub const AL_FORMAT_STEREO16: al_enum = 0x1103;
pub const AL_FREQUENCY: al_enum = 0x2001;
pub const AL_BITS: al_enum = 0x2002;
pub const AL_CHANNELS: al_enum = 0x2003;
pub const AL_SIZE: al_enum = 0x2004;
pub const AL_UNUSED: al_enum = 0x2010;
pub const AL_PENDING: al_enum = 0x2011;
pub const AL_PROCESSED: al_enum = 0x2012;
pub const AL_NO_ERROR: al_enum = 0;
pub const AL_INVALID_NAME: al_enum = 0xA001;
pub const AL_INVALID_ENUM: al_enum = 0xA002;
pub const AL_INVALID_VALUE: al_enum = 0xA003;
pub const AL_INVALID_OPERATION: al_enum = 0xA004;
pub const AL_OUT_OF_MEMORY: al_enum = 0xA005;
pub const AL_VENDOR: al_enum = 0xB001;
pub const AL_VERSION: al_enum = 0xB002;
pub const AL_RENDERER: al_enum = 0xB003;
pub const AL_EXTENSIONS: al_enum = 0xB004;
pub const AL_DOPPLER_FACTOR: al_enum = 0xC000;
pub const AL_DOPPLER_VELOCITY: al_enum = 0xC001;
pub const AL_SPEED_OF_SOUND: al_enum = 0xC003;
pub const AL_DISTANCE_MODEL: al_enum = 0xD000;
pub const AL_INVERSE_DISTANCE: al_enum = 0xD001;
pub const AL_INVERSE_DISTANCE_CLAMPED: al_enum = 0xD002;
pub const AL_LINEAR_DISTANCE: al_enum = 0xD003;
pub const AL_LINEAR_DISTANCE_CLAMPED: al_enum = 0xD004;
pub const AL_EXPONENT_DISTANCE: al_enum = 0xD005;
pub const AL_EXPONENT_DISTANCE_CLAMPED: al_enum = 0xD006;

#[link(name="OpenAL", kind="framework")]
extern "C" {
    #[link_name = "alDopplerFactor"]
    pub fn al_doppler_factor(value: al_float);

    #[link_name = "alDopplerVelocity"]
    pub fn al_doppler_velocity(value: al_float);

    #[link_name = "alSpeedOfSound"]
    pub fn al_speed_of_sound(value: al_float);

    #[link_name = "alDistanceModel"]
    pub fn al_distance_model(distance_model: al_enum);

    #[link_name = "alEnable"]
    pub fn al_enable(capability: al_enum);

    #[link_name = "alDisable"]
    pub fn al_disable(capability: al_enum);

    #[link_name = "alIsEnabled"]
    pub fn al_is_enabled(capability: al_enum) -> al_boolean;

    #[link_name = "alGetString"]
    pub fn al_get_string(param: al_enum) -> *const al_char;

    #[link_name = "alGetBooleanv"]
    pub fn al_get_booleanv(param: al_enum, values: *mut al_boolean);

    #[link_name = "alGetIntegerv"]
    pub fn al_get_integerv(param: al_enum, values: *mut al_int);

    #[link_name = "alGetFloatv"]
    pub fn al_get_floatv(param: al_enum, values: *mut al_float);

    #[link_name = "alGetDoublev"]
    pub fn al_get_doublev(param: al_enum, values: *mut al_double);

    #[link_name = "alGetBoolean"]
    pub fn al_get_boolean(param: al_enum) -> al_boolean;

    #[link_name = "alGetInteger"]
    pub fn al_get_integer(param: al_enum) -> al_int;

    #[link_name = "alGetFloat"]
    pub fn al_get_float(param: al_enum) -> al_float;

    #[link_name = "alGetDouble"]
    pub fn al_get_double(param: al_enum) -> al_double;

    #[link_name = "alGetError"]
    pub fn al_get_error() -> al_enum;

    #[link_name = "alIsExtensionPresent"]
    pub fn al_is_extension_present(extname: *const al_char) -> al_boolean;

    #[link_name = "alGetProcAddress"]
    pub fn al_get_proc_address(fname: *const al_char) -> *mut al_void;

    #[link_name = "alGetEnumValue"]
    pub fn al_get_enum_value(ename: *const al_char) -> al_enum;

    #[link_name = "alListenerf"]
    pub fn al_listenerf(param: al_enum, value: al_float);

    #[link_name = "alListener3f"]
    pub fn al_listener3f(param: al_enum, value1: al_float, value2: al_float, value3: al_float);

    #[link_name = "alListenerfv"]
    pub fn al_listenerfv(param: al_enum, values: *const al_float);

    #[link_name = "alListeneri"]
    pub fn al_listeneri(param: al_enum, value: al_int);

    #[link_name = "alListener3i"]
    pub fn al_listener3i(param: al_enum, value1: al_int, value2: al_int, value3: al_int);

    #[link_name = "alListeneriv"]
    pub fn al_listeneriv(param: al_enum, values: *const al_int);

    #[link_name = "alGetListenerf"]
    pub fn al_get_listenerf(param: al_enum, value: *mut al_float);

    #[link_name = "alGetListener3f"]
    pub fn al_get_listener3f(param: al_enum, value1: *mut al_float, value2: *mut al_float, value3: *mut al_float);

    #[link_name = "alGetListenerfv"]
    pub fn al_get_listenerfv(param: al_enum, values: *mut al_float);

    #[link_name = "alGetListeneri"]
    pub fn al_get_listeneri(param: al_enum, value: *mut al_int);

    #[link_name = "alGetListener3i"]
    pub fn al_get_listener3i(param: al_enum, value1: *mut al_int, value2: *mut al_int, value3: *mut al_int);

    #[link_name = "alGetListeneriv"]
    pub fn al_get_listeneriv(param: al_enum, values: *mut al_int);

    #[link_name = "alGenSources"]
    pub fn al_gen_sources(n: al_sizei, sources: *mut al_uint);

    #[link_name = "alDeleteSources"]
    pub fn al_delete_sources(n: al_sizei, sources: *const al_uint);

    #[link_name = "alIsSource"]
    pub fn al_is_source(source: al_uint);

    #[link_name = "alSourcef"]
    pub fn al_sourcef(source: al_uint, param: al_enum, value: al_float);

    #[link_name = "alSource3f"]
    pub fn al_source3f(source: al_uint, param: al_enum, value1: al_float, value2: al_float, value3: al_float);

    #[link_name = "alSourcefv"]
    pub fn al_sourcefv(source: al_uint, param: al_enum, values: *const al_float);

    #[link_name = "alSourcei"]
    pub fn al_sourcei(source: al_uint, param: al_enum, value: al_int);

    #[link_name = "alSource3i"]
    pub fn al_source3i(source: al_uint, param: al_enum, value1: al_int, value2: al_int, value3: al_int);

    #[link_name = "alSourceiv"]
    pub fn al_sourceiv(source: al_uint, param: al_enum, values: *const al_int);

    #[link_name = "alGetSourcef"]
    pub fn al_get_sourcef(source: al_uint, param: al_enum, value: *mut al_float);

    #[link_name = "alGetSource3f"]
    pub fn al_get_source3f(source: al_uint, param: al_enum, value1: *mut al_float, value2: *mut al_float, value3: *mut al_float);

    #[link_name = "alGetSourcefv"]
    pub fn al_get_sourcefv(source: al_uint, param: al_enum, values: *mut al_float);

    #[link_name = "alGetSourcei"]
    pub fn al_get_sourcei(source: al_uint,  param: al_enum, value: *mut al_int);

    #[link_name = "alGetSource3i"]
    pub fn al_get_source3i(source: al_uint, param: al_enum, value1: *mut al_int, value2: *mut al_int, value3: *mut al_int);

    #[link_name = "alGetSourceiv"]
    pub fn al_get_sourceiv(source: al_uint,  param: al_enum, values: *mut al_int);

    #[link_name = "alSourcePlayv"]
    pub fn al_source_playv(n: al_sizei, sources: *const al_uint);

    #[link_name = "alSourceStopv"]
    pub fn al_source_stopv(n: al_sizei, sources: *const al_uint);

    #[link_name = "alSourceRewindv"]
    pub fn al_source_rewindv(n: al_sizei, sources: *const al_uint);

    #[link_name = "alSourcePausev"]
    pub fn al_source_pausev(n: al_sizei, sources: *const al_uint);

    #[link_name = "alSourcePlay"]
    pub fn al_source_play(source: al_uint);

    #[link_name = "alSourceStop"]
    pub fn al_source_stop(source: al_uint);

    #[link_name = "alSourceRewind"]
    pub fn al_source_rewind(source: al_uint);

    #[link_name = "alSourcePause"]
    pub fn al_source_pause(source: al_uint);

    #[link_name = "alSourceQueueBuffers"]
    pub fn al_source_queue_buffers(source: al_uint, n: al_sizei, buffers: *const al_uint);

    #[link_name = "alSourceUnqueueBuffers"]
    pub fn al_source_unqueue_buffers(source: al_uint, n: al_sizei, buffers: *const al_uint);

    #[link_name = "alGenBuffers"]
    pub fn al_gen_buffers(n: al_sizei, buffers: *mut al_uint);

    #[link_name = "alDeleteBuffers"]
    pub fn al_delete_buffers(n: al_sizei, buffers: *const al_uint);

    #[link_name = "alIsBuffer"]
    pub fn al_is_buffer(buffer: al_uint);

    #[link_name = "alBufferData"]
    pub fn al_buffer_data(buffer: al_uint, format: al_enum, data: *const al_void, size: al_sizei, freq: al_sizei);

    #[link_name = "alBufferf"]
    pub fn al_bufferf(buffer: al_uint, param: al_enum, value: al_float);

    #[link_name = "alBuffer3f"]
    pub fn al_buffer3f(buffer: al_uint, param: al_enum, value1: al_float, value2: al_float, value3: al_float);

    #[link_name = "alBufferfv"]
    pub fn al_bufferfv(buffer: al_uint, param: al_enum, values: *const al_float);

    #[link_name = "alBufferi"]
    pub fn al_bufferi(buffer: al_uint, param: al_enum, value: al_int);

    #[link_name = "alBuffer3i"]
    pub fn al_buffer3i(buffer: al_uint, param: al_enum, value1: al_int, value2: al_int, value3: al_int);

    #[link_name = "alBufferiv"]
    pub fn al_bufferiv(buffer: al_uint, param: al_enum, values: *const al_int);

    #[link_name = "alGetBufferf"]
    pub fn al_get_bufferf(buffer: al_uint, param: al_enum, value: *mut al_float);

    #[link_name = "alGetBuffer3f"]
    pub fn al_get_buffer3f(buffer: al_uint, param: al_enum, value1: *mut al_float, value2: *mut al_float, value3: *mut al_float);

    #[link_name = "alGetBufferfv"]
    pub fn al_get_bufferfv(buffer: al_uint, param: al_enum, values: *mut al_float);

    #[link_name = "alGetBufferi"]
    pub fn al_get_bufferi(buffer: al_uint, param: al_enum, value: *mut al_int);

    #[link_name = "alGetBuffer3i"]
    pub fn al_get_buffer3i(buffer: al_uint, param: al_enum, value1: *mut al_int, value2: *mut al_int, value3: *mut al_int);

    #[link_name = "alGetBufferiv"]
    pub fn al_get_bufferiv(buffer: al_uint, param: al_enum, values: *mut al_int);
}