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 ADDED
@@ -0,0 +1,160 @@
1
+
2
+
3
+ = AL =
4
+ * DONE global-parameters
5
+ * DONE renderer-state management
6
+ * DONE states
7
+ * DONE errors
8
+ * DONE extensions
9
+
10
+ * DONE listener : AL::Listener
11
+ + DONE AL::Listener#orientation (fx,fy,fz,ux,uy,uz)
12
+ + DONE AL::Listener#gain (v)
13
+ + DONE AL::Listener#position (x,y,z)
14
+ + DONE AL::Listener#velocity (x,y,z)
15
+ + DONE AL::Listener#to_s
16
+
17
+
18
+ * TESTME~
19
+ * source : AL::Source
20
+ * DONE + new
21
+ * DONE - initialize
22
+ #* - to_s
23
+ * DONE - attach(buf) # AL_BUFFER
24
+ * DONE - play
25
+ * DONE - stop
26
+ * DONE - pause
27
+ * DONE - rewind
28
+ * DONE - queue_buffers([bufs])
29
+ * DONE - unqueue_buffers([bufs])
30
+ * DONE - r: buffers_processed :i # AL_BUFFERS_PROCESSED
31
+ * DONE - rw: pitch(f) # AL_PITCH > 0
32
+ * DONE - rw: gain(f) # AL_GAIN > 0
33
+ * DONE - rw: max_distance(f) # AL_MAX_DISTANCE
34
+ * DONE - rw: rolloff_factor(f) # AL_ROLLOFF_FACTOR
35
+ * DONE - rw: reference_distance(f) # AL_REFERENCE_DISTANCE
36
+ * DONE - rw: min_gain(f) # AL_MIN_GAIN
37
+ * DONE - rw: max_gain(f) # AL_MAX_GAIN
38
+ * DONE - rw: cone_outer_gain(f) # AL_CONE_OUTER_GAIN
39
+ * DONE - rw: cone_inner_angle(f) # AL_CONE_INNER_ANGLE
40
+ * DONE - rw: cone_outer_angle(f) # AL_CONE_OUTER_ANGLE
41
+ * DONE - rw: position([x, y, z]) # AL_POSITION
42
+ * DONE - rw: velocity([x, y, z]) # AL_VELOCITY
43
+ * DONE - rw: direction([x, y, z]) # AL_DIRECTION
44
+ * DONE - rw: source_type(enum) # AL_SOURCE_TYPE [AL_UNDERTERMINED, AL_STATIC, AL_STREAMING]
45
+ * DONE - rw: looping(bool) # AL_LOOPING
46
+ * DONE - rw: source_state(enum) # AL_SOURCE_STATE [AL_STOPPPED, AL_PLAYING]
47
+ * DONE - rw: buffers_queued(i) # AL_BUFFERS_QUEUED
48
+ * DONE - rw: sec_offset(nsec) # AL_SEC_OFFSET
49
+ * DONE - rw: sample_offset(nsamples) # AL_SAMPLE_OFFSET
50
+ * DONE - rw: byte_offset(nbytes) # AL_BYTE_OFFSET
51
+ * DONE - rw: source_relative(bool) # AL_SOURCE_RELATIVE
52
+
53
+
54
+
55
+ * FIXME~
56
+ * buffer : AL::Buffer
57
+ - FIXME attach(sample_data)
58
+ + DONE load_from_sample_data(sample_data)
59
+ + DONE load_from_file(filename) # alutCreateBufferFromFile
60
+ + DONE load_from_string(s) # alutCreateBufferFromFileImage
61
+ + DONE load_hello_world # alutCreateBufferHelloWorld
62
+ + DONE load_waveform # alutCreateBufferWaveform
63
+ - DONE r: frequency : ALint
64
+ - DONE r: size : ALint
65
+ - DONE r: bits : ALint
66
+ - DONE r: channels : ALint
67
+
68
+
69
+
70
+
71
+ = ALC =
72
+ * DONE errors : ALC::Device#get_error
73
+ * DONE context : ALC::Context
74
+ * DONE device : ALC::Device
75
+ * DONE extensions : ALC::Device#...
76
+ * DONE queries
77
+
78
+ * captures : ALC::CaptureDevice
79
+ * ALC::CaptureDevice
80
+ * DONE + ALC::CaptureDeivce#new(device_name, frequency : Fixnum, format : ALenum, bufsize : Fixnum)
81
+ * DONE - ALC::CaptureDevice#close : Boolean
82
+ * DONE - ALC::CaptureDevice#start
83
+ * DONE - ALC::CaptureDevice#stop
84
+ * - ALC::CaptureDevice#retrive???
85
+
86
+
87
+
88
+ = ALUT =
89
+ #* NO init
90
+ * DONE init_without_context
91
+ * DONE exit
92
+ * DONE get_error
93
+ * DONE get_error_string
94
+ * DONE get_mime_types
95
+ * DONE major_version
96
+ * DONE minor_version
97
+ * DONE sleep
98
+
99
+ ----
100
+
101
+ 샘플데이터는 대략
102
+ * void* data
103
+ * ALsizei bufsize
104
+ * ALenum fmt
105
+ * ALuint freq
106
+ ...요렇게 4개의 데이터를 감싸는데 이를 잘 포장할 방법이 필요하삼. 새로운 클래스를 만들어서 이를 포장해야하겠지?
107
+
108
+ * AL::SampleData을 사용해서 이를 공개하도록.
109
+ * DONE + load_from_file(filename) (alutLoadMemoryFromFile)
110
+ * DONE + load_from_string(io) (alutLoadMemoryFromFileImage)
111
+
112
+
113
+
114
+ ---
115
+
116
+ #include <stdio.h>
117
+ #include <AL/al.h>
118
+ #include <AL/alc.h>
119
+
120
+ int main( int argc, char *argv[] )
121
+ {
122
+ ALCdevice *mydevice;
123
+ ALubyte mybuf[16384];
124
+ ALint samples;
125
+ ALint leftch, rightch;
126
+
127
+ // 8000 Hz is really an overkill for my purpose
128
+ // We assume we'll be able to retrieve our samples at least 10 times
129
+ // a second. At 8000Hz, 16-bit, stereo, we need OpenAL to buffer at
130
+ // least 3200 bytes
131
+ mydevice = alcCaptureOpenDevice( NULL, 8000, AL_FORMAT_STEREO16, 3200 );
132
+ alcCaptureStart( mydevice );
133
+
134
+ // this would be the application main loop
135
+ while( 1)
136
+ {
137
+ // .....
138
+
139
+ // ... this would retrieve the samples, whenever I need it
140
+
141
+ // Copy the samples from OpenAL to our buffer
142
+ alcGetIntegerv(mydevice, ALC_CAPTURE_SAMPLES, &samples);
143
+ if (samples > 0)
144
+ alcCaptureSamples(mydevice, (ALCvoid *)mybuf, samples);
145
+
146
+
147
+ // process the samples....
148
+
149
+ // sleep(1);
150
+
151
+ // ......
152
+ }
153
+
154
+ alcCaptureStop( mydevice );
155
+ alcCaptureCloseDevice( mydevice );
156
+
157
+ return 0;
158
+ }
159
+
160
+ ##EOF
@@ -0,0 +1,9 @@
1
+ extconf.rb
2
+ openal.h
3
+ openal.c
4
+ openal_al.h
5
+ openal_al.c
6
+ openal_alc.h
7
+ openal_alc.c
8
+ openal_alut.h
9
+ openal_alut.c
@@ -0,0 +1,149 @@
1
+
2
+ SHELL = /bin/sh
3
+
4
+ #### Start of system configuration section. ####
5
+
6
+ srcdir = /home/ageldama/my/ruby-openal/trunk/ext/openal
7
+ topdir = /usr/lib/ruby/1.8/i486-linux
8
+ hdrdir = $(topdir)
9
+ VPATH = $(srcdir):$(topdir):$(hdrdir)
10
+ prefix = $(DESTDIR)/usr
11
+ exec_prefix = $(DESTDIR)/usr
12
+ sitedir = $(DESTDIR)/usr/local/lib/site_ruby
13
+ rubylibdir = $(libdir)/ruby/$(ruby_version)
14
+ docdir = $(datarootdir)/doc/$(PACKAGE)
15
+ dvidir = $(docdir)
16
+ datarootdir = $(prefix)/share
17
+ archdir = $(rubylibdir)/$(arch)
18
+ sbindir = $(exec_prefix)/sbin
19
+ psdir = $(docdir)
20
+ localedir = $(datarootdir)/locale
21
+ htmldir = $(docdir)
22
+ datadir = $(prefix)/share
23
+ includedir = $(prefix)/include
24
+ infodir = $(datarootdir)/info
25
+ sysconfdir = $(DESTDIR)/etc
26
+ mandir = $(datadir)/man
27
+ libdir = $(DESTDIR)/usr/lib
28
+ sharedstatedir = $(prefix)/com
29
+ oldincludedir = $(DESTDIR)/usr/include
30
+ pdfdir = $(docdir)
31
+ sitearchdir = $(sitelibdir)/$(sitearch)
32
+ bindir = $(exec_prefix)/bin
33
+ localstatedir = $(DESTDIR)/var
34
+ sitelibdir = $(sitedir)/$(ruby_version)
35
+ libexecdir = $(exec_prefix)/libexec
36
+
37
+ CC = gcc
38
+ LIBRUBY = $(LIBRUBY_SO)
39
+ LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a
40
+ LIBRUBYARG_SHARED = -l$(RUBY_SO_NAME)
41
+ LIBRUBYARG_STATIC = -l$(RUBY_SO_NAME)-static
42
+
43
+ RUBY_EXTCONF_H =
44
+ CFLAGS = -fPIC -Wall -g -fno-strict-aliasing -O2 -fPIC
45
+ INCFLAGS = -I. -I. -I/usr/lib/ruby/1.8/i486-linux -I/home/ageldama/my/ruby-openal/trunk/ext/openal
46
+ CPPFLAGS = -DHAVE_SNPRINTF
47
+ CXXFLAGS = $(CFLAGS)
48
+ DLDFLAGS = -rdynamic -Wl,-export-dynamic
49
+ LDSHARED = $(CC) -shared
50
+ AR = ar
51
+ EXEEXT =
52
+
53
+ RUBY_INSTALL_NAME = ruby1.8
54
+ RUBY_SO_NAME = ruby1.8
55
+ arch = i486-linux
56
+ sitearch = i486-linux
57
+ ruby_version = 1.8
58
+ ruby = /usr/bin/ruby1.8
59
+ RUBY = $(ruby)
60
+ RM = rm -f
61
+ MAKEDIRS = mkdir -p
62
+ INSTALL = /usr/bin/install -c
63
+ INSTALL_PROG = $(INSTALL) -m 0755
64
+ INSTALL_DATA = $(INSTALL) -m 644
65
+ COPY = cp
66
+
67
+ #### End of system configuration section. ####
68
+
69
+ preload =
70
+
71
+ libpath = $(libdir)
72
+ LIBPATH = -L"$(libdir)"
73
+ DEFFILE =
74
+
75
+ CLEANFILES =
76
+ DISTCLEANFILES =
77
+
78
+ extout =
79
+ extout_prefix =
80
+ target_prefix =
81
+ LOCAL_LIBS =
82
+ LIBS = $(LIBRUBYARG_SHARED) -lalut -lopenal -lpthread -ldl -lcrypt -lm -lc
83
+ SRCS = openal.c openal_alut.c openal_alc.c openal_al.c
84
+ OBJS = openal.o openal_alut.o openal_alc.o openal_al.o
85
+ TARGET = openal
86
+ DLLIB = $(TARGET).so
87
+ EXTSTATIC =
88
+ STATIC_LIB =
89
+
90
+ RUBYCOMMONDIR = $(sitedir)$(target_prefix)
91
+ RUBYLIBDIR = $(sitelibdir)$(target_prefix)
92
+ RUBYARCHDIR = $(sitearchdir)$(target_prefix)
93
+
94
+ TARGET_SO = $(DLLIB)
95
+ CLEANLIBS = $(TARGET).so $(TARGET).il? $(TARGET).tds $(TARGET).map
96
+ CLEANOBJS = *.o *.a *.s[ol] *.pdb *.exp *.bak
97
+
98
+ all: $(DLLIB)
99
+ static: $(STATIC_LIB)
100
+
101
+ clean:
102
+ @-$(RM) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES)
103
+
104
+ distclean: clean
105
+ @-$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log
106
+ @-$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES)
107
+
108
+ realclean: distclean
109
+ install: install-so install-rb
110
+
111
+ install-so: $(RUBYARCHDIR)
112
+ install-so: $(RUBYARCHDIR)/$(DLLIB)
113
+ $(RUBYARCHDIR)/$(DLLIB): $(DLLIB)
114
+ $(INSTALL_PROG) $(DLLIB) $(RUBYARCHDIR)
115
+ install-rb: pre-install-rb install-rb-default
116
+ install-rb-default: pre-install-rb-default
117
+ pre-install-rb: Makefile
118
+ pre-install-rb-default: Makefile
119
+ $(RUBYARCHDIR):
120
+ $(MAKEDIRS) $@
121
+
122
+ site-install: site-install-so site-install-rb
123
+ site-install-so: install-so
124
+ site-install-rb: install-rb
125
+
126
+ .SUFFIXES: .c .m .cc .cxx .cpp .C .o
127
+
128
+ .cc.o:
129
+ $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
130
+
131
+ .cxx.o:
132
+ $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
133
+
134
+ .cpp.o:
135
+ $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
136
+
137
+ .C.o:
138
+ $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
139
+
140
+ .c.o:
141
+ $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) -c $<
142
+
143
+ $(DLLIB): $(OBJS)
144
+ @-$(RM) $@
145
+ $(LDSHARED) $(DLDFLAGS) $(LIBPATH) -o $@ $(OBJS) $(LOCAL_LIBS) $(LIBS)
146
+
147
+
148
+
149
+ $(OBJS): ruby.h defines.h
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+ require 'mkmf'
3
+
4
+ dir_config("openal");
5
+
6
+ if have_library('openal', 'alGetError') and
7
+ have_func('snprintf', 'stdio.h') and
8
+ have_library('alut', 'alutGetErrorString') then
9
+ create_makefile("openal");
10
+ else
11
+ raise "No OpenAL library found."
12
+ end
@@ -0,0 +1,66 @@
1
+ have_library: checking for alGetError() in -lopenal... -------------------- yes
2
+
3
+ "gcc -o conftest -I. -I/usr/lib/ruby/1.8/i486-linux -I/home/ageldama/my/ruby-openal/trunk/ext/openal -Wall -g -fno-strict-aliasing -O2 -fPIC conftest.c -L"/usr/lib" -rdynamic -Wl,-export-dynamic -lruby1.8-static -lopenal -lpthread -ldl -lcrypt -lm -lc"
4
+ conftest.c: In function ‘t’:
5
+ conftest.c:3: error: ‘alGetError’ undeclared (first use in this function)
6
+ conftest.c:3: error: (Each undeclared identifier is reported only once
7
+ conftest.c:3: error: for each function it appears in.)
8
+ checked program was:
9
+ /* begin */
10
+ 1: /*top*/
11
+ 2: int main() { return 0; }
12
+ 3: int t() { void ((*volatile p)()); p = (void ((*)()))alGetError; return 0; }
13
+ /* end */
14
+
15
+ "gcc -o conftest -I. -I/usr/lib/ruby/1.8/i486-linux -I/home/ageldama/my/ruby-openal/trunk/ext/openal -Wall -g -fno-strict-aliasing -O2 -fPIC conftest.c -L"/usr/lib" -rdynamic -Wl,-export-dynamic -lruby1.8-static -lopenal -lpthread -ldl -lcrypt -lm -lc"
16
+ conftest.c: In function ‘t’:
17
+ conftest.c:3: warning: implicit declaration of function ‘alGetError’
18
+ checked program was:
19
+ /* begin */
20
+ 1: /*top*/
21
+ 2: int main() { return 0; }
22
+ 3: int t() { alGetError(); return 0; }
23
+ /* end */
24
+
25
+ --------------------
26
+
27
+ have_func: checking for snprintf()... -------------------- yes
28
+
29
+ "gcc -o conftest -I. -I/usr/lib/ruby/1.8/i486-linux -I/home/ageldama/my/ruby-openal/trunk/ext/openal -Wall -g -fno-strict-aliasing -O2 -fPIC conftest.c -L"/usr/lib" -rdynamic -Wl,-export-dynamic -lopenal -lruby1.8-static -lopenal -lpthread -ldl -lcrypt -lm -lc"
30
+ checked program was:
31
+ /* begin */
32
+ 1: #include <stdio.h>
33
+ 2:
34
+ 3: /*top*/
35
+ 4: int main() { return 0; }
36
+ 5: int t() { void ((*volatile p)()); p = (void ((*)()))snprintf; return 0; }
37
+ /* end */
38
+
39
+ --------------------
40
+
41
+ have_library: checking for alutGetErrorString() in -lalut... -------------------- yes
42
+
43
+ "gcc -o conftest -I. -I/usr/lib/ruby/1.8/i486-linux -I/home/ageldama/my/ruby-openal/trunk/ext/openal -Wall -g -fno-strict-aliasing -O2 -fPIC conftest.c -L"/usr/lib" -rdynamic -Wl,-export-dynamic -lopenal -lruby1.8-static -lalut -lopenal -lpthread -ldl -lcrypt -lm -lc"
44
+ conftest.c: In function ‘t’:
45
+ conftest.c:3: error: ‘alutGetErrorString’ undeclared (first use in this function)
46
+ conftest.c:3: error: (Each undeclared identifier is reported only once
47
+ conftest.c:3: error: for each function it appears in.)
48
+ checked program was:
49
+ /* begin */
50
+ 1: /*top*/
51
+ 2: int main() { return 0; }
52
+ 3: int t() { void ((*volatile p)()); p = (void ((*)()))alutGetErrorString; return 0; }
53
+ /* end */
54
+
55
+ "gcc -o conftest -I. -I/usr/lib/ruby/1.8/i486-linux -I/home/ageldama/my/ruby-openal/trunk/ext/openal -Wall -g -fno-strict-aliasing -O2 -fPIC conftest.c -L"/usr/lib" -rdynamic -Wl,-export-dynamic -lopenal -lruby1.8-static -lalut -lopenal -lpthread -ldl -lcrypt -lm -lc"
56
+ conftest.c: In function ‘t’:
57
+ conftest.c:3: warning: implicit declaration of function ‘alutGetErrorString’
58
+ checked program was:
59
+ /* begin */
60
+ 1: /*top*/
61
+ 2: int main() { return 0; }
62
+ 3: int t() { alutGetErrorString(); return 0; }
63
+ /* end */
64
+
65
+ --------------------
66
+
@@ -0,0 +1,15 @@
1
+ #include "ruby.h"
2
+ #include "openal.h"
3
+ #include "AL/al.h"
4
+ #include "AL/alc.h"
5
+
6
+ /// initialize 'openal' extension
7
+ void Init_openal() {
8
+ setup_module_AL();
9
+ setup_module_ALC();
10
+ setup_module_ALUT();
11
+
12
+ //
13
+ return;
14
+ }
15
+
@@ -0,0 +1,50 @@
1
+ #ifndef RUBY_OPENAL_H
2
+ #define RUBY_OPENAL_H
3
+
4
+ #ifdef __cplusplus
5
+ extern "C" {
6
+ #endif
7
+
8
+ #include "AL/al.h"
9
+
10
+ #include "openal_al.h"
11
+ #include "openal_alc.h"
12
+ #include "openal_alut.h"
13
+
14
+ /// data types
15
+ typedef struct {
16
+ void* buf;
17
+ ALsizei bufsize;
18
+ ALenum fmt;
19
+ ALuint freq;
20
+ } al_sample_data_t;
21
+
22
+
23
+ /// function prototypes
24
+ extern void Init_openal();
25
+
26
+ /// AL::SampleData internal object interface
27
+ extern al_sample_data_t* AL_SampleData_new();
28
+ extern void AL_SampleData_free(al_sample_data_t* p);
29
+
30
+
31
+ /// helper macros
32
+ #define albool2rbbool(b) ((b)?(Qtrue):(Qfalse))
33
+
34
+ #define RARRAY2ARRAY(rbary, ary, n, convf) \
35
+ VALUE ___v; int ___c;\
36
+ for(___c=0;___c<n;___c++){\
37
+ ___v=rb_ary_entry(rbary,___c);\
38
+ ary[___c]=convf(___v);}
39
+
40
+ #define ARRAY2RARRAY(ary, rbary, n, convf) \
41
+ int ___c; \
42
+ for(___c=0;___c<n;___c++){\
43
+ rb_ary_push(rbary, convf(ary[___c]));}\
44
+
45
+
46
+ #ifdef __cplusplus
47
+ }
48
+ #endif
49
+
50
+ #endif