rubysdl 1.3.1 → 2.0

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.
Files changed (88) hide show
  1. data/MANIFEST +22 -2
  2. data/NEWS.en +80 -0
  3. data/NEWS.ja +83 -0
  4. data/README.en +2 -1
  5. data/README.ja +2 -2
  6. data/doc-en/Makefile +18 -0
  7. data/doc-en/cdrom.rsd +417 -0
  8. data/doc-en/collision.rsd +174 -0
  9. data/doc-en/event.rsd +1476 -0
  10. data/doc-en/font.rsd +811 -0
  11. data/doc-en/general.rsd +43 -0
  12. data/doc-en/init.rsd +168 -0
  13. data/doc-en/joystick.rsd +401 -0
  14. data/doc-en/mixer.rsd +869 -0
  15. data/doc-en/mpeg.rsd +585 -0
  16. data/doc-en/opengl.rsd +155 -0
  17. data/doc-en/sdlskk.rsd +472 -0
  18. data/doc-en/time.rsd +46 -0
  19. data/doc-en/video.rsd +2806 -0
  20. data/doc-en/wm.rsd +112 -0
  21. data/doc/Makefile +1 -1
  22. data/doc/cdrom.rsd +3 -3
  23. data/doc/event.rsd +178 -179
  24. data/doc/general.rsd +10 -0
  25. data/doc/init.rsd +2 -2
  26. data/doc/joystick.rsd +29 -5
  27. data/doc/mixer.rsd +20 -0
  28. data/doc/rsd.rb +42 -9
  29. data/doc/sdlskk.rsd +7 -7
  30. data/doc/video.rsd +461 -168
  31. data/doc/wm.rsd +2 -2
  32. data/extconf.rb +1 -8
  33. data/lib/rubysdl_aliases.rb +52 -190
  34. data/lib/rubysdl_compatible_ver1.rb +243 -0
  35. data/lib/sdl.rb +58 -92
  36. data/rubysdl.h +59 -68
  37. data/rubysdl_cdrom.c +125 -102
  38. data/{rubysdl_doc.en.rd → rubysdl_doc_old.en.rd} +3 -2
  39. data/rubysdl_event.c +318 -255
  40. data/rubysdl_event_key.c +299 -287
  41. data/rubysdl_image.c +37 -13
  42. data/rubysdl_joystick.c +180 -67
  43. data/rubysdl_kanji.c +61 -75
  44. data/rubysdl_main.c +65 -138
  45. data/rubysdl_mixer.c +339 -214
  46. data/rubysdl_mouse.c +50 -43
  47. data/rubysdl_opengl.c +31 -28
  48. data/rubysdl_pixel.c +17 -28
  49. data/rubysdl_ref.en.html +5658 -0
  50. data/rubysdl_ref.en.rd +6337 -0
  51. data/rubysdl_ref.html +2253 -1964
  52. data/rubysdl_ref.rd +823 -469
  53. data/rubysdl_rwops.c +9 -6
  54. data/rubysdl_sdlskk.c +137 -165
  55. data/rubysdl_sge_video.c +355 -469
  56. data/rubysdl_smpeg.c +189 -190
  57. data/rubysdl_time.c +1 -1
  58. data/rubysdl_ttf.c +147 -215
  59. data/rubysdl_video.c +486 -405
  60. data/rubysdl_wm.c +30 -30
  61. data/sample/aadraw.rb +9 -9
  62. data/sample/alpha.rb +12 -13
  63. data/sample/alphadraw.rb +10 -10
  64. data/sample/bfont.rb +4 -4
  65. data/sample/cdrom.rb +11 -4
  66. data/sample/collision.rb +20 -20
  67. data/sample/cursor.rb +5 -5
  68. data/sample/ellipses.rb +20 -16
  69. data/sample/event2.rb +11 -9
  70. data/sample/font.rb +4 -4
  71. data/sample/fpstimer.rb +3 -3
  72. data/sample/icon.bmp.gz +0 -0
  73. data/sample/icon.png +0 -0
  74. data/sample/joy2.rb +14 -14
  75. data/sample/kanji.rb +7 -7
  76. data/sample/load_from_io.rb +44 -0
  77. data/sample/movesp.rb +13 -12
  78. data/sample/playmod.rb +2 -3
  79. data/sample/plaympeg.rb +8 -8
  80. data/sample/playwave.rb +5 -6
  81. data/sample/sdlskk.rb +11 -11
  82. data/sample/sgetest.rb +14 -12
  83. data/sample/stetris.rb +12 -13
  84. data/sample/testgl.rb +13 -14
  85. data/sample/testsprite.rb +12 -11
  86. data/sample/transformblit.rb +23 -22
  87. metadata +62 -35
  88. data/rubysdl_event2.c +0 -417
data/rubysdl_main.c CHANGED
@@ -20,89 +20,45 @@
20
20
 
21
21
  #define DEF_GLOBAL
22
22
  #include "rubysdl.h"
23
- #include <signal.h>
24
- #include <stdio.h>
25
-
26
- /* declaration of initialize functions */
27
- void init_video();
28
- #ifdef HAVE_SGE
29
- void init_sge_video();
30
- #else
31
- void init_pixel();
32
- #endif
33
- #ifdef DEF_OPENGL
34
- void init_opengl();
35
- #ifdef INIT_OGLMODULE_FROM_SDL
36
- void Init_opengl();
37
- #endif
38
- #endif
39
- #ifdef HAVE_SDL_IMAGE
40
- void init_sdl_image();
41
- #endif
42
- void init_event();
43
- #ifdef DEF_EVENT2
44
- void init_event2();
45
- #endif
46
- void init_keyEvent();
47
- void init_mouse();
48
- void init_joystick();
49
- void init_cdrom();
50
- void init_time();
51
- void init_wm();
52
- void init_kanji(void);
53
- #ifdef HAVE_SDL_TTF
54
- void init_ttf();
55
- void quit_ttf();
56
- #endif
57
- #ifdef HAVE_SDL_MIXER
58
- void init_mixer();
59
- void quit_mixer();
60
- #endif
61
- #ifdef HAVE_SMPEG
62
- void init_smpeg();
63
- #endif
64
-
65
- #ifdef HAVE_SDLSKK
66
- void init_sdlskk();
67
- #endif
68
-
69
- static void sdl_quit();
70
- static VALUE sdl_init(VALUE obj,VALUE flags)
23
+
24
+ static VALUE sdl_s_init(VALUE mod, VALUE flags)
71
25
  {
72
- Uint32 flag;
73
-
74
26
  rb_secure(4);
75
- flag= NUM2UINT(flags);
76
- if( SDL_Init(flag) < 0 )
77
- rb_raise(eSDLError,"Couldn't initialize SDL: %s",SDL_GetError());
27
+ if( SDL_Init(NUM2UINT(flags)) < 0 )
28
+ rb_raise(eSDLError, "Couldn't initialize SDL: %s", SDL_GetError());
78
29
  return Qnil;
79
30
  }
80
31
 
81
- static VALUE sdl_initSubSystem(VALUE obj,VALUE flags)
32
+ static VALUE sdl_s_initSubSystem(VALUE mod, VALUE flags)
82
33
  {
83
34
  if( SDL_InitSubSystem(NUM2UINT(flags)) < 0 )
84
- rb_raise(eSDLError,"Couldn't initialize SDL subsystem: %s",SDL_GetError());
35
+ rb_raise(eSDLError, "Couldn't initialize SDL subsystem: %s", SDL_GetError());
85
36
  return Qnil;
86
37
  }
87
38
 
88
- static VALUE sdl_wasInit(VALUE mod,VALUE flags)
39
+ static VALUE sdl_s_inited_system(VALUE mod, VALUE flags)
89
40
  {
90
- return UINT2NUM( SDL_WasInit(NUM2UINT(flags)) );
41
+ return UINT2NUM(SDL_WasInit(NUM2UINT(flags)));
91
42
  }
92
43
 
93
- static VALUE sdl_putenv(VALUE mod,VALUE var)
44
+ static VALUE sdl_s_putenv(VALUE mod, VALUE var)
94
45
  {
95
- if( putenv(GETCSTR(var)) < 0 ){
96
- rb_raise(eSDLError,"Can't put environ variable: %s", GETCSTR(var));
46
+ rb_secure(4);
47
+ SafeStringValue(var);
48
+
49
+ if( putenv(RSTRING_PTR(var)) < 0 ){
50
+ rb_raise(eSDLError, "Can't put environ variable: %s", RSTRING_PTR(var));
97
51
  }
98
52
  return Qnil;
99
53
  }
100
54
 
101
- static VALUE sdl_getenv(VALUE mod,VALUE name)
55
+ static VALUE sdl_s_getenv(VALUE mod, VALUE name)
102
56
  {
103
- char* result = getenv(GETCSTR(name));
104
- if( result == NULL ){
105
- rb_raise(eSDLError,"Can't get environ variable: %s", GETCSTR(name));
57
+ char* result;
58
+ SafeStringValue(name);
59
+ result = getenv(RSTRING_PTR(name));
60
+ if(result == NULL){
61
+ rb_raise(eSDLError, "Can't get environ variable: %s", RSTRING_PTR(name));
106
62
  }
107
63
  return rb_str_new2(result);
108
64
  }
@@ -112,91 +68,62 @@ int rubysdl_is_quit(void)
112
68
  {
113
69
  return is_quit;
114
70
  }
115
- static void sdl_quit()
71
+ static void sdl_quit(VALUE v)
116
72
  {
117
- #ifdef HAVE_SDL_MIXER
118
- quit_mixer();
119
- #endif
120
- #ifdef HAVE_SDL_TTF
121
- quit_ttf();
122
- #endif
123
- is_quit = 1;
73
+ if(rubysdl_is_quit())
74
+ return;
75
+ rubysdl_quit_Mixer();
76
+ rubysdl_quit_TTF();
124
77
  SDL_Quit();
125
- return ;
78
+ is_quit = 1;
126
79
  }
127
80
 
128
- static VALUE sdl_rb_quit(VALUE obj)
81
+ static VALUE sdl_s_quit(VALUE obj)
129
82
  {
130
- sdl_quit();
83
+ sdl_quit(0);
131
84
  return Qnil;
132
85
  }
133
86
 
134
- static void defineConst()
135
- {
136
- rb_define_const(mSDL,"INIT_TIMER",UINT2NUM(SDL_INIT_TIMER));
137
- rb_define_const(mSDL,"INIT_AUDIO",UINT2NUM(SDL_INIT_AUDIO));
138
- rb_define_const(mSDL,"INIT_VIDEO",UINT2NUM(SDL_INIT_VIDEO));
139
- rb_define_const(mSDL,"INIT_CDROM",UINT2NUM(SDL_INIT_CDROM));
140
- rb_define_const(mSDL,"INIT_JOYSTICK",UINT2NUM(SDL_INIT_JOYSTICK));
141
- rb_define_const(mSDL,"INIT_NOPARACHUTE",UINT2NUM(SDL_INIT_NOPARACHUTE));
142
- rb_define_const(mSDL,"INIT_EVENTTHREAD",UINT2NUM(SDL_INIT_EVENTTHREAD));
143
- rb_define_const(mSDL,"INIT_EVERYTHING",UINT2NUM(SDL_INIT_EVERYTHING));
144
- }
145
-
146
-
147
87
  void Init_sdl()
148
88
  {
149
- mSDL = rb_define_module("SDL");
150
- eSDLError = rb_define_class_under(mSDL,"Error",rb_eStandardError);
151
- rb_define_module_function(mSDL,"init",sdl_init,1);
152
- rb_define_module_function(mSDL,"initedSystem",sdl_wasInit,1);
153
- rb_define_module_function(mSDL,"initSubSystem",sdl_initSubSystem,1);
154
- rb_define_module_function(mSDL,"quit",sdl_rb_quit,0);
155
- rb_define_module_function(mSDL,"putenv",sdl_putenv,1);
156
- rb_define_module_function(mSDL,"getenv",sdl_getenv,1);
89
+ VALUE mSDL = rb_define_module("SDL");
90
+ VALUE cSurface;
91
+
92
+ eSDLError = rb_define_class_under(mSDL, "Error", rb_eStandardError);
93
+ rb_define_module_function(mSDL, "init", sdl_s_init, 1);
94
+ rb_define_module_function(mSDL, "initedSystem", sdl_s_inited_system, 1);
95
+ rb_define_module_function(mSDL, "initSubSystem", sdl_s_initSubSystem, 1);
96
+ rb_define_module_function(mSDL, "quit", sdl_s_quit, 0);
97
+ rb_define_module_function(mSDL, "putenv", sdl_s_putenv, 1);
98
+ rb_define_module_function(mSDL, "getenv", sdl_s_getenv, 1);
157
99
 
158
- defineConst();
159
-
160
-
161
- init_video();
162
- #ifdef HAVE_SGE
163
- init_sge_video();
164
- #else
165
- init_pixel();
166
- #endif
167
- #ifdef DEF_OPENGL
168
- init_opengl();
169
- #ifdef INIT_OGLMODULE_FROM_SDL
170
- Init_opengl();
171
- #endif
172
- #endif
173
- #ifdef HAVE_SDL_IMAGE
174
- init_sdl_image();
175
- #endif
176
- init_event();
177
- #ifdef DEF_EVENT2
178
- init_event2();
179
- #endif
180
- init_keyEvent();
181
- init_mouse();
182
- init_joystick();
183
- init_cdrom();
184
- init_time();
185
- init_wm();
186
- init_kanji();
187
- #ifdef HAVE_SDL_TTF
188
- init_ttf();
189
- #endif
190
- #ifdef HAVE_SDL_MIXER
191
- init_mixer();
192
- #endif
193
- #ifdef HAVE_SMPEG
194
- init_smpeg();
195
- #endif
196
- #ifdef HAVE_SDLSKK
197
- init_sdlskk();
198
- #endif
199
- rb_set_end_proc(sdl_quit,0);
100
+ rb_define_const(mSDL, "INIT_TIMER", UINT2NUM(SDL_INIT_TIMER));
101
+ rb_define_const(mSDL, "INIT_AUDIO", UINT2NUM(SDL_INIT_AUDIO));
102
+ rb_define_const(mSDL, "INIT_VIDEO", UINT2NUM(SDL_INIT_VIDEO));
103
+ rb_define_const(mSDL, "INIT_CDROM", UINT2NUM(SDL_INIT_CDROM));
104
+ rb_define_const(mSDL, "INIT_JOYSTICK", UINT2NUM(SDL_INIT_JOYSTICK));
105
+ rb_define_const(mSDL, "INIT_NOPARACHUTE", UINT2NUM(SDL_INIT_NOPARACHUTE));
106
+ rb_define_const(mSDL, "INIT_EVENTTHREAD", UINT2NUM(SDL_INIT_EVENTTHREAD));
107
+ rb_define_const(mSDL, "INIT_EVERYTHING", UINT2NUM(SDL_INIT_EVERYTHING));
108
+
109
+
110
+ cSurface = rubysdl_init_video(mSDL);
111
+ rubysdl_init_sge(mSDL, cSurface);
112
+ rubysdl_init_GL(mSDL);
113
+ rubysdl_init_image(mSDL, cSurface);
114
+ rubysdl_init_Event(mSDL);
115
+ rubysdl_init_Key(mSDL);
116
+ rubysdl_init_Mouse(mSDL);
117
+ rubysdl_init_Joystick(mSDL);
118
+ rubysdl_init_CD(mSDL);
119
+ rubysdl_init_time(mSDL);
120
+ rubysdl_init_WM(mSDL);
121
+ rubysdl_init_Kanji(mSDL);
122
+ rubysdl_init_TTF(mSDL);
123
+ rubysdl_init_Mixer(mSDL);
124
+ rubysdl_init_MPEG(mSDL);
125
+ rubysdl_init_SKK(mSDL);
126
+ rb_set_end_proc(sdl_quit, 0);
200
127
  }
201
128
 
202
129
 
data/rubysdl_mixer.c CHANGED
@@ -17,33 +17,86 @@
17
17
  License along with this library; if not, write to the Free Software
18
18
  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19
19
  */
20
- #ifdef HAVE_SDL_MIXER
21
-
22
20
  #include "rubysdl.h"
21
+ #ifdef HAVE_SDL_MIXER
23
22
  #define USE_RWOPS
24
23
  #include <SDL_mixer.h>
25
24
 
26
- static int mix_opened=0;
27
- static int mix_closed=0;
25
+ static VALUE mMixer;
26
+ static VALUE cWave;
27
+ static VALUE cMusic;
28
28
 
29
29
  static VALUE playing_wave = Qnil;
30
- static VALUE playing_music=Qnil;
30
+ static VALUE playing_music = Qnil;
31
31
 
32
- static void mix_FreeChunk(Mix_Chunk *chunk)
32
+ static int Mix_opened(void)
33
33
  {
34
- if( ! mix_closed ){
35
- Mix_FreeChunk( chunk );
36
- }
34
+ return Mix_QuerySpec(NULL, NULL, NULL);
37
35
  }
38
36
 
39
- static void mix_FreeMusic(Mix_Music *music)
37
+ typedef struct {
38
+ Mix_Chunk* chunk;
39
+ } Wave;
40
+
41
+ typedef struct {
42
+ Mix_Music* music;
43
+ } Music;
44
+
45
+ DEFINE_GET_STRUCT(Wave, GetWave, cWave, "SDL::Mixer::Wave");
46
+ static Mix_Chunk* Get_Mix_Chunk(VALUE obj)
40
47
  {
41
- if( !mix_closed ){
42
- Mix_FreeMusic( music );
43
- }
48
+ Wave* wave = GetWave(obj);
49
+ if(wave->chunk == NULL)
50
+ rb_raise(eSDLError, "Wave data is already disposed");
51
+ return wave->chunk;
52
+ }
53
+ static void Wave_free(Wave* wave)
54
+ {
55
+ if(Mix_opened() && wave->chunk)
56
+ Mix_FreeChunk(wave->chunk);
57
+ free(wave);
58
+ }
59
+ static VALUE Wave_s_alloc(VALUE klass)
60
+ {
61
+ Wave* wave = ALLOC(Wave);
62
+ wave->chunk = NULL;
63
+ return Data_Wrap_Struct(klass, 0, Wave_free, wave);
64
+ }
65
+ static VALUE Wave_create(Mix_Chunk* chunk)
66
+ {
67
+ VALUE newobj = Wave_s_alloc(cWave);
68
+ GetWave(newobj)->chunk = chunk;
69
+ return newobj;
44
70
  }
45
71
 
46
- static VALUE mix_audioDriverName(VALUE mod)
72
+ DEFINE_GET_STRUCT(Music, GetMusic, cMusic, "SDL::Mixer::Music");
73
+ static Mix_Music* Get_Mix_Music(VALUE obj)
74
+ {
75
+ Music* mus = GetMusic(obj);
76
+ if(mus->music == NULL)
77
+ rb_raise(eSDLError, "Wave data is already disposed");
78
+ return mus->music;
79
+ }
80
+ static void Music_free(Music* mus)
81
+ {
82
+ if(Mix_opened() && mus->music)
83
+ Mix_FreeMusic(mus->music);
84
+ free(mus);
85
+ }
86
+ static VALUE Music_s_alloc(VALUE klass)
87
+ {
88
+ Music* mus = ALLOC(Music);
89
+ mus->music = NULL;
90
+ return Data_Wrap_Struct(klass, 0, Music_free, mus);
91
+ }
92
+ static VALUE Music_create(Mix_Music* music)
93
+ {
94
+ VALUE newobj = Music_s_alloc(cMusic);
95
+ GetMusic(newobj)->music = music;
96
+ return newobj;
97
+ }
98
+
99
+ static VALUE Mixer_s_driverName(VALUE mod)
47
100
  {
48
101
  char driver_name[512];
49
102
  if(SDL_AudioDriverName(driver_name, sizeof(driver_name)) == NULL)
@@ -51,268 +104,314 @@ static VALUE mix_audioDriverName(VALUE mod)
51
104
  return rb_str_new2(driver_name);
52
105
  }
53
106
 
54
- static VALUE mix_openAudio(VALUE mod,VALUE frequency,VALUE format,
55
- VALUE channels,VALUE chunksize)
107
+ static VALUE Mixer_s_open(VALUE mod, VALUE frequency, VALUE format,
108
+ VALUE channels, VALUE chunksize)
56
109
  {
57
- if( mix_opened ){
58
- rb_raise(eSDLError,"already initialize SDL::Mixer");
110
+ rb_secure(4);
111
+
112
+ if(Mix_opened()){
113
+ rb_raise(eSDLError, "already initialize SDL::Mixer");
59
114
  }
60
- if( Mix_OpenAudio( NUM2INT(frequency),NUM2UINT(format),NUM2INT(channels),
61
- NUM2INT(chunksize) ) < 0 ){
62
- rb_raise(eSDLError,"Couldn't open audio: %s",SDL_GetError());
115
+ if( Mix_OpenAudio(NUM2INT(frequency), NUM2UINT(format), NUM2INT(channels),
116
+ NUM2INT(chunksize)) < 0 ){
117
+ rb_raise(eSDLError, "Couldn't open audio: %s", SDL_GetError());
63
118
  }
64
119
 
65
- mix_opened = 1;
66
120
  return Qnil;
67
121
  }
68
122
 
69
- static VALUE mix_querySpec(VALUE mod)
123
+ static VALUE Mixer_s_close(VALUE mod)
124
+ {
125
+ rb_secure(4);
126
+ Mix_CloseAudio();
127
+ return Qnil;
128
+ }
129
+
130
+ static VALUE Mixer_s_spec(VALUE mod)
70
131
  {
71
132
  int rate;
72
133
  Uint16 format;
73
134
  int channels;
74
135
 
75
- if( !Mix_QuerySpec(&rate,&format,&channels) )
76
- rb_raise(eSDLError,"audio have not been opened yet: %s", Mix_GetError());
77
- return rb_ary_new3( 3,INT2NUM(rate),UINT2NUM(format),INT2NUM(channels) );
136
+ if( !Mix_QuerySpec(&rate, &format, &channels) )
137
+ rb_raise(eSDLError,"audio have not been opened yet: %s",
138
+ Mix_GetError());
139
+ return rb_ary_new3(3, INT2NUM(rate), UINT2NUM(format), INT2NUM(channels));
140
+
78
141
  }
79
142
 
80
- static VALUE mix_allocateChannels(VALUE mod,VALUE numchannels)
143
+ static VALUE Mixer_s_allocateChannels(VALUE mod, VALUE numchannels)
81
144
  {
145
+ rb_secure(4);
82
146
  return INT2FIX( Mix_AllocateChannels(NUM2INT(numchannels)) );
83
147
  }
84
148
 
85
149
  /* Returns which channel was used to play the sound. */
86
- static VALUE mix_playChannel(VALUE mod,VALUE channel,VALUE wave,VALUE loops)
150
+ static VALUE Mixer_s_playChannel(VALUE mod, VALUE channel, VALUE wave, VALUE loops)
87
151
  {
88
- Mix_Chunk *chunk;
89
- int playing_channel;
152
+ int play_channel;
153
+ rb_secure(4);
154
+
155
+ play_channel = Mix_PlayChannel(NUM2INT(channel),
156
+ Get_Mix_Chunk(wave),
157
+ NUM2INT(loops));
158
+
159
+ if( play_channel == -1 )
160
+ rb_raise(eSDLError, "couldn't play wave: %s",
161
+ Mix_GetError());
90
162
 
91
- if( ! rb_obj_is_kind_of(wave,cWave) )
92
- rb_raise(rb_eArgError,"type mismatch: SDL::Mixer::Wave is expected");
93
- Data_Get_Struct(wave,Mix_Chunk,chunk);
163
+ rb_ary_store(playing_wave, play_channel, wave);/* to avoid gc problem */
164
+ return INT2FIX(play_channel);
165
+ }
94
166
 
95
- playing_channel = Mix_PlayChannel(NUM2INT(channel),chunk,NUM2INT(loops) );
96
- if( playing_channel == -1 ){
97
- rb_raise( eSDLError, "couldn't play wave: %s", Mix_GetError() );
167
+ static VALUE Mixer_s_playChannelTimed(VALUE mod,
168
+ VALUE channel,
169
+ VALUE wave,
170
+ VALUE loops,
171
+ VALUE ticks)
172
+ {
173
+ int play_channel;
174
+
175
+ play_channel = Mix_PlayChannelTimed(NUM2INT(channel),
176
+ Get_Mix_Chunk(wave),
177
+ NUM2INT(loops),
178
+ NUM2INT(ticks));
179
+ if( play_channel == -1 ){
180
+ rb_raise(eSDLError, "couldn't play wave: %s",
181
+ Mix_GetError());
98
182
  }
99
183
 
100
- rb_ary_store(playing_wave,playing_channel,wave);/* to avoid gc problem */
101
- return INT2FIX(playing_channel);
184
+ rb_ary_store(playing_wave, play_channel, wave);/* to avoid gc problem */
185
+ return INT2FIX(play_channel);
102
186
  }
103
187
 
104
- static VALUE mix_playChannelTimed(VALUE mod,VALUE channel,VALUE wave,VALUE loops,
105
- VALUE ticks)
188
+ static VALUE Mixer_s_fadeInChannel(VALUE mod,
189
+ VALUE channel,
190
+ VALUE wave,
191
+ VALUE loops,
192
+ VALUE ms)
106
193
  {
107
- Mix_Chunk *chunk;
108
194
  int playing_channel;
109
195
 
110
- if( ! rb_obj_is_kind_of(wave,cWave) )
111
- rb_raise(rb_eArgError,"type mismatch: SDL::Mixer::Wave is expected");
112
- Data_Get_Struct(wave,Mix_Chunk,chunk);
113
-
114
- playing_channel = Mix_PlayChannelTimed(NUM2INT(channel),chunk,NUM2INT(loops),
115
- NUM2INT(ticks));
196
+ playing_channel = Mix_FadeInChannel(NUM2INT(channel),
197
+ Get_Mix_Chunk(wave),
198
+ NUM2INT(loops),
199
+ NUM2INT(ms));
116
200
  if( playing_channel == -1 ){
117
- rb_raise( eSDLError, "couldn't play wave: %s", Mix_GetError() );
201
+ rb_raise(eSDLError, "couldn't play wave: %s",
202
+ Mix_GetError());
118
203
  }
119
-
120
- rb_ary_store(playing_wave,playing_channel,wave);/* to avoid gc problem */
204
+ /* to avoid gc problem */
205
+ rb_ary_store(playing_wave, playing_channel, wave);
121
206
  return INT2FIX(playing_channel);
122
207
  }
123
208
 
124
- static VALUE mix_fadeInChannel(VALUE mod,VALUE channel,VALUE wave,VALUE loops,
125
- VALUE ms)
209
+ static VALUE Mixer_s_fadeInChannelTimed(VALUE mod,
210
+ VALUE channel,
211
+ VALUE wave,
212
+ VALUE loops,
213
+ VALUE ms, VALUE ticks)
126
214
  {
127
- Mix_Chunk *chunk;
128
215
  int playing_channel;
129
216
 
130
- if( ! rb_obj_is_kind_of(wave,cWave) )
131
- rb_raise(rb_eArgError,"type mismatch: SDL::Mixer::Wave is expected");
132
- Data_Get_Struct(wave,Mix_Chunk,chunk);
133
-
134
- playing_channel = Mix_FadeInChannel(NUM2INT(channel),chunk,NUM2INT(loops),
135
- NUM2INT(ms));
217
+ playing_channel = Mix_FadeInChannelTimed(NUM2INT(channel),
218
+ Get_Mix_Chunk(wave),
219
+ NUM2INT(loops),
220
+ NUM2INT(ms),
221
+ NUM2INT(ticks));
136
222
  if( playing_channel == -1 ){
137
- rb_raise( eSDLError, "couldn't play wave: %s", Mix_GetError() );
223
+ rb_raise(eSDLError, "couldn't play wave: %s",
224
+ Mix_GetError());
138
225
  }
139
-
140
- rb_ary_store(playing_wave,playing_channel,wave);/* to avoid gc problem */
226
+ /* to avoid gc problem */
227
+ rb_ary_store(playing_wave, playing_channel, wave);
141
228
  return INT2FIX(playing_channel);
142
229
  }
143
230
 
144
- static VALUE mix_fadeInChannelTimed(VALUE mod,VALUE channel,VALUE wave,VALUE loops,
145
- VALUE ms, VALUE ticks)
231
+ static VALUE Mixer_s_play_p(VALUE mod, VALUE channel)
146
232
  {
147
- Mix_Chunk *chunk;
148
- int playing_channel;
149
-
150
- if( ! rb_obj_is_kind_of(wave,cWave) )
151
- rb_raise(rb_eArgError,"type mismatch: SDL::Mixer::Wave is expected");
152
- Data_Get_Struct(wave,Mix_Chunk,chunk);
153
-
154
- playing_channel = Mix_FadeInChannelTimed(NUM2INT(channel),chunk,NUM2INT(loops),
155
- NUM2INT(ms), NUM2INT(ticks));
156
- if( playing_channel == -1 ){
157
- rb_raise( eSDLError, "couldn't play wave: %s", Mix_GetError() );
158
- }
233
+ return INT2BOOL(Mix_Playing(NUM2INT(channel)));
234
+ }
159
235
 
160
- rb_ary_store(playing_wave,playing_channel,wave);/* to avoid gc problem */
161
- return INT2FIX(playing_channel);
236
+ static VALUE Mixer_s_playing_channels(VALUE mod)
237
+ {
238
+ return INT2NUM(Mix_Playing(-1));
162
239
  }
163
240
 
164
- static VALUE mix_playing(VALUE mod,VALUE channel)
241
+ static VALUE Wave_s_load(VALUE class, VALUE filename)
165
242
  {
166
- if( Mix_Playing( NUM2INT(channel) ) ){
167
- return Qtrue;
168
- }else{
169
- return Qfalse;
243
+ Mix_Chunk *chunk;
244
+
245
+ rb_secure(4);
246
+ SafeStringValue(filename);
247
+
248
+ chunk = Mix_LoadWAV(RSTRING_PTR(filename));
249
+ if( chunk == NULL ){
250
+ rb_raise(eSDLError, "Couldn't load wave file %s: %s",
251
+ RSTRING_PTR(filename), SDL_GetError());
170
252
  }
253
+ return Wave_create(chunk);
171
254
  }
172
-
173
- static VALUE mix_loadWav(VALUE class,VALUE filename)
255
+
256
+ static VALUE Wave_s_loadFromIO(VALUE class, VALUE io)
174
257
  {
175
258
  Mix_Chunk *wave;
176
- Check_Type(filename,T_STRING);
177
- wave = Mix_LoadWAV( GETCSTR(filename) );
259
+ wave = Mix_LoadWAV_RW(rubysdl_RWops_from_ruby_obj(io), 1);
178
260
  if( wave == NULL ){
179
- rb_raise( eSDLError,"Couldn't load wave file %s: %s",
180
- GETCSTR(filename), Mix_GetError() );
261
+ rb_raise(eSDLError, "Couldn't load wave file from IO: %s",
262
+ Mix_GetError());
181
263
  }
182
- return Data_Wrap_Struct(class,0,mix_FreeChunk,wave);
264
+ return Wave_create(wave);
183
265
  }
184
266
 
185
- static VALUE mix_loadWavFromIO(VALUE class, VALUE io)
267
+ static VALUE Wave_s_loadFromString(VALUE class, VALUE str)
186
268
  {
187
269
  Mix_Chunk *wave;
188
- wave = Mix_LoadWAV_RW(rubysdl_RWops_from_ruby_obj(io), 1);
270
+ rb_secure(4);
271
+ SafeStringValue(str);
272
+
273
+ wave = Mix_LoadWAV_RW(SDL_RWFromConstMem(RSTRING_PTR(str),
274
+ RSTRING_LEN(str)),
275
+ 1);
189
276
  if( wave == NULL ){
190
- rb_raise(eSDLError,"Couldn't load wave file from IO: %s",
277
+ rb_raise(eSDLError, "Couldn't load wave file from String: %s",
191
278
  Mix_GetError());
192
279
  }
193
- return Data_Wrap_Struct(class,0,mix_FreeChunk,wave);
280
+ return Wave_create(wave);
194
281
  }
195
-
282
+
283
+
196
284
  /* Volume setting functions and methods : volume in 0..128 */
197
- static VALUE mix_volume(VALUE mod,VALUE channel,VALUE volume)
285
+ static VALUE Mixer_s_setVolume(VALUE mod, VALUE channel, VALUE volume)
198
286
  {
199
- return INT2FIX( Mix_Volume( NUM2INT(channel),NUM2INT(volume) ) );
287
+ rb_secure(4);
288
+ return INT2FIX(Mix_Volume(NUM2INT(channel), NUM2INT(volume)));
200
289
  }
201
- static VALUE mix_wave_volume(VALUE obj,VALUE volume)
290
+
291
+ static VALUE Wave_s_setVolume(VALUE self, VALUE volume)
202
292
  {
203
- Mix_Chunk *chunk;
204
- Data_Get_Struct(obj,Mix_Chunk,chunk);
205
- return INT2FIX( Mix_VolumeChunk( chunk,NUM2INT(volume) ) );
293
+ return INT2FIX(Mix_VolumeChunk(Get_Mix_Chunk(self), NUM2INT(volume)));
206
294
  }
207
295
 
208
296
  /* Halt,Pause function */
209
- static VALUE mix_halt(VALUE mod,VALUE channel)
297
+ static VALUE Mixer_s_halt(VALUE mod, VALUE channel)
210
298
  {
299
+ rb_secure(4);
211
300
  Mix_HaltChannel(NUM2INT(channel));
212
301
  return Qnil;
213
302
  }
214
- static VALUE mix_pause(VALUE mod,VALUE channel)
303
+
304
+ static VALUE Mixer_s_pause(VALUE mod, VALUE channel)
215
305
  {
306
+ rb_secure(4);
216
307
  Mix_Pause(NUM2INT(channel));
217
308
  return Qnil;
218
309
  }
219
- static VALUE mix_resume(VALUE mod,VALUE channel)
310
+
311
+ static VALUE Mixer_s_resume(VALUE mod, VALUE channel)
220
312
  {
313
+ rb_secure(4);
221
314
  Mix_Resume(NUM2INT(channel));
222
315
  return Qnil;
223
316
  }
224
- static VALUE mix_paused(VALUE mod,VALUE channel)
317
+
318
+ static VALUE Mixer_s_pause_p(VALUE mod, VALUE channel)
225
319
  {
320
+ rb_secure(4);
226
321
  return INT2FIX(Mix_Paused(NUM2INT(channel)));
227
322
  }
228
- static VALUE mix_fadeOut(VALUE mod,VALUE channel,VALUE ms)
323
+ static VALUE Mixer_s_fadeOut(VALUE mod, VALUE channel, VALUE ms)
229
324
  {
230
325
  return INT2FIX(Mix_FadeOutChannel(NUM2INT(channel), NUM2INT(ms)));
231
326
  }
232
- static VALUE mix_expire(VALUE mod, VALUE channel, VALUE ticks)
327
+ static VALUE Mixer_s_expire(VALUE mod, VALUE channel, VALUE ticks)
233
328
  {
234
329
  return INT2FIX(Mix_ExpireChannel(NUM2INT(channel),NUM2INT(ticks)));
235
330
  }
236
- static VALUE mix_fading(VALUE mod, VALUE which)
331
+ static VALUE Mixer_s_fading(VALUE mod, VALUE which)
237
332
  {
238
333
  if( NUM2INT(which) < 0 || Mix_AllocateChannels(-1) <= NUM2INT(which))
239
334
  rb_raise(eSDLError, "channel %d out of range", NUM2INT(which));
240
- return INT2FIX(Mix_FadingChannel(which));
335
+ return INT2FIX(Mix_FadingChannel(NUM2INT(which)));
241
336
  }
242
337
 
243
338
  /* music functions */
244
- #define MakeSimpleRubyFunc(rubyFunc,sdlFunc) \
339
+ #define MakeSimpleRubyFunc(rubyFunc, sdlFunc) \
245
340
  static VALUE rubyFunc(VALUE mod) \
246
341
  { \
342
+ rb_secure(4); \
247
343
  sdlFunc(); \
248
344
  return Qnil; \
249
345
  } \
250
346
 
251
- static VALUE mix_playMusic(VALUE mod,VALUE music,VALUE loops)
347
+ static VALUE Mixer_s_playMusic(VALUE mod, VALUE music, VALUE loops)
252
348
  {
253
- Mix_Music *mus;
254
- if( ! rb_obj_is_kind_of(music,cMusic) )
255
- rb_raise(rb_eArgError,"type mismatch: SDL::Mixer::Music is expected");
256
- Data_Get_Struct(music,Mix_Music,mus);
257
- playing_music=music; /* to avoid gc problem */
258
- Mix_PlayMusic(mus,NUM2INT(loops));
349
+ rb_secure(4);
350
+
351
+ Mix_PlayMusic(Get_Mix_Music(music), NUM2INT(loops));
352
+ playing_music = music; /* to avoid gc problem */
259
353
  return Qnil;
260
354
  }
261
355
 
262
- static VALUE mix_fadeInMusic(VALUE mod,VALUE music,VALUE loops,VALUE ms)
356
+ static VALUE Mixer_s_fadeInMusic(VALUE mod, VALUE music, VALUE loops, VALUE ms)
263
357
  {
264
- Mix_Music *mus;
265
- if( ! rb_obj_is_kind_of(music,cMusic) )
266
- rb_raise(rb_eArgError,"type mismatch: SDL::Mixer::Music is expected");
267
- Data_Get_Struct(music,Mix_Music,mus);
268
- Mix_FadeInMusic(mus,NUM2INT(loops),NUM2INT(ms));
358
+ rb_secure(4);
359
+ Mix_FadeInMusic(Get_Mix_Music(music), NUM2INT(loops), NUM2INT(ms));
360
+ playing_music = music; /* to avoid gc problem */
269
361
  return Qnil;
270
362
  }
271
363
 
272
- static VALUE mix_setVolumeMusic(VALUE mod,VALUE volume)
364
+ static VALUE Mixer_s_setVolumeMusic(VALUE mod, VALUE volume)
273
365
  {
366
+ rb_secure(4);
274
367
  Mix_VolumeMusic( NUM2INT(volume) );
275
368
  return Qnil;
276
369
  }
277
370
 
278
- static VALUE mix_fadeOutMusic(VALUE mod,VALUE ms)
371
+ static VALUE Mixer_s_fadeOutMusic(VALUE mod, VALUE ms)
279
372
  {
373
+ rb_secure(4);
280
374
  Mix_FadeOutMusic(NUM2INT(ms));
281
375
  return Qnil;
282
376
  }
283
377
 
284
- MakeSimpleRubyFunc(mix_haltMusic,Mix_HaltMusic)
285
- MakeSimpleRubyFunc(mix_pauseMusic,Mix_PauseMusic)
286
- MakeSimpleRubyFunc(mix_resumeMusic,Mix_ResumeMusic)
287
- MakeSimpleRubyFunc(mix_rewindMusic,Mix_RewindMusic)
378
+ MakeSimpleRubyFunc(Mixer_s_haltMusic, Mix_HaltMusic)
379
+ MakeSimpleRubyFunc(Mixer_s_pauseMusic, Mix_PauseMusic)
380
+ MakeSimpleRubyFunc(Mixer_s_resumeMusic, Mix_ResumeMusic)
381
+ MakeSimpleRubyFunc(Mixer_s_rewindMusic, Mix_RewindMusic)
288
382
 
289
- static VALUE mix_pausedMusic(VALUE mod)
383
+ static VALUE Mixer_s_pauseMusic_p(VALUE mod)
290
384
  {
291
- return BOOL(Mix_PausedMusic());
385
+ return INT2BOOL(Mix_PausedMusic());
292
386
  }
293
387
 
294
- static VALUE mix_playingMusic(VALUE mod)
388
+ static VALUE Mixer_s_playMusic_p(VALUE mod)
295
389
  {
296
- return BOOL(Mix_PlayingMusic());
390
+ return INT2BOOL(Mix_PlayingMusic());
297
391
  }
298
392
 
299
- static VALUE mix_fadingMusic(VALUE mod)
393
+ static VALUE Mixer_s_fadingMusic(VALUE mod)
300
394
  {
301
395
  return INT2FIX(Mix_FadingMusic());
302
396
  }
303
397
 
304
- static VALUE mix_loadMus(VALUE class,VALUE filename)
398
+ static VALUE Music_s_load(VALUE class, VALUE filename)
305
399
  {
306
400
  Mix_Music* music;
307
- music = Mix_LoadMUS(GETCSTR(filename));
401
+
402
+ rb_secure(4);
403
+ SafeStringValue(filename);
404
+
405
+ music = Mix_LoadMUS(RSTRING_PTR(filename));
308
406
  if( music == NULL )
309
- rb_raise(eSDLError,
310
- "Couldn't load %s: %s",GETCSTR(filename),SDL_GetError());
311
- return Data_Wrap_Struct(class,0,mix_FreeMusic,music);
407
+ rb_raise(eSDLError,
408
+ "Couldn't load %s: %s", RSTRING_PTR(filename),
409
+ SDL_GetError());
410
+ return Music_create(music);
312
411
  }
313
412
 
314
413
  #ifdef HAVE_MIX_LOADMUS_RW
315
- static VALUE mix_loadMusFromString(VALUE class,VALUE str)
414
+ static VALUE Mixer_s_loadMusFromString(VALUE class, VALUE str)
316
415
  {
317
416
  Mix_Music* music;
318
417
  volatile VALUE result;
@@ -320,103 +419,129 @@ static VALUE mix_loadMusFromString(VALUE class,VALUE str)
320
419
 
321
420
  StringValue(str);
322
421
  buf = rb_str_dup(str);
323
- music = Mix_LoadMUS_RW(SDL_RWFromConstMem(RSTRING(buf)->ptr,
324
- RSTRING(buf)->len));
422
+ music = Mix_LoadMUS_RW(SDL_RWFromConstMem(RSTRING_PTR(buf),
423
+ RSTRING_LEN(buf)));
325
424
 
326
425
  if( music == NULL )
327
426
  rb_raise(eSDLError,
328
427
  "Couldn't load from String: %s",Mix_GetError());
329
428
 
330
- result = Data_Wrap_Struct(class,0,mix_FreeMusic,music);
429
+ result = Music_create(music);
331
430
  rb_iv_set(result, "buf", buf);
332
431
 
333
432
  return result;
334
433
  }
335
434
  #endif
336
435
 
337
- static void defineConstForAudio()
338
- {
339
- rb_define_const(mMixer,"FORMAT_U8",UINT2NUM(AUDIO_U8));
340
- rb_define_const(mMixer,"FORMAT_S8",UINT2NUM(AUDIO_S8));
341
- rb_define_const(mMixer,"FORMAT_U16LSB",UINT2NUM(AUDIO_U16LSB));
342
- rb_define_const(mMixer,"FORMAT_S16LSB",UINT2NUM(AUDIO_S16LSB));
343
- rb_define_const(mMixer,"FORMAT_U16MSB",UINT2NUM(AUDIO_U16MSB));
344
- rb_define_const(mMixer,"FORMAT_S16MSB",UINT2NUM(AUDIO_S16MSB));
345
- rb_define_const(mMixer,"FORMAT_U16",UINT2NUM(AUDIO_U16));
346
- rb_define_const(mMixer,"FORMAT_S16",UINT2NUM(AUDIO_S16));
347
-
348
- rb_define_const(mMixer,"FORMAT_U16SYS",UINT2NUM(AUDIO_U16SYS));
349
- rb_define_const(mMixer,"FORMAT_S16SYS",UINT2NUM(AUDIO_S16SYS));
350
-
351
- rb_define_const(mMixer,"CHANNELS",INT2NUM(MIX_CHANNELS));
352
- rb_define_const(mMixer,"DEFAULT_FREQUENCY",INT2NUM(MIX_DEFAULT_FREQUENCY));
353
- rb_define_const(mMixer,"DEFAULT_FORMAT",UINT2NUM(MIX_DEFAULT_FORMAT));
354
- rb_define_const(mMixer,"DEFAULT_CHANNELS",UINT2NUM(MIX_DEFAULT_CHANNELS));
355
- rb_define_const(mMixer,"MAX_VOLUME",INT2NUM(MIX_MAX_VOLUME));
356
-
357
- rb_define_const(mMixer,"NO_FADING", INT2NUM(MIX_NO_FADING));
358
- rb_define_const(mMixer,"FADING_OUT", INT2NUM(MIX_FADING_OUT));
359
- rb_define_const(mMixer,"FADING_IN", INT2NUM(MIX_FADING_IN));
360
- }
361
-
362
- void init_mixer()
363
- {
364
- mMixer = rb_define_module_under(mSDL,"Mixer");
365
- rb_define_module_function(mMixer,"open",mix_openAudio,4);
366
- rb_define_module_function(mMixer,"spec",mix_querySpec,0);
367
- rb_define_module_function(mMixer,"driverName", mix_audioDriverName, 0);
368
- rb_define_module_function(mMixer,"playChannel",mix_playChannel,3);
369
- rb_define_module_function(mMixer,"playChannelTimed", mix_playChannelTimed, 4);
370
- rb_define_module_function(mMixer,"fadeInChannel", mix_fadeInChannel, 4);
371
- rb_define_module_function(mMixer,"fadeInChannelTimed", mix_fadeInChannelTimed, 5);
372
- rb_define_module_function(mMixer,"play?",mix_playing,1);
373
- rb_define_module_function(mMixer,"setVolume",mix_volume,2);
374
- rb_define_module_function(mMixer,"allocateChannels",mix_allocateChannels,1);
375
- rb_define_module_function(mMixer,"halt",mix_halt,1);
376
- rb_define_module_function(mMixer,"pause",mix_pause,1);
377
- rb_define_module_function(mMixer,"resume",mix_resume,1);
378
- rb_define_module_function(mMixer,"pause?",mix_paused,1);
379
- rb_define_module_function(mMixer,"expire",mix_expire,2);
380
- rb_define_module_function(mMixer,"fading",mix_fading,1);
381
- rb_define_module_function(mMixer,"fadeOut",mix_fadeOut,2);
436
+ static VALUE Wave_destroy(VALUE self)
437
+ {
438
+ Wave* wave = GetWave(self);
439
+ if (wave->chunk) {
440
+ Mix_FreeChunk(wave->chunk);
441
+ wave->chunk = NULL;
442
+ }
443
+ return Qnil;
444
+ }
445
+
446
+ static VALUE Music_destroy(VALUE self)
447
+ {
448
+ Music* mus = GetMusic(self);
449
+ if (mus->music) {
450
+ Mix_FreeMusic(mus->music);
451
+ mus->music = NULL;
452
+ }
453
+ return Qnil;
454
+ }
455
+
456
+ void rubysdl_init_Mixer(VALUE mSDL)
457
+ {
458
+ mMixer = rb_define_module_under(mSDL, "Mixer");
459
+ rb_define_module_function(mMixer, "open", Mixer_s_open, 4);
460
+ rb_define_module_function(mMixer, "close", Mixer_s_close, 0);
461
+ rb_define_module_function(mMixer, "spec", Mixer_s_spec, 0);
462
+ rb_define_module_function(mMixer, "driverName", Mixer_s_driverName, 0);
463
+ rb_define_module_function(mMixer, "playChannel", Mixer_s_playChannel, 3);
464
+ rb_define_module_function(mMixer, "playChannelTimed", Mixer_s_playChannelTimed, 4);
465
+ rb_define_module_function(mMixer, "fadeInChannel", Mixer_s_playChannel, 4);
466
+ rb_define_module_function(mMixer, "fadeInChannelTimed", Mixer_s_fadeInChannelTimed, 5);
382
467
 
383
- rb_define_module_function(mMixer,"playMusic",mix_playMusic,2);
384
- rb_define_module_function(mMixer,"fadeInMusic",mix_fadeInMusic,3);
385
- rb_define_module_function(mMixer,"setVolumeMusic",mix_setVolumeMusic,1);
386
- rb_define_module_function(mMixer,"haltMusic",mix_haltMusic,0);
387
- rb_define_module_function(mMixer,"fadeOutMusic",mix_fadeOutMusic,1);
388
- rb_define_module_function(mMixer,"pauseMusic",mix_pauseMusic,0);
389
- rb_define_module_function(mMixer,"resumeMusic",mix_resumeMusic,0);
390
- rb_define_module_function(mMixer,"rewindMusic",mix_rewindMusic,0);
391
- rb_define_module_function(mMixer,"pauseMusic?",mix_pausedMusic,0);
392
- rb_define_module_function(mMixer,"playMusic?",mix_playingMusic,0);
393
- rb_define_module_function(mMixer,"fadingMusic",mix_fadingMusic,0);
468
+ rb_define_module_function(mMixer, "play?", Mixer_s_play_p, 1);
469
+ rb_define_module_function(mMixer, "playingChannels", Mixer_s_playing_channels, 0);
470
+ rb_define_module_function(mMixer, "setVolume", Mixer_s_setVolume, 2);
471
+ rb_define_module_function(mMixer, "allocateChannels", Mixer_s_allocateChannels, 1);
394
472
 
395
- cWave = rb_define_class_under(mMixer,"Wave",rb_cObject);
396
- rb_define_singleton_method(cWave,"load",mix_loadWav,1);
397
- rb_define_singleton_method(cWave,"loadFromIO",mix_loadWavFromIO,1);
398
- rb_define_method(cWave,"setVolume",mix_wave_volume,1);
399
-
400
- cMusic = rb_define_class_under(mMixer,"Music",rb_cObject);
401
- rb_define_singleton_method(cMusic,"load",mix_loadMus,1);
473
+ rb_define_module_function(mMixer, "halt", Mixer_s_halt, 1);
474
+ rb_define_module_function(mMixer, "pause", Mixer_s_pause, 1);
475
+ rb_define_module_function(mMixer, "resume", Mixer_s_resume, 1);
476
+ rb_define_module_function(mMixer, "pause?", Mixer_s_pause_p, 1);
477
+ rb_define_module_function(mMixer, "expire", Mixer_s_expire, 2);
478
+ rb_define_module_function(mMixer, "fading", Mixer_s_fading, 1);
479
+ rb_define_module_function(mMixer, "fadeOut", Mixer_s_fadeOut, 2);
480
+
481
+ rb_define_module_function(mMixer, "playMusic", Mixer_s_playMusic, 2);
482
+ rb_define_module_function(mMixer, "fadeInMusic", Mixer_s_fadeInMusic, 3);
483
+ rb_define_module_function(mMixer, "setVolumeMusic", Mixer_s_setVolumeMusic, 1);
484
+ rb_define_module_function(mMixer, "haltMusic", Mixer_s_haltMusic, 0);
485
+ rb_define_module_function(mMixer, "fadeOutMusic", Mixer_s_fadeOutMusic, 1);
486
+ rb_define_module_function(mMixer, "pauseMusic", Mixer_s_pauseMusic, 0);
487
+ rb_define_module_function(mMixer, "resumeMusic", Mixer_s_resumeMusic, 0);
488
+ rb_define_module_function(mMixer, "rewindMusic", Mixer_s_rewindMusic, 0);
489
+ rb_define_module_function(mMixer, "pauseMusic?", Mixer_s_pauseMusic_p, 0);
490
+ rb_define_module_function(mMixer, "playMusic?", Mixer_s_playMusic_p, 0);
491
+ rb_define_module_function(mMixer, "fadingMusic", Mixer_s_fadingMusic, 0);
492
+
493
+ cWave = rb_define_class_under(mMixer, "Wave", rb_cObject);
494
+ rb_define_singleton_method(cWave, "load", Wave_s_load, 1);
495
+ rb_define_singleton_method(cWave, "loadFromIO", Wave_s_loadFromIO,1);
496
+ rb_define_singleton_method(cWave, "loadFromString", Wave_s_loadFromString,1);
497
+ rb_define_method(cWave, "setVolume", Wave_s_setVolume, 1);
498
+
499
+ cMusic = rb_define_class_under(mMixer, "Music", rb_cObject);
500
+ rb_define_singleton_method(cMusic, "load", Music_s_load, 1);
402
501
  #ifdef HAVE_MIX_LOADMUS_RW
403
- rb_define_singleton_method(cMusic,"loadFromString",mix_loadMusFromString,1);
502
+ rb_define_singleton_method(cMusic, "loadFromString",
503
+ Mixer_s_loadMusFromString,1);
404
504
  #endif
405
-
505
+ rb_define_method(cWave, "destroy", Wave_destroy, 0);
506
+ rb_define_method(cMusic, "destroy", Music_destroy, 0);
507
+
406
508
  /* to avoid to do garbage collect when playing */
407
- playing_wave = rb_ary_new();
408
509
  rb_global_variable( &playing_wave );
409
510
  rb_global_variable( &playing_music );
511
+ playing_wave = rb_ary_new();
512
+
513
+ rb_define_const(mMixer, "FORMAT_U8", UINT2NUM(AUDIO_U8));
514
+ rb_define_const(mMixer, "FORMAT_S8", UINT2NUM(AUDIO_S8));
515
+ rb_define_const(mMixer, "FORMAT_U16LSB", UINT2NUM(AUDIO_U16LSB));
516
+ rb_define_const(mMixer, "FORMAT_S16LSB", UINT2NUM(AUDIO_S16LSB));
517
+ rb_define_const(mMixer, "FORMAT_U16MSB", UINT2NUM(AUDIO_U16MSB));
518
+ rb_define_const(mMixer, "FORMAT_S16MSB", UINT2NUM(AUDIO_S16MSB));
519
+ rb_define_const(mMixer, "FORMAT_U16", UINT2NUM(AUDIO_U16));
520
+ rb_define_const(mMixer, "FORMAT_S16", UINT2NUM(AUDIO_S16));
410
521
 
411
- defineConstForAudio();
412
- return ;
522
+ rb_define_const(mMixer, "FORMAT_U16SYS", UINT2NUM(AUDIO_U16SYS));
523
+ rb_define_const(mMixer, "FORMAT_S16SYS", UINT2NUM(AUDIO_S16SYS));
524
+
525
+ rb_define_const(mMixer, "CHANNELS", INT2NUM(MIX_CHANNELS));
526
+ rb_define_const(mMixer, "DEFAULT_FREQUENCY", INT2NUM(MIX_DEFAULT_FREQUENCY));
527
+ rb_define_const(mMixer, "DEFAULT_FORMAT", UINT2NUM(MIX_DEFAULT_FORMAT));
528
+ rb_define_const(mMixer, "DEFAULT_CHANNELS", UINT2NUM(MIX_DEFAULT_CHANNELS));
529
+ rb_define_const(mMixer, "MAX_VOLUME", INT2NUM(MIX_MAX_VOLUME));
530
+
531
+ return;
413
532
  }
414
533
 
415
- void quit_mixer()
534
+ void rubysdl_quit_Mixer(void)
416
535
  {
417
- if( mix_opened ){
536
+ if(Mix_opened()){
418
537
  Mix_CloseAudio();
419
- mix_closed = 1;
420
538
  }
421
539
  }
540
+ #else /* HAVE_SDL_MIXER */
541
+ void rubysdl_init_Mixer(VALUE mSDL)
542
+ {
543
+ }
544
+ void rubysdl_quit_Mixer(void)
545
+ {
546
+ }
422
547
  #endif /* HAVE_SDL_MIXER */