ruby-openal 0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/TODO +160 -0
- data/ext/openal/MANIFEST +9 -0
- data/ext/openal/Makefile +149 -0
- data/ext/openal/extconf.rb +12 -0
- data/ext/openal/mkmf.log +66 -0
- data/ext/openal/openal.c +15 -0
- data/ext/openal/openal.h +50 -0
- data/ext/openal/openal.o +0 -0
- data/ext/openal/openal.so +0 -0
- data/ext/openal/openal_al.c +1406 -0
- data/ext/openal/openal_al.h +53 -0
- data/ext/openal/openal_al.o +0 -0
- data/ext/openal/openal_alc.c +416 -0
- data/ext/openal/openal_alc.h +44 -0
- data/ext/openal/openal_alc.o +0 -0
- data/ext/openal/openal_alut.c +181 -0
- data/ext/openal/openal_alut.h +49 -0
- data/ext/openal/openal_alut.o +0 -0
- data/ruby-openal.gemspec +30 -0
- data/setup.rb +1585 -0
- data/test/test_al.rb +67 -0
- data/test/test_al.rb~ +67 -0
- metadata +72 -0
data/ext/openal/openal.o
ADDED
Binary file
|
Binary file
|
@@ -0,0 +1,1406 @@
|
|
1
|
+
#include "ruby.h"
|
2
|
+
#include "openal.h"
|
3
|
+
#include "openal_al.h"
|
4
|
+
#include "AL/al.h"
|
5
|
+
#include "AL/alc.h"
|
6
|
+
#include "AL/alut.h"
|
7
|
+
|
8
|
+
/// module values
|
9
|
+
VALUE vAL;
|
10
|
+
|
11
|
+
/// class values
|
12
|
+
VALUE vAL_Listener;
|
13
|
+
VALUE vAL_SampleData;
|
14
|
+
VALUE vAL_Buffer;
|
15
|
+
VALUE vAL_Source;
|
16
|
+
|
17
|
+
/// AL: error constants
|
18
|
+
VALUE vAL_NO_ERROR = INT2FIX(AL_NO_ERROR);
|
19
|
+
VALUE vAL_INVALID_NAME = INT2FIX(AL_INVALID_NAME);
|
20
|
+
VALUE vAL_INVALID_ENUM = INT2FIX(AL_INVALID_ENUM);
|
21
|
+
VALUE vAL_INVALID_VALUE = INT2FIX(AL_INVALID_VALUE);
|
22
|
+
VALUE vAL_INVALID_OPERATION = INT2FIX(AL_INVALID_OPERATION);
|
23
|
+
VALUE vAL_OUT_OF_MEMORY = INT2FIX(AL_OUT_OF_MEMORY);
|
24
|
+
|
25
|
+
/// AL: state constants
|
26
|
+
VALUE vAL_DOPPLER_FACTOR = INT2FIX(AL_DOPPLER_FACTOR);
|
27
|
+
VALUE vAL_SPEED_OF_SOUND = INT2FIX(AL_SPEED_OF_SOUND);
|
28
|
+
VALUE vAL_DISTANCE_MODEL = INT2FIX(AL_DISTANCE_MODEL);
|
29
|
+
|
30
|
+
/// AL: spec constants
|
31
|
+
VALUE vAL_VENDOR = INT2FIX(AL_VENDOR);
|
32
|
+
VALUE vAL_VERSION = INT2FIX(AL_VERSION);
|
33
|
+
VALUE vAL_RENDERER = INT2FIX(AL_RENDERER);
|
34
|
+
VALUE vAL_EXTENSIONS = INT2FIX(AL_EXTENSIONS);
|
35
|
+
|
36
|
+
/// AL: distance model constants
|
37
|
+
VALUE vAL_INVERSE_DISTANCE = INT2FIX(AL_INVERSE_DISTANCE);
|
38
|
+
VALUE vAL_INVERSE_DISTANCE_CLAMPED = INT2FIX(AL_INVERSE_DISTANCE_CLAMPED);
|
39
|
+
VALUE vAL_LINEAR_DISTANCE = INT2FIX(AL_LINEAR_DISTANCE);
|
40
|
+
VALUE vAL_LINEAR_DISTANCE_CLAMPED = INT2FIX(AL_LINEAR_DISTANCE_CLAMPED);
|
41
|
+
VALUE vAL_EXPONENT_DISTANCE = INT2FIX(AL_EXPONENT_DISTANCE);
|
42
|
+
VALUE vAL_EXPONENT_DISTANCE_CLAMPED = INT2FIX(AL_EXPONENT_DISTANCE_CLAMPED);
|
43
|
+
VALUE vAL_NONE = INT2FIX(AL_NONE);
|
44
|
+
|
45
|
+
/// AL: format constants
|
46
|
+
VALUE vAL_FORMAT_MONO8 = INT2FIX(AL_FORMAT_MONO8);
|
47
|
+
VALUE vAL_FORMAT_MONO16 = INT2FIX(AL_FORMAT_MONO16);
|
48
|
+
VALUE vAL_FORMAT_STEREO8 = INT2FIX(AL_FORMAT_STEREO8);
|
49
|
+
VALUE vAL_FORMAT_STEREO16 = INT2FIX(AL_FORMAT_STEREO16);
|
50
|
+
|
51
|
+
/// AL: source type constants
|
52
|
+
VALUE vAL_UNDETERMINED = INT2FIX(AL_UNDETERMINED);
|
53
|
+
VALUE vAL_STATIC = INT2FIX(AL_STATIC);
|
54
|
+
VALUE vAL_STREAMING = INT2FIX(AL_STREAMING);
|
55
|
+
|
56
|
+
|
57
|
+
|
58
|
+
/// AL::get_error
|
59
|
+
static VALUE AL_get_error(VALUE self) {
|
60
|
+
return INT2FIX(alGetError());
|
61
|
+
}
|
62
|
+
|
63
|
+
/// AL::extension_present?(extname)
|
64
|
+
static VALUE AL_extension_present_p(VALUE self, VALUE extension_name) {
|
65
|
+
ALboolean rslt;
|
66
|
+
const char* str;
|
67
|
+
Check_Type(extension_name, T_STRING);
|
68
|
+
str = RSTRING_PTR(extension_name);
|
69
|
+
rslt = alIsExtensionPresent(str);
|
70
|
+
return albool2rbbool(rslt);
|
71
|
+
}
|
72
|
+
|
73
|
+
/// AL::enum_value_of(enum_name)
|
74
|
+
static VALUE AL_enum_value_of(VALUE self, VALUE enum_name) {
|
75
|
+
const char* str;
|
76
|
+
Check_Type(enum_name, T_STRING);
|
77
|
+
str = RSTRING_PTR(enum_name);
|
78
|
+
return INT2FIX(alGetEnumValue(str));
|
79
|
+
}
|
80
|
+
|
81
|
+
/// AL::enable(capacity)
|
82
|
+
static VALUE AL_enable(VALUE self, VALUE capacity) {
|
83
|
+
ALenum c = NUM2INT(capacity);
|
84
|
+
alEnable(c);
|
85
|
+
return Qnil;
|
86
|
+
}
|
87
|
+
|
88
|
+
/// AL::disable(capacity)
|
89
|
+
static VALUE AL_disable(VALUE self, VALUE capacity) {
|
90
|
+
ALenum c = NUM2INT(capacity);
|
91
|
+
alDisable(c);
|
92
|
+
return Qnil;
|
93
|
+
}
|
94
|
+
|
95
|
+
/// AL::enable?
|
96
|
+
static VALUE AL_enable_p(VALUE self, VALUE capacity) {
|
97
|
+
ALenum c = NUM2INT(capacity);
|
98
|
+
ALboolean rslt = alIsEnabled(c);
|
99
|
+
return albool2rbbool(rslt);
|
100
|
+
}
|
101
|
+
|
102
|
+
/// AL::boolean
|
103
|
+
static VALUE AL_get_boolean(VALUE self, VALUE capacity) {
|
104
|
+
ALenum c = NUM2INT(capacity);
|
105
|
+
ALboolean rslt = alGetBoolean(c);
|
106
|
+
return albool2rbbool(rslt);
|
107
|
+
}
|
108
|
+
|
109
|
+
/// AL::float
|
110
|
+
static VALUE AL_get_float(VALUE self, VALUE capacity) {
|
111
|
+
ALenum c = NUM2INT(capacity);
|
112
|
+
ALfloat f = alGetFloat(c);
|
113
|
+
return rb_float_new((double)f);
|
114
|
+
}
|
115
|
+
|
116
|
+
/// AL::double
|
117
|
+
static VALUE AL_get_double(VALUE self, VALUE capacity) {
|
118
|
+
ALenum c = NUM2INT(capacity);
|
119
|
+
ALdouble d = alGetDouble(c);
|
120
|
+
return rb_float_new(d);
|
121
|
+
}
|
122
|
+
|
123
|
+
/// AL::integer
|
124
|
+
static VALUE AL_get_integer(VALUE self, VALUE capacity) {
|
125
|
+
ALenum c = NUM2INT(capacity);
|
126
|
+
ALint i = alGetInteger(c);
|
127
|
+
return INT2FIX(i);
|
128
|
+
}
|
129
|
+
|
130
|
+
/// AL::booleans
|
131
|
+
/*
|
132
|
+
static VALUE AL_get_booleans(VALUE self, VALUE capacity) {
|
133
|
+
}
|
134
|
+
*/
|
135
|
+
|
136
|
+
/// AL::doubles
|
137
|
+
/*
|
138
|
+
static VALUE AL_get_doubles(VALUE self, VALUE capacity) {
|
139
|
+
}
|
140
|
+
*/
|
141
|
+
|
142
|
+
/// AL::floats
|
143
|
+
/*
|
144
|
+
static VALUE AL_get_floats(VALUE self, VALUE capacity) {
|
145
|
+
}
|
146
|
+
*/
|
147
|
+
|
148
|
+
/// AL::integers
|
149
|
+
/*
|
150
|
+
static VALUE AL_get_integers(VALUE self, VALUE capacity) {
|
151
|
+
}
|
152
|
+
*/
|
153
|
+
|
154
|
+
/// AL::string
|
155
|
+
static VALUE AL_get_string(VALUE self, VALUE capacity) {
|
156
|
+
ALenum c = NUM2INT(capacity);
|
157
|
+
const char* s = alGetString(c);
|
158
|
+
if (NULL == s) return Qnil;
|
159
|
+
else return rb_str_new2(s);
|
160
|
+
}
|
161
|
+
|
162
|
+
/// AL::distance_model=(val)
|
163
|
+
static VALUE AL_set_distance_model(VALUE self, VALUE v) {
|
164
|
+
ALenum e = NUM2INT(v);
|
165
|
+
alDistanceModel(e);
|
166
|
+
return Qnil;
|
167
|
+
}
|
168
|
+
|
169
|
+
/// AL::doppler_factor=(val)
|
170
|
+
static VALUE AL_set_doppler_factor(VALUE self, VALUE v) {
|
171
|
+
ALfloat f = (ALfloat) NUM2DBL(v);
|
172
|
+
alDopplerFactor(f);
|
173
|
+
return Qnil;
|
174
|
+
}
|
175
|
+
|
176
|
+
/// AL::doppler_velocity=(val)
|
177
|
+
static VALUE AL_set_doppler_velocity(VALUE self, VALUE v) {
|
178
|
+
ALfloat f = (ALfloat) NUM2DBL(v);
|
179
|
+
alDopplerVelocity(f);
|
180
|
+
return Qnil;
|
181
|
+
}
|
182
|
+
|
183
|
+
/// AL::speed_of_sound=(val)
|
184
|
+
static VALUE AL_set_speed_of_sound(VALUE self, VALUE v) {
|
185
|
+
ALfloat f = (ALfloat) NUM2DBL(v);
|
186
|
+
alSpeedOfSound(f);
|
187
|
+
return Qnil;
|
188
|
+
}
|
189
|
+
|
190
|
+
static void define_AL_error_consts() {
|
191
|
+
rb_define_const(vAL, "NO_ERROR", vAL_NO_ERROR);
|
192
|
+
rb_define_const(vAL, "INVALID_NAME", vAL_INVALID_NAME);
|
193
|
+
rb_define_const(vAL, "INVALID_ENUM", vAL_INVALID_ENUM);
|
194
|
+
rb_define_const(vAL, "INVALID_VALUE", vAL_INVALID_VALUE);
|
195
|
+
rb_define_const(vAL, "INVALID_OPERATION", vAL_INVALID_OPERATION);
|
196
|
+
rb_define_const(vAL, "OUT_OF_MEMORY", vAL_OUT_OF_MEMORY);
|
197
|
+
}
|
198
|
+
|
199
|
+
static void define_AL_state_consts() {
|
200
|
+
rb_define_const(vAL, "DOPPLER_FACTOR", vAL_DOPPLER_FACTOR);
|
201
|
+
rb_define_const(vAL, "SPEED_OF_SOUND", vAL_SPEED_OF_SOUND);
|
202
|
+
rb_define_const(vAL, "DISTANCE_MODEL", vAL_DISTANCE_MODEL);
|
203
|
+
}
|
204
|
+
|
205
|
+
static void define_AL_spec_consts() {
|
206
|
+
rb_define_const(vAL, "VENDOR", vAL_VENDOR);
|
207
|
+
rb_define_const(vAL, "VERSION", vAL_VERSION);
|
208
|
+
rb_define_const(vAL, "RENDERER", vAL_RENDERER);
|
209
|
+
rb_define_const(vAL, "EXTENSIONS", vAL_EXTENSIONS);
|
210
|
+
}
|
211
|
+
|
212
|
+
static void define_AL_distance_model_consts() {
|
213
|
+
rb_define_const(vAL, "INVERSE_DISTANCE", vAL_INVERSE_DISTANCE);
|
214
|
+
rb_define_const(vAL, "INVERSE_DISTANCE_CLAMPED", vAL_INVERSE_DISTANCE_CLAMPED);
|
215
|
+
rb_define_const(vAL, "LINEAR_DISTANCE", vAL_LINEAR_DISTANCE);
|
216
|
+
rb_define_const(vAL, "LINEAR_DISTANCE_CLAMPED", vAL_LINEAR_DISTANCE_CLAMPED);
|
217
|
+
rb_define_const(vAL, "EXPONENT_DISTANCE", vAL_EXPONENT_DISTANCE);
|
218
|
+
rb_define_const(vAL, "EXPONENT_DISTANCE_CLAMPED", vAL_EXPONENT_DISTANCE_CLAMPED);
|
219
|
+
rb_define_const(vAL, "NONE", vAL_NONE);
|
220
|
+
}
|
221
|
+
|
222
|
+
static void define_AL_format_consts() {
|
223
|
+
rb_define_const(vAL, "FORMAT_MONO8", vAL_FORMAT_MONO8);
|
224
|
+
rb_define_const(vAL, "FORMAT_MONO16", vAL_FORMAT_MONO16);
|
225
|
+
rb_define_const(vAL, "FORMAT_STEREO8", vAL_FORMAT_STEREO8);
|
226
|
+
rb_define_const(vAL, "FORMAT_STEREO16", vAL_FORMAT_STEREO16);
|
227
|
+
}
|
228
|
+
|
229
|
+
static void define_AL_source_type_consts() {
|
230
|
+
rb_define_const(vAL, "UNDETERMINED", vAL_UNDETERMINED);
|
231
|
+
rb_define_const(vAL, "STATIC", vAL_STATIC);
|
232
|
+
rb_define_const(vAL, "STREAMING", vAL_STREAMING);
|
233
|
+
}
|
234
|
+
|
235
|
+
static void define_AL_error_funcs() {
|
236
|
+
// error handling.
|
237
|
+
/// AL::get_error
|
238
|
+
rb_define_module_function(vAL, "get_error", &AL_get_error, 0);
|
239
|
+
}
|
240
|
+
|
241
|
+
static void define_AL_exts_funcs() {
|
242
|
+
// extension.
|
243
|
+
/// AL::extension_present?(extname)
|
244
|
+
rb_define_module_function(vAL, "extension_present?", &AL_extension_present_p, 1);
|
245
|
+
/// AL::enum_value_of(enum_name)
|
246
|
+
rb_define_module_function(vAL, "enum_value_of", &AL_enum_value_of, 1);
|
247
|
+
}
|
248
|
+
|
249
|
+
static void define_AL_state_funcs() {
|
250
|
+
// states
|
251
|
+
/// AL::enable(capacity)
|
252
|
+
rb_define_module_function(vAL, "enable", &AL_enable, 1);
|
253
|
+
/// AL::disable(capacity)
|
254
|
+
rb_define_module_function(vAL, "disable", &AL_disable, 1);
|
255
|
+
/// AL::enable?(capacity)
|
256
|
+
rb_define_module_function(vAL, "enable?", &AL_enable_p, 1);
|
257
|
+
/// AL::boolean(param)
|
258
|
+
rb_define_module_function(vAL, "boolean", &AL_get_boolean, 1);
|
259
|
+
/// AL::double(param)
|
260
|
+
rb_define_module_function(vAL, "double", &AL_get_double, 1);
|
261
|
+
/// AL::float(param)
|
262
|
+
rb_define_module_function(vAL, "float", &AL_get_float, 1);
|
263
|
+
/// AL::integer(param)
|
264
|
+
rb_define_module_function(vAL, "integer", &AL_get_integer, 1);
|
265
|
+
/// FIXME: AL::booleans(param)
|
266
|
+
//rb_define_module_function(vAL, "booleans", &AL_get_booleans, 1);
|
267
|
+
/// FIXME: AL::doubles(param)
|
268
|
+
//rb_define_module_function(vAL, "doubles", &AL_get_doubles, 1);
|
269
|
+
/// FIXME: AL::floats(param)
|
270
|
+
//rb_define_module_function(vAL, "floats", &AL_get_floats, 1);
|
271
|
+
/// FIXME: AL::integers(param)
|
272
|
+
//rb_define_module_function(vAL, "integers", &AL_get_integers, 1);
|
273
|
+
/// AL::string(param)
|
274
|
+
rb_define_module_function(vAL, "string", &AL_get_string, 1);
|
275
|
+
|
276
|
+
/// TODO: getters!
|
277
|
+
/// AL::distance_model=(val)
|
278
|
+
rb_define_module_function(vAL, "distance_model=", &AL_set_distance_model, 1);
|
279
|
+
/// AL::doppler_factor=(val)
|
280
|
+
rb_define_module_function(vAL, "doppler_factor=", &AL_set_doppler_factor, 1);
|
281
|
+
/// AL::doppler_velocity=(val)
|
282
|
+
rb_define_module_function(vAL, "doppler_velocity=", &AL_set_doppler_velocity, 1);
|
283
|
+
/// AL::speed_of_sound=(val)
|
284
|
+
rb_define_module_function(vAL, "speed_of_sound=", &AL_set_speed_of_sound, 1);
|
285
|
+
}
|
286
|
+
|
287
|
+
/// + AL::Listener.orientation rw:([fx, fy, fz, ux, uy, uz])
|
288
|
+
static VALUE AL_Listener_get_orientation(VALUE self) {
|
289
|
+
ALfloat v[] = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f};
|
290
|
+
VALUE ary;
|
291
|
+
ary = rb_ary_new();
|
292
|
+
alGetListenerfv(AL_ORIENTATION, v);
|
293
|
+
ARRAY2RARRAY(v, ary, 6, rb_float_new);
|
294
|
+
return ary;
|
295
|
+
}
|
296
|
+
|
297
|
+
static VALUE AL_Listener_set_orientation(VALUE self, VALUE a) {
|
298
|
+
ALfloat vec[6];
|
299
|
+
RARRAY2ARRAY(a, vec, 6, NUM2DBL);
|
300
|
+
alListenerfv(AL_ORIENTATION, vec);
|
301
|
+
return Qnil;
|
302
|
+
}
|
303
|
+
|
304
|
+
/// + AL::Listener.gain rw:(v)
|
305
|
+
static VALUE AL_Listener_get_gain(VALUE self) {
|
306
|
+
ALfloat n = 0.0f;
|
307
|
+
alGetListenerf(AL_GAIN, &n);
|
308
|
+
return rb_float_new(n);
|
309
|
+
}
|
310
|
+
|
311
|
+
static VALUE AL_Listener_set_gain(VALUE self, VALUE gain) {
|
312
|
+
ALfloat n = (float) NUM2DBL(gain);
|
313
|
+
alListenerf(AL_GAIN, n);
|
314
|
+
return Qnil;
|
315
|
+
}
|
316
|
+
|
317
|
+
/// + AL::Listener.position rw:([x, y, z])
|
318
|
+
static VALUE AL_Listener_get_position(VALUE self) {
|
319
|
+
ALfloat v[] = {0.0f, 0.0f, 0.0f};
|
320
|
+
VALUE ary;
|
321
|
+
ary = rb_ary_new();
|
322
|
+
alGetListenerfv(AL_POSITION, v);
|
323
|
+
ARRAY2RARRAY(v, ary, 3, rb_float_new);
|
324
|
+
return ary;
|
325
|
+
}
|
326
|
+
|
327
|
+
static VALUE AL_Listener_set_position(VALUE self, VALUE a) {
|
328
|
+
ALfloat vec[3];
|
329
|
+
RARRAY2ARRAY(a, vec, 3, NUM2DBL);
|
330
|
+
alListenerfv(AL_POSITION, vec);
|
331
|
+
return Qnil;
|
332
|
+
}
|
333
|
+
|
334
|
+
/// + AL::Listener.velocity rw:([x, y, z])
|
335
|
+
static VALUE AL_Listener_get_velocity(VALUE self) {
|
336
|
+
ALfloat v[] = {0.0f, 0.0f, 0.0f};
|
337
|
+
VALUE ary;
|
338
|
+
ary = rb_ary_new();
|
339
|
+
alGetListenerfv(AL_VELOCITY, v);
|
340
|
+
ARRAY2RARRAY(v, ary, 3, rb_float_new);
|
341
|
+
return ary;
|
342
|
+
}
|
343
|
+
|
344
|
+
static VALUE AL_Listener_set_velocity(VALUE self, VALUE a) {
|
345
|
+
ALfloat vec[3];
|
346
|
+
RARRAY2ARRAY(a, vec, 3, NUM2DBL);
|
347
|
+
alListenerfv(AL_VELOCITY, vec);
|
348
|
+
return Qnil;
|
349
|
+
}
|
350
|
+
|
351
|
+
static VALUE AL_Listener_to_s(VALUE self) {
|
352
|
+
ALfloat gain;
|
353
|
+
ALfloat position[3];
|
354
|
+
ALfloat velocity[3];
|
355
|
+
ALfloat orientation[6];
|
356
|
+
const long slen = 4096;
|
357
|
+
char s[slen];
|
358
|
+
|
359
|
+
alGetListenerf(AL_GAIN, &gain);
|
360
|
+
alGetListenerfv(AL_POSITION, position);
|
361
|
+
alGetListenerfv(AL_VELOCITY, velocity);
|
362
|
+
alGetListenerfv(AL_ORIENTATION, orientation);
|
363
|
+
|
364
|
+
snprintf(s, slen, "#<AL::Listner{:gain=>%f, :position=>[%f, %f, %f], :orientation=>[%f, %f, %f, %f, %f, %f], :velocity=>[%f, %f, %f]}>",
|
365
|
+
gain, position[0], position[1], position[2],
|
366
|
+
orientation[0], orientation[1], orientation[2], orientation[3], orientation[4], orientation[5],
|
367
|
+
velocity[0], velocity[1], velocity[2]);
|
368
|
+
|
369
|
+
return rb_str_new2(s);
|
370
|
+
}
|
371
|
+
|
372
|
+
|
373
|
+
static void define_AL_Listener_methods() {
|
374
|
+
/// + AL::Listener.orientation rw:([fx, fy, fz, ux, uy, uz])
|
375
|
+
rb_define_singleton_method(vAL_Listener, "orientation", AL_Listener_get_orientation, 0);
|
376
|
+
rb_define_singleton_method(vAL_Listener, "orientation=", AL_Listener_set_orientation, 1);
|
377
|
+
|
378
|
+
/// + AL::Listener.gain rw:(v)
|
379
|
+
rb_define_singleton_method(vAL_Listener, "gain", AL_Listener_get_gain, 0);
|
380
|
+
rb_define_singleton_method(vAL_Listener, "gain=", AL_Listener_set_gain, 1);
|
381
|
+
|
382
|
+
/// + AL::Listener.position rw:([x, y, z])
|
383
|
+
rb_define_singleton_method(vAL_Listener, "position", AL_Listener_get_position, 0);
|
384
|
+
rb_define_singleton_method(vAL_Listener, "position=", AL_Listener_set_position, 1);
|
385
|
+
|
386
|
+
/// + AL::Listener.velocity rw:([x, y, z])
|
387
|
+
rb_define_singleton_method(vAL_Listener, "velocity", AL_Listener_get_velocity, 0);
|
388
|
+
rb_define_singleton_method(vAL_Listener, "velocity=", AL_Listener_set_velocity, 1);
|
389
|
+
|
390
|
+
/// + AL::Listener.to_s r:String
|
391
|
+
rb_define_singleton_method(vAL_Listener, "to_s", AL_Listener_to_s, 0);
|
392
|
+
}
|
393
|
+
|
394
|
+
static void setup_class_AL_Listener() {
|
395
|
+
vAL_Listener = rb_define_class_under(vAL, "Listener", rb_cObject);
|
396
|
+
define_AL_Listener_methods();
|
397
|
+
}
|
398
|
+
|
399
|
+
|
400
|
+
al_sample_data_t* AL_SampleData_new() {
|
401
|
+
al_sample_data_t* p = NULL;
|
402
|
+
p = (al_sample_data_t*)malloc(sizeof(al_sample_data_t));
|
403
|
+
memset((void*)p, 0, sizeof(al_sample_data_t));
|
404
|
+
return p;
|
405
|
+
}
|
406
|
+
|
407
|
+
void AL_SampleData_free(al_sample_data_t* p) {
|
408
|
+
if ( p != NULL ) {
|
409
|
+
if ( p->buf != NULL) {
|
410
|
+
free((void*)p->buf);
|
411
|
+
}
|
412
|
+
free((void*)p);
|
413
|
+
}
|
414
|
+
}
|
415
|
+
|
416
|
+
/// - AL::SampleData#to_s
|
417
|
+
static VALUE AL_SampleData_to_s(VALUE self) {
|
418
|
+
al_sample_data_t* p = NULL;
|
419
|
+
const long slen = 4096;
|
420
|
+
char s[slen];
|
421
|
+
Data_Get_Struct(self, al_sample_data_t, p);
|
422
|
+
snprintf(s, slen, "#<AL::SampleData {buf@%p, :bufsize=>%d, :freq=>%d, :fmt=>%d}@%p>",
|
423
|
+
(p->buf), (p->bufsize), (p->freq), (p->fmt), p);
|
424
|
+
return rb_str_new2(s);
|
425
|
+
}
|
426
|
+
|
427
|
+
/// - AL::SampleData#buffer_size
|
428
|
+
static VALUE AL_SampleData_get_buffer_size(VALUE self) {
|
429
|
+
al_sample_data_t* p = NULL;
|
430
|
+
Data_Get_Struct(self, al_sample_data_t, p);
|
431
|
+
return LONG2FIX(p->bufsize);
|
432
|
+
}
|
433
|
+
|
434
|
+
/// - AL::SampleData#format
|
435
|
+
static VALUE AL_SampleData_get_format(VALUE self) {
|
436
|
+
al_sample_data_t* p = NULL;
|
437
|
+
Data_Get_Struct(self, al_sample_data_t, p);
|
438
|
+
return INT2FIX(p->fmt);
|
439
|
+
}
|
440
|
+
|
441
|
+
/// - AL::SampleData#frequency
|
442
|
+
static VALUE AL_SampleData_get_frequency(VALUE self) {
|
443
|
+
al_sample_data_t* p = NULL;
|
444
|
+
Data_Get_Struct(self, al_sample_data_t, p);
|
445
|
+
return LONG2FIX(p->freq);
|
446
|
+
}
|
447
|
+
|
448
|
+
/// + helloWorld (alutLoadMemoryHelloWorld)
|
449
|
+
/*
|
450
|
+
static VALUE AL_SampleData_helloWorld(VALUE klass) {
|
451
|
+
VALUE self;
|
452
|
+
al_sample_data_t* p = AL_SampleData_new();
|
453
|
+
p->buf = alutLoadMemoryHelloWorld(&(p->fmt), &(p->bufsize), &(p->freq));
|
454
|
+
if ( NULL == (p->buf) ) {
|
455
|
+
AL_SampleData_free(p);
|
456
|
+
return Qnil;
|
457
|
+
} else {
|
458
|
+
self = Data_Wrap_Struct(vAL_SampleData, 0, AL_SampleData_free, p);
|
459
|
+
return self;
|
460
|
+
}
|
461
|
+
}
|
462
|
+
*/
|
463
|
+
|
464
|
+
/// + load_from_file(filename) (alutLoadMemoryFromFile)
|
465
|
+
static VALUE AL_SampleData_load_from_file(VALUE klass, VALUE vFilename) {
|
466
|
+
VALUE self;
|
467
|
+
char* filename;
|
468
|
+
al_sample_data_t* p;
|
469
|
+
Check_Type(vFilename, T_STRING);
|
470
|
+
filename = RSTRING_PTR(vFilename);
|
471
|
+
p = AL_SampleData_new();
|
472
|
+
p->buf = alutLoadMemoryFromFile(filename, &(p->fmt), &(p->bufsize), (ALfloat*)&(p->freq));
|
473
|
+
if ( NULL == (p->buf) ) {
|
474
|
+
AL_SampleData_free(p);
|
475
|
+
return Qnil;
|
476
|
+
} else {
|
477
|
+
self = Data_Wrap_Struct(vAL_SampleData, 0, AL_SampleData_free, p);
|
478
|
+
return self;
|
479
|
+
}
|
480
|
+
}
|
481
|
+
|
482
|
+
/// + load_from_string(io) (alutLoadMemoryFromFileImage)
|
483
|
+
static VALUE AL_SampleData_load_from_string(VALUE klass, VALUE s) {
|
484
|
+
VALUE self;
|
485
|
+
al_sample_data_t* p;
|
486
|
+
Check_Type(s, T_STRING);
|
487
|
+
p = AL_SampleData_new();
|
488
|
+
p->buf = alutLoadMemoryFromFileImage(
|
489
|
+
RSTRING_PTR(s), RSTRING_LEN(s),
|
490
|
+
&(p->fmt), &(p->bufsize), (ALfloat*)&(p->freq));
|
491
|
+
if ( NULL == (p->buf) ) {
|
492
|
+
AL_SampleData_free(p);
|
493
|
+
return Qnil;
|
494
|
+
} else {
|
495
|
+
self = Data_Wrap_Struct(vAL_SampleData, 0, AL_SampleData_free, p);
|
496
|
+
return self;
|
497
|
+
}
|
498
|
+
}
|
499
|
+
|
500
|
+
static void define_AL_SampleData_methods() {
|
501
|
+
/// C-Level SampleData.new
|
502
|
+
/// - AL::SampleData#buffer_size
|
503
|
+
rb_define_method(vAL_SampleData, "buffer_size", &AL_SampleData_get_buffer_size, 0);
|
504
|
+
/// - AL::SampleData#format
|
505
|
+
rb_define_method(vAL_SampleData, "format", &AL_SampleData_get_format, 0);
|
506
|
+
/// - AL::SampleData#frequency
|
507
|
+
rb_define_method(vAL_SampleData, "frequency", &AL_SampleData_get_frequency, 0);
|
508
|
+
/// - AL::SampleData#to_s
|
509
|
+
rb_define_method(vAL_SampleData, "to_s", &AL_SampleData_to_s, 0);
|
510
|
+
/// + load_from_file(filename) (alutLoadMemoryFromFile)
|
511
|
+
rb_define_singleton_method(vAL_SampleData, "load_from_file", &AL_SampleData_load_from_file, 1);
|
512
|
+
/// + load_from_string(io) (alutLoadMemoryFromFileImage)
|
513
|
+
rb_define_singleton_method(vAL_SampleData, "load_from_string", &AL_SampleData_load_from_string, 1);
|
514
|
+
}
|
515
|
+
|
516
|
+
static void setup_class_AL_SampleData() {
|
517
|
+
vAL_SampleData = rb_define_class_under(vAL, "SampleData", rb_cObject);
|
518
|
+
define_AL_SampleData_methods();
|
519
|
+
}
|
520
|
+
|
521
|
+
/// - AL::Buffer#free
|
522
|
+
void AL_Buffer_free(ALuint* p) {
|
523
|
+
if ( NULL != p ) {
|
524
|
+
if ( alIsBuffer(*p) ) {
|
525
|
+
alDeleteBuffers(1, p);
|
526
|
+
}
|
527
|
+
free((void*)p);
|
528
|
+
}
|
529
|
+
}
|
530
|
+
|
531
|
+
VALUE AL_Buffer_from_albuf(const ALuint b) {
|
532
|
+
ALsizei* p = NULL;
|
533
|
+
p = malloc(sizeof(ALsizei));
|
534
|
+
*p = b;
|
535
|
+
return Data_Wrap_Struct(vAL_Buffer, 0, AL_Buffer_free, p);
|
536
|
+
}
|
537
|
+
|
538
|
+
/// + AL::Buffer#new
|
539
|
+
static VALUE AL_Buffer_new(VALUE klass) {
|
540
|
+
ALuint b;
|
541
|
+
alGenBuffers(1, (ALuint*)&b);
|
542
|
+
return AL_Buffer_from_albuf(b);
|
543
|
+
}
|
544
|
+
|
545
|
+
/// - AL::Buffer#initialize
|
546
|
+
static VALUE AL_Buffer_initialize(VALUE self) {
|
547
|
+
return self;
|
548
|
+
}
|
549
|
+
|
550
|
+
/// - r: AL::Buffer#frequency : ALint
|
551
|
+
static VALUE AL_Buffer_get_frequency(VALUE self) {
|
552
|
+
ALuint* p;
|
553
|
+
ALint v;
|
554
|
+
Data_Get_Struct(self, ALuint, p);
|
555
|
+
alGetBufferi(*p, AL_FREQUENCY, &v);
|
556
|
+
return INT2FIX(v);
|
557
|
+
}
|
558
|
+
|
559
|
+
/// - r: AL::Buffer#size : ALint
|
560
|
+
static VALUE AL_Buffer_get_size(VALUE self) {
|
561
|
+
ALuint* p;
|
562
|
+
ALint v;
|
563
|
+
Data_Get_Struct(self, ALuint, p);
|
564
|
+
alGetBufferi(*p, AL_SIZE, &v);
|
565
|
+
return INT2FIX(v);
|
566
|
+
}
|
567
|
+
|
568
|
+
/// - r: AL::Buffer#bits : ALint
|
569
|
+
static VALUE AL_Buffer_get_bits(VALUE self) {
|
570
|
+
ALuint* p;
|
571
|
+
ALint v;
|
572
|
+
Data_Get_Struct(self, ALuint, p);
|
573
|
+
alGetBufferi(*p, AL_BITS, &v);
|
574
|
+
return INT2FIX(v);
|
575
|
+
}
|
576
|
+
|
577
|
+
/// - r: AL::Buffer#channels : ALint
|
578
|
+
static VALUE AL_Buffer_get_channels(VALUE self) {
|
579
|
+
ALuint* p;
|
580
|
+
ALint v;
|
581
|
+
Data_Get_Struct(self, ALuint, p);
|
582
|
+
alGetBufferi(*p, AL_CHANNELS, &v);
|
583
|
+
return INT2FIX(v);
|
584
|
+
}
|
585
|
+
|
586
|
+
/// + AL::Buffer#load_hello_world # alutCreateBufferHelloWorld
|
587
|
+
static VALUE AL_Buffer_load_hello_world(VALUE klass) {
|
588
|
+
ALuint b = alutCreateBufferHelloWorld();
|
589
|
+
return AL_Buffer_from_albuf(b);
|
590
|
+
}
|
591
|
+
|
592
|
+
/// - AL::Buffer#attach(sample_data)
|
593
|
+
static VALUE AL_Buffer_attach(VALUE self, VALUE vSampleData) {
|
594
|
+
ALuint* pBuf;
|
595
|
+
al_sample_data_t* pSampleData;
|
596
|
+
if ( CLASS_OF(vSampleData) != vAL_SampleData )
|
597
|
+
return Qfalse;
|
598
|
+
Data_Get_Struct(self, ALuint, pBuf);
|
599
|
+
Data_Get_Struct(vSampleData, al_sample_data_t, pSampleData);
|
600
|
+
///FIXME: it doesn't works.
|
601
|
+
/*
|
602
|
+
alBufferData(*pBuf,
|
603
|
+
pSampleData->fmt, pSampleData->buf,
|
604
|
+
pSampleData->bufsize, pSampleData->freq);
|
605
|
+
*/
|
606
|
+
return Qtrue;
|
607
|
+
}
|
608
|
+
|
609
|
+
/// + AL::Buffer#load_waveform(enWave : ALenum, freq : ALfloat, phase : ALfloat, duration : ALfloat)
|
610
|
+
static VALUE AL_Buffer_load_waveform(VALUE self,
|
611
|
+
VALUE vEnWave, VALUE vFltFreq, VALUE vFltPhase, VALUE vFltDuration) {
|
612
|
+
ALenum wave = NUM2INT(vEnWave);
|
613
|
+
ALfloat freq = (float) NUM2DBL(vFltFreq);
|
614
|
+
ALfloat phase = (float) NUM2DBL(vFltPhase);
|
615
|
+
ALfloat duration = (float) NUM2DBL(vFltDuration);
|
616
|
+
ALuint b = alutCreateBufferWaveform(wave, freq, phase, duration);
|
617
|
+
if ( AL_NONE == b ) return Qnil;
|
618
|
+
return AL_Buffer_from_albuf(b);
|
619
|
+
}
|
620
|
+
|
621
|
+
/// + AL::Buffer#load_from_sample_data(sample_data)
|
622
|
+
static VALUE AL_Buffer_load_from_sample_data(VALUE klass, VALUE vSampleData) {
|
623
|
+
VALUE self;
|
624
|
+
self = AL_Buffer_new(klass);
|
625
|
+
AL_Buffer_attach(self, vSampleData);
|
626
|
+
return self;
|
627
|
+
}
|
628
|
+
|
629
|
+
/// + AL::Buffer#load_from_file(filename) # alutCreateBufferFromFile
|
630
|
+
static VALUE AL_Buffer_load_from_file(VALUE klass, VALUE vFilename) {
|
631
|
+
char* filename;
|
632
|
+
ALuint b;
|
633
|
+
Check_Type(vFilename, T_STRING);
|
634
|
+
filename = RSTRING_PTR(vFilename);
|
635
|
+
b = alutCreateBufferFromFile(filename);
|
636
|
+
if ( AL_NONE == b ) return Qnil;
|
637
|
+
else return AL_Buffer_from_albuf(b);
|
638
|
+
}
|
639
|
+
|
640
|
+
/// + AL::Buffer#load_from_string(s) # alutCreateBufferFromFileImage
|
641
|
+
static VALUE AL_Buffer_load_from_string(VALUE klass, VALUE vStr) {
|
642
|
+
char* s;
|
643
|
+
long slen;
|
644
|
+
ALuint b;
|
645
|
+
Check_Type(vStr, T_STRING);
|
646
|
+
s = RSTRING_PTR(vStr);
|
647
|
+
slen = RSTRING_LEN(vStr);
|
648
|
+
b = alutCreateBufferFromFileImage(s, slen);
|
649
|
+
if ( AL_NONE == b ) return Qnil;
|
650
|
+
else return AL_Buffer_from_albuf(b);
|
651
|
+
}
|
652
|
+
|
653
|
+
/// - AL::Buffer#to_s
|
654
|
+
static VALUE AL_Buffer_to_s(VALUE self) {
|
655
|
+
ALuint* p = NULL;
|
656
|
+
const long slen = 4096;
|
657
|
+
char s[slen];
|
658
|
+
ALint freq, size, bits, channels;
|
659
|
+
Data_Get_Struct(self, ALuint, p);
|
660
|
+
alGetBufferi(*p, AL_FREQUENCY, &freq);
|
661
|
+
alGetBufferi(*p, AL_SIZE, &size);
|
662
|
+
alGetBufferi(*p, AL_BITS, &bits);
|
663
|
+
alGetBufferi(*p, AL_CHANNELS, &channels);
|
664
|
+
snprintf(s, slen, "#<AL::Buffer {:freq=>%d, :size=>%d, :bits=>%d, :channels=>%d}@%p>",
|
665
|
+
freq, size, bits, channels, p);
|
666
|
+
return rb_str_new2(s);
|
667
|
+
}
|
668
|
+
|
669
|
+
|
670
|
+
static void define_AL_Buffer_methods() {
|
671
|
+
/// + AL::Buffer#new
|
672
|
+
rb_define_singleton_method(vAL_Buffer, "new", &AL_Buffer_new, 0);
|
673
|
+
|
674
|
+
/// - AL::Buffer#initialize
|
675
|
+
rb_define_method(vAL_Buffer, "initialize", &AL_Buffer_initialize, 0);
|
676
|
+
|
677
|
+
/// + AL::Buffer#load_hello_world # alutCreateBufferHelloWorld
|
678
|
+
rb_define_singleton_method(vAL_Buffer, "load_hello_world", &AL_Buffer_load_hello_world, 0);
|
679
|
+
|
680
|
+
/// - r: AL::Buffer#frequency : ALint
|
681
|
+
rb_define_method(vAL_Buffer, "frequency", &AL_Buffer_get_frequency, 0);
|
682
|
+
|
683
|
+
/// - r: AL::Buffer#size : ALint
|
684
|
+
rb_define_method(vAL_Buffer, "size", &AL_Buffer_get_size, 0);
|
685
|
+
|
686
|
+
/// - r: AL::Buffer#bits : ALint
|
687
|
+
rb_define_method(vAL_Buffer, "bits", &AL_Buffer_get_bits, 0);
|
688
|
+
|
689
|
+
/// - r: AL::Buffer#channels : ALint
|
690
|
+
rb_define_method(vAL_Buffer, "channels", &AL_Buffer_get_channels, 0);
|
691
|
+
|
692
|
+
/// - AL::Buffer#attach(sample_data)
|
693
|
+
rb_define_method(vAL_Buffer, "attach", &AL_Buffer_attach, 1);
|
694
|
+
|
695
|
+
/// + AL::Buffer#load_waveform(enWave : ALenum, freq : ALfloat, phase : ALfloat, duration : ALfloat)
|
696
|
+
rb_define_singleton_method(vAL_Buffer, "load_waveform", &AL_Buffer_load_waveform, 4);
|
697
|
+
|
698
|
+
/// + AL::Buffer#load_from_sample_data(sample_data)
|
699
|
+
rb_define_singleton_method(vAL_Buffer, "load_from_sample_data", &AL_Buffer_load_from_sample_data, 1);
|
700
|
+
|
701
|
+
/// + AL::Buffer#load_from_file(filename) # alutCreateBufferFromFile
|
702
|
+
rb_define_singleton_method(vAL_Buffer, "load_from_file", &AL_Buffer_load_from_file, 1);
|
703
|
+
|
704
|
+
/// + AL::Buffer#load_from_string(s) # alutCreateBufferFromFileImage
|
705
|
+
rb_define_singleton_method(vAL_Buffer, "load_from_string", &AL_Buffer_load_from_string, 1);
|
706
|
+
|
707
|
+
/// - AL::Buffer#to_s
|
708
|
+
rb_define_method(vAL_Buffer, "to_s", &AL_Buffer_to_s, 0);
|
709
|
+
|
710
|
+
}
|
711
|
+
|
712
|
+
static void setup_class_AL_Buffer() {
|
713
|
+
vAL_Buffer = rb_define_class_under(vAL, "Buffer", rb_cObject);
|
714
|
+
define_AL_Buffer_methods();
|
715
|
+
}
|
716
|
+
|
717
|
+
|
718
|
+
/// - AL::Source#free
|
719
|
+
void AL_Source_free(ALuint* p) {
|
720
|
+
if ( NULL != p ) {
|
721
|
+
if ( alIsSource(*p) ) {
|
722
|
+
alDeleteSources(1, p);
|
723
|
+
}
|
724
|
+
free((void*)p);
|
725
|
+
}
|
726
|
+
}
|
727
|
+
|
728
|
+
VALUE AL_Source_from_alsrc(const ALuint b) {
|
729
|
+
ALsizei* p = NULL;
|
730
|
+
p = malloc(sizeof(ALsizei));
|
731
|
+
*p = b;
|
732
|
+
return Data_Wrap_Struct(vAL_Source, 0, AL_Source_free, p);
|
733
|
+
}
|
734
|
+
|
735
|
+
/// + AL::Source#new
|
736
|
+
static VALUE AL_Source_new(VALUE klass) {
|
737
|
+
ALuint b;
|
738
|
+
alGenSources(1, (ALuint*)&b);
|
739
|
+
return AL_Source_from_alsrc(b);
|
740
|
+
}
|
741
|
+
|
742
|
+
/// - AL::Source#initialize
|
743
|
+
static VALUE AL_Source_initialize(VALUE self) {
|
744
|
+
return self;
|
745
|
+
}
|
746
|
+
|
747
|
+
/// - AL::Source#play
|
748
|
+
static VALUE AL_Source_play(VALUE self) {
|
749
|
+
ALuint* p = NULL;
|
750
|
+
Data_Get_Struct(self, ALuint, p);
|
751
|
+
alSourcePlay(*p);
|
752
|
+
return Qnil;
|
753
|
+
}
|
754
|
+
|
755
|
+
/// - AL::Source#stop
|
756
|
+
static VALUE AL_Source_stop(VALUE self) {
|
757
|
+
ALuint* p = NULL;
|
758
|
+
Data_Get_Struct(self, ALuint, p);
|
759
|
+
alSourceStop(*p);
|
760
|
+
return Qnil;
|
761
|
+
}
|
762
|
+
|
763
|
+
/// - AL::Source#pause
|
764
|
+
static VALUE AL_Source_pause(VALUE self) {
|
765
|
+
ALuint* p = NULL;
|
766
|
+
Data_Get_Struct(self, ALuint, p);
|
767
|
+
alSourcePause(*p);
|
768
|
+
return Qnil;
|
769
|
+
}
|
770
|
+
|
771
|
+
/// - AL::Source#rewind
|
772
|
+
static VALUE AL_Source_rewind(VALUE self) {
|
773
|
+
ALuint* p = NULL;
|
774
|
+
Data_Get_Struct(self, ALuint, p);
|
775
|
+
alSourceRewind(*p);
|
776
|
+
return Qnil;
|
777
|
+
}
|
778
|
+
|
779
|
+
/// - AL::Source#attach(buf) # AL_BUFFER
|
780
|
+
static VALUE AL_Source_attach(VALUE self, VALUE vBuf) {
|
781
|
+
ALuint* pSrc = NULL;
|
782
|
+
ALuint* pBuf = NULL;
|
783
|
+
Data_Get_Struct(self, ALuint, pSrc);
|
784
|
+
if ( CLASS_OF(vBuf) != vAL_Buffer )
|
785
|
+
return Qfalse;
|
786
|
+
Data_Get_Struct(self, ALuint, pBuf);
|
787
|
+
alSourcei(*pSrc, AL_BUFFER, *pBuf);
|
788
|
+
return Qtrue;
|
789
|
+
}
|
790
|
+
|
791
|
+
/// - AL::Source#queue([bufs])
|
792
|
+
static VALUE AL_Source_queue(VALUE self, VALUE vBufs) {
|
793
|
+
long len = RARRAY_LEN(vBufs);
|
794
|
+
ALuint* bufs;
|
795
|
+
ALuint* pSrc;
|
796
|
+
ALuint* pTmp;
|
797
|
+
long n;
|
798
|
+
VALUE vBuf;
|
799
|
+
Data_Get_Struct(self, ALuint, pSrc);
|
800
|
+
bufs = (ALuint*) malloc(sizeof(ALuint)*len);
|
801
|
+
for ( n = 0 ; n < len ; n ++ ) {
|
802
|
+
vBuf = rb_ary_entry(vBufs, n);
|
803
|
+
Data_Get_Struct(vBuf, ALuint, pTmp);
|
804
|
+
bufs[n] = *pTmp;
|
805
|
+
}
|
806
|
+
alSourceQueueBuffers(*pSrc, len, bufs);
|
807
|
+
free((void*)bufs);
|
808
|
+
return Qnil;
|
809
|
+
}
|
810
|
+
|
811
|
+
/// - AL::Source#unqueue([bufs])
|
812
|
+
static VALUE AL_Source_unqueue(VALUE self, VALUE vBufs) {
|
813
|
+
long len = RARRAY_LEN(vBufs);
|
814
|
+
ALuint* bufs;
|
815
|
+
ALuint* pSrc;
|
816
|
+
ALuint* pTmp;
|
817
|
+
long n;
|
818
|
+
VALUE vBuf;
|
819
|
+
Data_Get_Struct(self, ALuint, pSrc);
|
820
|
+
bufs = (ALuint*) malloc(sizeof(ALuint)*len);
|
821
|
+
for ( n = 0 ; n < len ; n ++ ) {
|
822
|
+
vBuf = rb_ary_entry(vBufs, n);
|
823
|
+
Data_Get_Struct(vBuf, ALuint, pTmp);
|
824
|
+
bufs[n] = *pTmp;
|
825
|
+
}
|
826
|
+
alSourceUnqueueBuffers(*pSrc, len, bufs);
|
827
|
+
free((void*)bufs);
|
828
|
+
return Qnil;
|
829
|
+
}
|
830
|
+
|
831
|
+
/// - r: AL::Source#buffers_processed :i
|
832
|
+
static VALUE AL_Source_buffers_processed(VALUE self) {
|
833
|
+
// AL_BUFFERS_PROCESSED
|
834
|
+
ALint i;
|
835
|
+
ALuint* p = NULL;
|
836
|
+
Data_Get_Struct(self, ALuint, p);
|
837
|
+
alGetSourcei(*p, AL_BUFFERS_PROCESSED, &i);
|
838
|
+
return INT2FIX(i);
|
839
|
+
}
|
840
|
+
|
841
|
+
|
842
|
+
/// - AL::Source#source_type : enum
|
843
|
+
static VALUE AL_Source_get_source_type(VALUE self) {
|
844
|
+
ALint i;
|
845
|
+
ALuint* p = NULL;
|
846
|
+
Data_Get_Struct(self, ALuint, p);
|
847
|
+
alGetSourcei(*p, AL_SOURCE_TYPE, &i);
|
848
|
+
switch (i) {
|
849
|
+
case AL_UNDETERMINED:
|
850
|
+
return vAL_UNDETERMINED;
|
851
|
+
case AL_STATIC:
|
852
|
+
return vAL_STATIC;
|
853
|
+
case AL_STREAMING:
|
854
|
+
return vAL_STREAMING;
|
855
|
+
default:
|
856
|
+
return INT2FIX(i);
|
857
|
+
}
|
858
|
+
}
|
859
|
+
|
860
|
+
/// - AL::Source#source_type=(enum)
|
861
|
+
static VALUE AL_Source_set_source_type(VALUE self, VALUE vSrcType) {
|
862
|
+
ALuint e;
|
863
|
+
ALuint* p = NULL;
|
864
|
+
Data_Get_Struct(self, ALuint, p);
|
865
|
+
e = NUM2INT(vSrcType);
|
866
|
+
alSourcei(*p, AL_SOURCE_TYPE, e);
|
867
|
+
return Qnil;
|
868
|
+
}
|
869
|
+
|
870
|
+
/// - AL::Source#looping : bool # AL_LOOPING
|
871
|
+
static VALUE AL_Source_get_looping(VALUE self) {
|
872
|
+
ALint e;
|
873
|
+
ALuint* p = NULL;
|
874
|
+
Data_Get_Struct(self, ALuint, p);
|
875
|
+
alGetSourcei(*p, AL_LOOPING, &e);
|
876
|
+
return albool2rbbool(e);
|
877
|
+
}
|
878
|
+
|
879
|
+
/// - AL::Source#looping=(bool) # AL_LOOPING
|
880
|
+
static VALUE AL_Source_set_looping(VALUE self, VALUE vOnOff) {
|
881
|
+
ALint onoff = NUM2INT(vOnOff);
|
882
|
+
ALuint* p = NULL;
|
883
|
+
Data_Get_Struct(self, ALuint, p);
|
884
|
+
switch (onoff) {
|
885
|
+
case AL_TRUE:
|
886
|
+
case AL_FALSE:
|
887
|
+
alSourcei(*p, AL_LOOPING, onoff);
|
888
|
+
return vOnOff;
|
889
|
+
default:
|
890
|
+
return Qnil;
|
891
|
+
}
|
892
|
+
}
|
893
|
+
|
894
|
+
/// - AL::Source#playing? : bool # AL_SOURCE_STATE [AL_STOPPPED, AL_PLAYING]
|
895
|
+
static VALUE AL_Source_get_source_state(VALUE self) {
|
896
|
+
ALint e;
|
897
|
+
ALuint* p = NULL;
|
898
|
+
Data_Get_Struct(self, ALuint, p);
|
899
|
+
alGetSourcei(*p, AL_SOURCE_STATE, &e);
|
900
|
+
switch (e) {
|
901
|
+
case AL_PLAYING:
|
902
|
+
return Qtrue;
|
903
|
+
case AL_STOPPED:
|
904
|
+
return Qfalse;
|
905
|
+
default:
|
906
|
+
return Qnil;
|
907
|
+
}
|
908
|
+
}
|
909
|
+
|
910
|
+
/// - AL::Source#playing=(bool) # AL_SOURCE_STATE [AL_STOPPPED, AL_PLAYING]
|
911
|
+
static VALUE AL_Source_set_source_state(VALUE self, VALUE vState) {
|
912
|
+
ALuint* p = NULL;
|
913
|
+
Data_Get_Struct(self, ALuint, p);
|
914
|
+
if (Qtrue == vState) alSourcei(*p, AL_SOURCE_STATE, AL_PLAYING);
|
915
|
+
if (Qfalse == vState) alSourcei(*p, AL_SOURCE_STATE, AL_STOPPED);
|
916
|
+
return vState;
|
917
|
+
}
|
918
|
+
|
919
|
+
/// - AL::Source#buffers_queued : n # AL_BUFFERS_QUEUED
|
920
|
+
static VALUE AL_Source_get_buffers_queued(VALUE self) {
|
921
|
+
ALint n;
|
922
|
+
ALuint* p = NULL;
|
923
|
+
Data_Get_Struct(self, ALuint, p);
|
924
|
+
alGetSourcei(*p, AL_BUFFERS_QUEUED, &n);
|
925
|
+
return NUM2INT(n);
|
926
|
+
}
|
927
|
+
|
928
|
+
/// - AL::Source#buffers_queued=(n) # AL_BUFFERS_QUEUED
|
929
|
+
static VALUE AL_Source_set_buffers_queued(VALUE self, VALUE vN) {
|
930
|
+
ALint n = NUM2INT(vN);
|
931
|
+
ALuint* p = NULL;
|
932
|
+
Data_Get_Struct(self, ALuint, p);
|
933
|
+
alSourcei(*p, AL_BUFFERS_QUEUED, n);
|
934
|
+
return Qnil;
|
935
|
+
}
|
936
|
+
|
937
|
+
/// - AL::Source#sec_offset : nsec # AL_SEC_OFFSET
|
938
|
+
static VALUE AL_Source_get_sec_offset(VALUE self) {
|
939
|
+
ALint n;
|
940
|
+
ALuint* p = NULL;
|
941
|
+
Data_Get_Struct(self, ALuint, p);
|
942
|
+
alGetSourcei(*p, AL_SEC_OFFSET, &n);
|
943
|
+
return INT2FIX(n);
|
944
|
+
}
|
945
|
+
|
946
|
+
/// - AL::Source#sec_offse=(nsec) # AL_SEC_OFFSET
|
947
|
+
static VALUE AL_Source_set_sec_offset(VALUE self, VALUE vSec) {
|
948
|
+
ALuint* p = NULL;
|
949
|
+
Data_Get_Struct(self, ALuint, p);
|
950
|
+
alSourcei(*p, AL_SEC_OFFSET, NUM2INT(vSec));
|
951
|
+
return Qnil;
|
952
|
+
}
|
953
|
+
|
954
|
+
/// - AL::Source#sample_offset : nsamples # AL_SAMPLE_OFFSET
|
955
|
+
static VALUE AL_Source_get_sample_offset(VALUE self) {
|
956
|
+
ALint n;
|
957
|
+
ALuint* p = NULL;
|
958
|
+
Data_Get_Struct(self, ALuint, p);
|
959
|
+
alGetSourcei(*p, AL_SAMPLE_OFFSET, &n);
|
960
|
+
return NUM2INT(n);
|
961
|
+
}
|
962
|
+
|
963
|
+
/// - AL::Source#sample_offset=(nsamples) # AL_SAMPLE_OFFSET
|
964
|
+
static VALUE AL_Source_set_sample_offset(VALUE self, VALUE vN) {
|
965
|
+
ALint n = NUM2INT(vN);
|
966
|
+
ALuint* p = NULL;
|
967
|
+
Data_Get_Struct(self, ALuint, p);
|
968
|
+
alSourcei(*p, AL_SAMPLE_OFFSET, n);
|
969
|
+
return Qnil;
|
970
|
+
}
|
971
|
+
|
972
|
+
/// - AL::Source#byte_offset : nbytes # AL_BYTE_OFFSET
|
973
|
+
static VALUE AL_Source_get_byte_offset(VALUE self) {
|
974
|
+
ALint n;
|
975
|
+
ALuint* p = NULL;
|
976
|
+
Data_Get_Struct(self, ALuint, p);
|
977
|
+
alGetSourcei(*p, AL_BYTE_OFFSET, &n);
|
978
|
+
return NUM2INT(n);
|
979
|
+
}
|
980
|
+
|
981
|
+
/// - AL::Source#byte_offset=(nbytes) # AL_BYTE_OFFSET
|
982
|
+
static VALUE AL_Source_set_byte_offset(VALUE self, VALUE vN) {
|
983
|
+
ALint n = NUM2INT(vN);
|
984
|
+
ALuint* p = NULL;
|
985
|
+
Data_Get_Struct(self, ALuint, p);
|
986
|
+
alSourcei(*p, AL_BYTE_OFFSET, n);
|
987
|
+
return Qnil;
|
988
|
+
}
|
989
|
+
|
990
|
+
/// - AL::Source#source_relative?
|
991
|
+
static VALUE AL_Source_is_source_relative(VALUE self) {
|
992
|
+
ALint n;
|
993
|
+
ALuint* p = NULL;
|
994
|
+
Data_Get_Struct(self, ALuint, p);
|
995
|
+
alGetSourcei(*p, AL_SOURCE_RELATIVE, &n);
|
996
|
+
return albool2rbbool(n);
|
997
|
+
}
|
998
|
+
|
999
|
+
/// - AL::Source#source_relative=(b)
|
1000
|
+
static VALUE AL_Source_set_source_relative(VALUE self, VALUE vBool) {
|
1001
|
+
ALuint* p = NULL;
|
1002
|
+
Data_Get_Struct(self, ALuint, p);
|
1003
|
+
if (vBool == Qtrue) alSourcei(*p, AL_SOURCE_RELATIVE, AL_TRUE);
|
1004
|
+
if (vBool == Qfalse) alSourcei(*p, AL_SOURCE_RELATIVE, AL_FALSE);
|
1005
|
+
return vBool;
|
1006
|
+
}
|
1007
|
+
|
1008
|
+
/// - AL::Source#pitch : f # AL_PITCH > 0
|
1009
|
+
static VALUE AL_Source_get_pitch(VALUE self) {
|
1010
|
+
ALfloat n;
|
1011
|
+
ALuint* p = NULL;
|
1012
|
+
Data_Get_Struct(self, ALuint, p);
|
1013
|
+
alGetSourcef(*p, AL_PITCH, &n);
|
1014
|
+
return rb_float_new(n);
|
1015
|
+
}
|
1016
|
+
|
1017
|
+
/// - AL::Source#pitch=(f) # AL_PITCH > 0
|
1018
|
+
static VALUE AL_Source_set_pitch(VALUE self, VALUE v) {
|
1019
|
+
ALuint* p = NULL;
|
1020
|
+
ALfloat n = (float) NUM2DBL(v);
|
1021
|
+
Data_Get_Struct(self, ALuint, p);
|
1022
|
+
alSourcef(*p, AL_PITCH, n);
|
1023
|
+
return v;
|
1024
|
+
}
|
1025
|
+
|
1026
|
+
/// - AL::Source#gain : f
|
1027
|
+
static VALUE AL_Source_get_gain(VALUE self) {
|
1028
|
+
ALfloat n;
|
1029
|
+
ALuint* p = NULL;
|
1030
|
+
Data_Get_Struct(self, ALuint, p);
|
1031
|
+
alGetSourcef(*p, AL_GAIN, &n);
|
1032
|
+
return rb_float_new(n);
|
1033
|
+
}
|
1034
|
+
|
1035
|
+
/// - AL::Source#gain=(f) #
|
1036
|
+
static VALUE AL_Source_set_gain(VALUE self, VALUE v) {
|
1037
|
+
ALuint* p = NULL;
|
1038
|
+
ALfloat n = (float) NUM2DBL(v);
|
1039
|
+
Data_Get_Struct(self, ALuint, p);
|
1040
|
+
alSourcef(*p, AL_GAIN, n);
|
1041
|
+
return v;
|
1042
|
+
}
|
1043
|
+
|
1044
|
+
/// - AL::Source#max_distance : f
|
1045
|
+
static VALUE AL_Source_get_max_distance(VALUE self) {
|
1046
|
+
ALfloat n;
|
1047
|
+
ALuint* p = NULL;
|
1048
|
+
Data_Get_Struct(self, ALuint, p);
|
1049
|
+
alGetSourcef(*p, AL_MAX_DISTANCE, &n);
|
1050
|
+
return rb_float_new(n);
|
1051
|
+
}
|
1052
|
+
|
1053
|
+
/// - AL::Source#max_distance=(f) #
|
1054
|
+
static VALUE AL_Source_set_max_distance(VALUE self, VALUE v) {
|
1055
|
+
ALuint* p = NULL;
|
1056
|
+
ALfloat n = (float) NUM2DBL(v);
|
1057
|
+
Data_Get_Struct(self, ALuint, p);
|
1058
|
+
alSourcef(*p, AL_MAX_DISTANCE, n);
|
1059
|
+
return v;
|
1060
|
+
}
|
1061
|
+
|
1062
|
+
/// - AL::Source#rolloff_factor : f
|
1063
|
+
static VALUE AL_Source_get_rolloff_factor(VALUE self) {
|
1064
|
+
ALfloat n;
|
1065
|
+
ALuint* p = NULL;
|
1066
|
+
Data_Get_Struct(self, ALuint, p);
|
1067
|
+
alGetSourcef(*p, AL_ROLLOFF_FACTOR, &n);
|
1068
|
+
return rb_float_new(n);
|
1069
|
+
}
|
1070
|
+
|
1071
|
+
/// - AL::Source#rolloff_factor=(f) #
|
1072
|
+
static VALUE AL_Source_set_rolloff_factor(VALUE self, VALUE v) {
|
1073
|
+
ALuint* p = NULL;
|
1074
|
+
ALfloat n = (float) NUM2DBL(v);
|
1075
|
+
Data_Get_Struct(self, ALuint, p);
|
1076
|
+
alSourcef(*p, AL_ROLLOFF_FACTOR, n);
|
1077
|
+
return v;
|
1078
|
+
}
|
1079
|
+
|
1080
|
+
/// - AL::Source#reference_distance : f
|
1081
|
+
static VALUE AL_Source_get_reference_distance(VALUE self) {
|
1082
|
+
ALfloat n;
|
1083
|
+
ALuint* p = NULL;
|
1084
|
+
Data_Get_Struct(self, ALuint, p);
|
1085
|
+
alGetSourcef(*p, AL_REFERENCE_DISTANCE, &n);
|
1086
|
+
return rb_float_new(n);
|
1087
|
+
}
|
1088
|
+
|
1089
|
+
/// - AL::Source#reference_distance=(f) #
|
1090
|
+
static VALUE AL_Source_set_reference_distance(VALUE self, VALUE v) {
|
1091
|
+
ALuint* p = NULL;
|
1092
|
+
ALfloat n = (float) NUM2DBL(v);
|
1093
|
+
Data_Get_Struct(self, ALuint, p);
|
1094
|
+
alSourcef(*p, AL_REFERENCE_DISTANCE, n);
|
1095
|
+
return v;
|
1096
|
+
}
|
1097
|
+
|
1098
|
+
/// - AL::Source#min_gain : f
|
1099
|
+
static VALUE AL_Source_get_min_gain(VALUE self) {
|
1100
|
+
ALfloat n;
|
1101
|
+
ALuint* p = NULL;
|
1102
|
+
Data_Get_Struct(self, ALuint, p);
|
1103
|
+
alGetSourcef(*p, AL_MIN_GAIN, &n);
|
1104
|
+
return rb_float_new(n);
|
1105
|
+
}
|
1106
|
+
|
1107
|
+
/// - AL::Source#min_gain=(f) #
|
1108
|
+
static VALUE AL_Source_set_min_gain(VALUE self, VALUE v) {
|
1109
|
+
ALuint* p = NULL;
|
1110
|
+
ALfloat n = (float) NUM2DBL(v);
|
1111
|
+
Data_Get_Struct(self, ALuint, p);
|
1112
|
+
alSourcef(*p, AL_MIN_GAIN, n);
|
1113
|
+
return v;
|
1114
|
+
}
|
1115
|
+
|
1116
|
+
/// - AL::Source#max_gain : f
|
1117
|
+
static VALUE AL_Source_get_max_gain(VALUE self) {
|
1118
|
+
ALfloat n;
|
1119
|
+
ALuint* p = NULL;
|
1120
|
+
Data_Get_Struct(self, ALuint, p);
|
1121
|
+
alGetSourcef(*p, AL_MAX_GAIN, &n);
|
1122
|
+
return rb_float_new(n);
|
1123
|
+
}
|
1124
|
+
|
1125
|
+
/// - AL::Source#max_gain=(f) #
|
1126
|
+
static VALUE AL_Source_set_max_gain(VALUE self, VALUE v) {
|
1127
|
+
ALuint* p = NULL;
|
1128
|
+
ALfloat n = (float) NUM2DBL(v);
|
1129
|
+
Data_Get_Struct(self, ALuint, p);
|
1130
|
+
alSourcef(*p, AL_MAX_GAIN, n);
|
1131
|
+
return v;
|
1132
|
+
}
|
1133
|
+
|
1134
|
+
/// - AL::Source#cone_outer_gain : f
|
1135
|
+
static VALUE AL_Source_get_cone_outer_gain(VALUE self) {
|
1136
|
+
ALfloat n;
|
1137
|
+
ALuint* p = NULL;
|
1138
|
+
Data_Get_Struct(self, ALuint, p);
|
1139
|
+
alGetSourcef(*p, AL_CONE_OUTER_GAIN, &n);
|
1140
|
+
return rb_float_new(n);
|
1141
|
+
}
|
1142
|
+
|
1143
|
+
/// - AL::Source#cone_outer_gain=(f) #
|
1144
|
+
static VALUE AL_Source_set_cone_outer_gain(VALUE self, VALUE v) {
|
1145
|
+
ALuint* p = NULL;
|
1146
|
+
ALfloat n = (float) NUM2DBL(v);
|
1147
|
+
Data_Get_Struct(self, ALuint, p);
|
1148
|
+
alSourcef(*p, AL_CONE_OUTER_GAIN, n);
|
1149
|
+
return v;
|
1150
|
+
}
|
1151
|
+
|
1152
|
+
/// - AL::Source#cone_inner_angle : f
|
1153
|
+
static VALUE AL_Source_get_cone_inner_angle(VALUE self) {
|
1154
|
+
ALfloat n;
|
1155
|
+
ALuint* p = NULL;
|
1156
|
+
Data_Get_Struct(self, ALuint, p);
|
1157
|
+
alGetSourcef(*p, AL_CONE_INNER_ANGLE, &n);
|
1158
|
+
return rb_float_new(n);
|
1159
|
+
}
|
1160
|
+
|
1161
|
+
/// - AL::Source#cone_inner_angle=(f) #
|
1162
|
+
static VALUE AL_Source_set_cone_inner_angle(VALUE self, VALUE v) {
|
1163
|
+
ALuint* p = NULL;
|
1164
|
+
ALfloat n = (float) NUM2DBL(v);
|
1165
|
+
Data_Get_Struct(self, ALuint, p);
|
1166
|
+
alSourcef(*p, AL_CONE_INNER_ANGLE, n);
|
1167
|
+
return v;
|
1168
|
+
}
|
1169
|
+
|
1170
|
+
/// - AL::Source#cone_outer_angle : f
|
1171
|
+
static VALUE AL_Source_get_cone_outer_angle(VALUE self) {
|
1172
|
+
ALfloat n;
|
1173
|
+
ALuint* p = NULL;
|
1174
|
+
Data_Get_Struct(self, ALuint, p);
|
1175
|
+
alGetSourcef(*p, AL_CONE_OUTER_ANGLE, &n);
|
1176
|
+
return rb_float_new(n);
|
1177
|
+
}
|
1178
|
+
|
1179
|
+
/// - AL::Source#cone_outer_angle=(f) #
|
1180
|
+
static VALUE AL_Source_set_cone_outer_angle(VALUE self, VALUE v) {
|
1181
|
+
ALuint* p = NULL;
|
1182
|
+
ALfloat n = (float) NUM2DBL(v);
|
1183
|
+
Data_Get_Struct(self, ALuint, p);
|
1184
|
+
alSourcef(*p, AL_CONE_OUTER_ANGLE, n);
|
1185
|
+
return v;
|
1186
|
+
}
|
1187
|
+
|
1188
|
+
/// - AL::Source#position : [x, y, z]
|
1189
|
+
static VALUE AL_Source_get_position(VALUE self) {
|
1190
|
+
ALfloat v[] = {0.0f, 0.0f, 0.0f};
|
1191
|
+
VALUE ary;
|
1192
|
+
ALuint* p;
|
1193
|
+
// self
|
1194
|
+
Data_Get_Struct(self, ALuint, p);
|
1195
|
+
// self->vec
|
1196
|
+
ary = rb_ary_new();
|
1197
|
+
alGetSourcefv(*p, AL_POSITION, v);
|
1198
|
+
ARRAY2RARRAY(v, ary, 3, rb_float_new);
|
1199
|
+
return ary;
|
1200
|
+
}
|
1201
|
+
|
1202
|
+
/// - AL::Source#position=([x, y, z])
|
1203
|
+
static VALUE AL_Source_set_position(VALUE self, VALUE vPos) {
|
1204
|
+
ALfloat vec[3];
|
1205
|
+
ALuint* p;
|
1206
|
+
Data_Get_Struct(self, ALuint, p);
|
1207
|
+
RARRAY2ARRAY(vPos, vec, 3, NUM2DBL);
|
1208
|
+
alSourcefv(*p, AL_POSITION, vec);
|
1209
|
+
return Qnil;
|
1210
|
+
}
|
1211
|
+
|
1212
|
+
/// - AL::Source#velocity : [x, y, z]
|
1213
|
+
static VALUE AL_Source_get_velocity(VALUE self) {
|
1214
|
+
ALfloat v[] = {0.0f, 0.0f, 0.0f};
|
1215
|
+
VALUE ary;
|
1216
|
+
ALuint* p;
|
1217
|
+
// self
|
1218
|
+
Data_Get_Struct(self, ALuint, p);
|
1219
|
+
// self->vec
|
1220
|
+
ary = rb_ary_new();
|
1221
|
+
alGetSourcefv(*p, AL_VELOCITY, v);
|
1222
|
+
ARRAY2RARRAY(v, ary, 3, rb_float_new);
|
1223
|
+
return ary;
|
1224
|
+
}
|
1225
|
+
|
1226
|
+
/// - AL::Source#velocity=([x, y, z])
|
1227
|
+
static VALUE AL_Source_set_velocity(VALUE self, VALUE vVel) {
|
1228
|
+
ALfloat vec[3];
|
1229
|
+
ALuint* p;
|
1230
|
+
Data_Get_Struct(self, ALuint, p);
|
1231
|
+
RARRAY2ARRAY(vVel, vec, 3, NUM2DBL);
|
1232
|
+
alSourcefv(*p, AL_VELOCITY, vec);
|
1233
|
+
return Qnil;
|
1234
|
+
}
|
1235
|
+
|
1236
|
+
/// - AL::Source#direction : [x, y, z]
|
1237
|
+
static VALUE AL_Source_get_direction(VALUE self) {
|
1238
|
+
ALfloat v[] = {0.0f, 0.0f, 0.0f};
|
1239
|
+
VALUE ary;
|
1240
|
+
ALuint* p;
|
1241
|
+
// self
|
1242
|
+
Data_Get_Struct(self, ALuint, p);
|
1243
|
+
// self->vec
|
1244
|
+
ary = rb_ary_new();
|
1245
|
+
alGetSourcefv(*p, AL_DIRECTION, v);
|
1246
|
+
ARRAY2RARRAY(v, ary, 3, rb_float_new);
|
1247
|
+
return ary;
|
1248
|
+
}
|
1249
|
+
|
1250
|
+
/// - AL::Source#direction=([x, y, z])
|
1251
|
+
static VALUE AL_Source_set_direction(VALUE self, VALUE vDir) {
|
1252
|
+
ALfloat vec[3];
|
1253
|
+
ALuint* p;
|
1254
|
+
Data_Get_Struct(self, ALuint, p);
|
1255
|
+
RARRAY2ARRAY(vDir, vec, 3, NUM2DBL);
|
1256
|
+
alSourcefv(*p, AL_DIRECTION, vec);
|
1257
|
+
return Qnil;
|
1258
|
+
}
|
1259
|
+
|
1260
|
+
|
1261
|
+
static void define_AL_Source_methods() {
|
1262
|
+
/// + new
|
1263
|
+
rb_define_singleton_method(vAL_Source, "new", &AL_Source_new, 0);
|
1264
|
+
|
1265
|
+
/// - initialize
|
1266
|
+
rb_define_method(vAL_Source, "initialize", &AL_Source_initialize, 0);
|
1267
|
+
|
1268
|
+
///FIXME: - to_s
|
1269
|
+
|
1270
|
+
/// - play
|
1271
|
+
rb_define_method(vAL_Source, "play", &AL_Source_play, 0);
|
1272
|
+
|
1273
|
+
/// - stop
|
1274
|
+
rb_define_method(vAL_Source, "stop", &AL_Source_stop, 0);
|
1275
|
+
|
1276
|
+
/// - pause
|
1277
|
+
rb_define_method(vAL_Source, "pause", &AL_Source_pause, 0);
|
1278
|
+
|
1279
|
+
/// - rewind
|
1280
|
+
rb_define_method(vAL_Source, "rewind", &AL_Source_rewind, 0);
|
1281
|
+
|
1282
|
+
/// - attach(buf) # AL_BUFFER
|
1283
|
+
rb_define_method(vAL_Source, "attach", &AL_Source_attach, 1);
|
1284
|
+
|
1285
|
+
/// - queue([bufs])
|
1286
|
+
rb_define_method(vAL_Source, "queue", &AL_Source_queue, 1);
|
1287
|
+
|
1288
|
+
/// - unqueue([bufs])
|
1289
|
+
rb_define_method(vAL_Source, "unqueue", &AL_Source_unqueue, 1);
|
1290
|
+
|
1291
|
+
/// - r: buffers_processed :i # AL_BUFFERS_PROCESSED
|
1292
|
+
rb_define_method(vAL_Source, "buffers_processed", &AL_Source_buffers_processed, 0);
|
1293
|
+
|
1294
|
+
/// - rw: pitch(f) # AL_PITCH > 0
|
1295
|
+
rb_define_method(vAL_Source, "pitch", &AL_Source_get_pitch, 0);
|
1296
|
+
rb_define_method(vAL_Source, "pitch=", &AL_Source_set_pitch, 1);
|
1297
|
+
|
1298
|
+
/// - rw: gain(f) # AL_GAIN > 0
|
1299
|
+
rb_define_method(vAL_Source, "gain", &AL_Source_get_gain, 0);
|
1300
|
+
rb_define_method(vAL_Source, "gain=", &AL_Source_set_gain, 1);
|
1301
|
+
|
1302
|
+
/// - rw: max_distance(f) # AL_MAX_DISTANCE
|
1303
|
+
rb_define_method(vAL_Source, "max_distance", &AL_Source_get_max_distance, 0);
|
1304
|
+
rb_define_method(vAL_Source, "max_distance=", &AL_Source_set_max_distance, 1);
|
1305
|
+
|
1306
|
+
/// - rw: rolloff_factor(f) # AL_ROLLOFF_FACTOR
|
1307
|
+
rb_define_method(vAL_Source, "rolloff_factor", &AL_Source_get_rolloff_factor, 0);
|
1308
|
+
rb_define_method(vAL_Source, "rolloff_factor=", &AL_Source_set_rolloff_factor, 1);
|
1309
|
+
|
1310
|
+
/// - rw: reference_distance(f) # AL_REFERENCE_DISTANCE
|
1311
|
+
rb_define_method(vAL_Source, "reference_distance", &AL_Source_get_reference_distance, 0);
|
1312
|
+
rb_define_method(vAL_Source, "reference_distance=", &AL_Source_set_reference_distance, 1);
|
1313
|
+
|
1314
|
+
/// - rw: min_gain(f) # AL_MIN_GAIN
|
1315
|
+
rb_define_method(vAL_Source, "min_gain", &AL_Source_get_min_gain, 0);
|
1316
|
+
rb_define_method(vAL_Source, "min_gain=", &AL_Source_set_min_gain, 1);
|
1317
|
+
|
1318
|
+
/// - rw: max_gain(f) # AL_MAX_GAIN
|
1319
|
+
rb_define_method(vAL_Source, "max_gain", &AL_Source_get_max_gain, 0);
|
1320
|
+
rb_define_method(vAL_Source, "max_gain=", &AL_Source_set_max_gain, 1);
|
1321
|
+
|
1322
|
+
/// - rw: cone_outer_gain(f) # AL_CONE_OUTER_GAIN
|
1323
|
+
rb_define_method(vAL_Source, "cone_outer_gain", &AL_Source_get_cone_outer_gain, 0);
|
1324
|
+
rb_define_method(vAL_Source, "cone_outer_gain=", &AL_Source_set_cone_outer_gain, 1);
|
1325
|
+
|
1326
|
+
/// - rw: cone_inner_angle(f) # AL_CONE_INNER_ANGLE
|
1327
|
+
rb_define_method(vAL_Source, "cone_inner_angle", &AL_Source_get_cone_inner_angle, 0);
|
1328
|
+
rb_define_method(vAL_Source, "cone_inner_angle=", &AL_Source_set_cone_inner_angle, 1);
|
1329
|
+
|
1330
|
+
/// - rw: cone_outer_angle(f) # AL_CONE_OUTER_ANGLE
|
1331
|
+
rb_define_method(vAL_Source, "cone_outer_angle", &AL_Source_get_cone_outer_angle, 0);
|
1332
|
+
rb_define_method(vAL_Source, "cone_outer_angle=", &AL_Source_set_cone_outer_angle, 1);
|
1333
|
+
|
1334
|
+
/// - rw: position([x, y, z]) # AL_POSITION
|
1335
|
+
rb_define_method(vAL_Source, "position", &AL_Source_get_position, 0);
|
1336
|
+
rb_define_method(vAL_Source, "position=", &AL_Source_set_position, 1);
|
1337
|
+
|
1338
|
+
/// - rw: velocity([x, y, z]) # AL_VELOCITY
|
1339
|
+
rb_define_method(vAL_Source, "velocity", &AL_Source_get_velocity, 0);
|
1340
|
+
rb_define_method(vAL_Source, "velocity=", &AL_Source_set_velocity, 1);
|
1341
|
+
|
1342
|
+
/// - rw: direction([x, y, z]) # AL_DIRECTION
|
1343
|
+
rb_define_method(vAL_Source, "direction", &AL_Source_get_direction, 0);
|
1344
|
+
rb_define_method(vAL_Source, "direction=", &AL_Source_set_direction, 1);
|
1345
|
+
|
1346
|
+
/// - rw: source_type(enum) # AL_SOURCE_TYPE [AL_UNDERTERMINED, AL_STATIC, AL_STREAMING]
|
1347
|
+
rb_define_method(vAL_Source, "source_type", &AL_Source_get_source_type, 0);
|
1348
|
+
rb_define_method(vAL_Source, "source_type=", &AL_Source_set_source_type, 1);
|
1349
|
+
|
1350
|
+
/// - rw: looping(bool) # AL_LOOPING
|
1351
|
+
rb_define_method(vAL_Source, "looping", &AL_Source_get_looping, 0);
|
1352
|
+
rb_define_method(vAL_Source, "looping=", &AL_Source_set_looping, 1);
|
1353
|
+
|
1354
|
+
/// - rw: playing?(enum) # AL_SOURCE_STATE [AL_STOPPPED, AL_PLAYING]
|
1355
|
+
rb_define_method(vAL_Source, "playing?", &AL_Source_get_source_state, 0);
|
1356
|
+
rb_define_method(vAL_Source, "playing=", &AL_Source_set_source_state, 1);
|
1357
|
+
|
1358
|
+
/// - rw: buffers_queued(i) # AL_BUFFERS_QUEUED
|
1359
|
+
rb_define_method(vAL_Source, "buffers_queued", &AL_Source_get_buffers_queued, 0);
|
1360
|
+
rb_define_method(vAL_Source, "buffers_queued=", &AL_Source_set_buffers_queued, 1);
|
1361
|
+
|
1362
|
+
/// - rw: sec_offset(nsec) # AL_SEC_OFFSET
|
1363
|
+
rb_define_method(vAL_Source, "sec_offset", &AL_Source_get_sec_offset, 0);
|
1364
|
+
rb_define_method(vAL_Source, "sec_offset=", &AL_Source_set_sec_offset, 1);
|
1365
|
+
|
1366
|
+
/// - rw: sample_offset(nsamples) # AL_SAMPLE_OFFSET
|
1367
|
+
rb_define_method(vAL_Source, "sample_offset", &AL_Source_get_sample_offset, 0);
|
1368
|
+
rb_define_method(vAL_Source, "sample_offset=", &AL_Source_set_sample_offset, 1);
|
1369
|
+
|
1370
|
+
/// - rw: byte_offset(nbytes) # AL_BYTE_OFFSET
|
1371
|
+
rb_define_method(vAL_Source, "byte_offset", &AL_Source_get_byte_offset, 0);
|
1372
|
+
rb_define_method(vAL_Source, "byte_offset=", &AL_Source_set_byte_offset, 1);
|
1373
|
+
|
1374
|
+
/// - rw: source_relative(bool) # AL_SOURCE_RELATIVE
|
1375
|
+
rb_define_method(vAL_Source, "source_relative?", &AL_Source_is_source_relative, 0);
|
1376
|
+
rb_define_method(vAL_Source, "source_relative=", &AL_Source_set_source_relative, 1);
|
1377
|
+
}
|
1378
|
+
|
1379
|
+
static void setup_class_AL_Source() {
|
1380
|
+
vAL_Source = rb_define_class_under(vAL, "Source", rb_cObject);
|
1381
|
+
define_AL_Source_methods();
|
1382
|
+
}
|
1383
|
+
|
1384
|
+
|
1385
|
+
void setup_module_AL() {
|
1386
|
+
vAL = rb_define_module("AL");
|
1387
|
+
// constants: AL
|
1388
|
+
define_AL_error_consts();
|
1389
|
+
define_AL_state_consts();
|
1390
|
+
define_AL_spec_consts();
|
1391
|
+
define_AL_distance_model_consts();
|
1392
|
+
define_AL_format_consts();
|
1393
|
+
define_AL_source_type_consts();
|
1394
|
+
// module functions: AL
|
1395
|
+
define_AL_error_funcs();
|
1396
|
+
define_AL_exts_funcs();
|
1397
|
+
define_AL_state_funcs();
|
1398
|
+
// AL::Listener
|
1399
|
+
setup_class_AL_Listener();
|
1400
|
+
// AL::SampleData
|
1401
|
+
setup_class_AL_SampleData();
|
1402
|
+
// AL::Buffer
|
1403
|
+
setup_class_AL_Buffer();
|
1404
|
+
// AL::Source
|
1405
|
+
setup_class_AL_Source();
|
1406
|
+
}
|