|
6 | 6 | #include "moon/audio/libsoundio/sound.hxx" |
7 | 7 | #include "moon/api.h" |
8 | 8 | #include "moon/intern.h" |
| 9 | +#include "moon/mrb/helpers.hxx" |
| 10 | + |
| 11 | +static void |
| 12 | +sound_free(mrb_state* mrb, void *p) |
| 13 | +{ |
| 14 | + Moon::Sound *sound = static_cast<Moon::Sound*>(p); |
| 15 | + if (sound) { |
| 16 | + delete(sound); |
| 17 | + } |
| 18 | +} |
| 19 | + |
| 20 | +MOON_C_API const struct mrb_data_type sound_data_type = { "Moon::Sound", sound_free }; |
| 21 | + |
| 22 | +static mrb_value |
| 23 | +sound_initialize(mrb_state* mrb, mrb_value self) |
| 24 | +{ |
| 25 | + char* filename; |
| 26 | + mrb_get_args(mrb, "z", &filename); |
| 27 | + moon_data_cleanup(mrb, self); |
| 28 | + Moon::Sound* sound = new Moon::Sound(std::string(filename)); |
| 29 | + mrb_data_init(self, sound, &sound_data_type); |
| 30 | + return self; |
| 31 | +} |
| 32 | + |
| 33 | +static mrb_value |
| 34 | +sound_play(mrb_state* mrb, mrb_value self) |
| 35 | +{ |
| 36 | + mrb_float gain = 1.0; |
| 37 | + mrb_float pitch = 1.0; |
| 38 | + mrb_float pan = 0.0; |
| 39 | + mrb_get_args(mrb, "|fff", &gain, &pitch, &pan); |
| 40 | + // TODO |
| 41 | + return self; |
| 42 | +} |
9 | 43 |
|
10 | 44 | MOON_C_API void |
11 | | -mmrb_sound_init(mrb_state *mrb, struct RClass *mod) |
| 45 | +mmrb_sound_init(mrb_state* mrb, struct RClass *mod) |
12 | 46 | { |
| 47 | + struct RClass *sound_class = mrb_define_class_under(mrb, mod, "Sound", mrb->object_class); |
| 48 | + MRB_SET_INSTANCE_TT(sound_class, MRB_TT_DATA); |
| 49 | + |
| 50 | + mrb_define_method(mrb, sound_class, "initialize", sound_initialize, MRB_ARGS_REQ(1)); |
| 51 | + mrb_define_method(mrb, sound_class, "play", sound_play, MRB_ARGS_OPT(3)); |
13 | 52 | } |
0 commit comments