reflexion 0.3.8.1 → 0.3.9
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.
- checksums.yaml +4 -4
- data/.doc/ext/reflex/control_change_event.cpp +101 -0
- data/.doc/ext/reflex/midi.cpp +16 -0
- data/.doc/ext/reflex/midi_event.cpp +124 -0
- data/.doc/ext/reflex/native.cpp +4 -0
- data/.doc/ext/reflex/view.cpp +41 -1
- data/.doc/ext/reflex/window.cpp +16 -0
- data/ChangeLog.md +7 -0
- data/VERSION +1 -1
- data/ext/reflex/control_change_event.cpp +108 -0
- data/ext/reflex/midi.cpp +21 -3
- data/ext/reflex/midi_event.cpp +132 -0
- data/ext/reflex/native.cpp +4 -0
- data/ext/reflex/view.cpp +49 -4
- data/ext/reflex/window.cpp +22 -4
- data/include/reflex/event.h +89 -0
- data/include/reflex/midi.h +4 -0
- data/include/reflex/ruby/event.h +22 -0
- data/include/reflex/ruby/midi.h +19 -0
- data/include/reflex/ruby/view.h +45 -0
- data/include/reflex/ruby/window.h +18 -0
- data/include/reflex/view.h +6 -2
- data/include/reflex/window.h +4 -0
- data/lib/reflex/midi_event.rb +68 -0
- data/lib/reflex/view.rb +2 -2
- data/lib/reflex.rb +1 -0
- data/reflex.gemspec +3 -3
- data/src/event.cpp +189 -0
- data/src/event.h +11 -0
- data/src/midi.cpp +67 -59
- data/src/view.cpp +38 -0
- data/src/view.h +9 -5
- data/src/window.cpp +81 -6
- data/src/window.h +1 -1
- data/test/test_capture_event.rb +8 -8
- data/test/test_midi_event.rb +93 -0
- data/test/test_view.rb +13 -13
- metadata +23 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: acfb751a36e79b634057dfb05f148c4f079ebef32b4e3bacdedb90ce1eed3ae2
|
4
|
+
data.tar.gz: 523645a844af1565fdc07e9858188cb97400ae6886c2c948b10a6946838f3e3b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 10fb64e33a6332c6c083e8f1e2a9b902e475e86574cc7371b45b9a768c58a05c58c9caba69256c11be9d453e5b0811409c01484f9bc54f8834a0d1a5ba88b131
|
7
|
+
data.tar.gz: 8d2bed2ea3d72b67132e828687b139012739295192ec1b23d318d12bf7ee0b5a7e803a55c2b95fa2dcd105781c7a6ddfeabe59d4d701fb0b32edf3f725e6869d
|
@@ -0,0 +1,101 @@
|
|
1
|
+
#include "reflex/ruby/event.h"
|
2
|
+
|
3
|
+
|
4
|
+
#include "defs.h"
|
5
|
+
|
6
|
+
|
7
|
+
RUCY_DEFINE_VALUE_FROM_TO(REFLEX_EXPORT, Reflex::ControlChangeEvent)
|
8
|
+
|
9
|
+
#define THIS to<Reflex::ControlChangeEvent*>(self)
|
10
|
+
|
11
|
+
#define CHECK RUCY_CHECK_OBJ(Reflex::ControlChangeEvent, self)
|
12
|
+
|
13
|
+
|
14
|
+
static
|
15
|
+
VALUE alloc(VALUE klass)
|
16
|
+
{
|
17
|
+
return new_type<Reflex::ControlChangeEvent>(klass);
|
18
|
+
}
|
19
|
+
|
20
|
+
static
|
21
|
+
VALUE initialize(VALUE self, VALUE channel, VALUE controller, VALUE value, VALUE time)
|
22
|
+
{
|
23
|
+
CHECK;
|
24
|
+
|
25
|
+
*THIS = Reflex::ControlChangeEvent(
|
26
|
+
to<int>(channel),
|
27
|
+
to<int>(controller),
|
28
|
+
to<float>(value),
|
29
|
+
to<double>(time));
|
30
|
+
|
31
|
+
return rb_call_super(0, NULL);
|
32
|
+
}
|
33
|
+
|
34
|
+
static
|
35
|
+
VALUE initialize_copy(VALUE self, VALUE obj)
|
36
|
+
{
|
37
|
+
CHECK;
|
38
|
+
*THIS = to<Reflex::ControlChangeEvent&>(obj).dup();
|
39
|
+
return self;
|
40
|
+
}
|
41
|
+
|
42
|
+
static
|
43
|
+
VALUE get_channel(VALUE self)
|
44
|
+
{
|
45
|
+
CHECK;
|
46
|
+
return value(THIS->channel());
|
47
|
+
}
|
48
|
+
|
49
|
+
static
|
50
|
+
VALUE get_controller(VALUE self)
|
51
|
+
{
|
52
|
+
CHECK;
|
53
|
+
return value(THIS->controller());
|
54
|
+
}
|
55
|
+
|
56
|
+
static
|
57
|
+
VALUE get_value(VALUE self)
|
58
|
+
{
|
59
|
+
CHECK;
|
60
|
+
return value(THIS->value());
|
61
|
+
}
|
62
|
+
|
63
|
+
static
|
64
|
+
VALUE is_captured(VALUE self)
|
65
|
+
{
|
66
|
+
CHECK;
|
67
|
+
return value(THIS->is_captured());
|
68
|
+
}
|
69
|
+
|
70
|
+
|
71
|
+
static Class cControlChangeEvent;
|
72
|
+
|
73
|
+
void
|
74
|
+
Init_reflex_control_change_event ()
|
75
|
+
{
|
76
|
+
Module mReflex = rb_define_module("Reflex");
|
77
|
+
|
78
|
+
cControlChangeEvent =
|
79
|
+
mReflex.define_class("ControlChangeEvent", Reflex::event_class());
|
80
|
+
rb_define_alloc_func(cControlChangeEvent, alloc);
|
81
|
+
rb_define_private_method(cControlChangeEvent, "initialize", RUBY_METHOD_FUNC(initialize), 4);
|
82
|
+
rb_define_private_method(cControlChangeEvent, "initialize_copy", RUBY_METHOD_FUNC(initialize_copy), 1);
|
83
|
+
rb_define_method(cControlChangeEvent, "channel", RUBY_METHOD_FUNC(get_channel), 0);
|
84
|
+
rb_define_method(cControlChangeEvent, "controller", RUBY_METHOD_FUNC(get_controller), 0);
|
85
|
+
rb_define_method(cControlChangeEvent, "value", RUBY_METHOD_FUNC(get_value), 0);
|
86
|
+
cControlChangeEvent.define_method("captured?", is_captured);
|
87
|
+
}
|
88
|
+
|
89
|
+
|
90
|
+
namespace Reflex
|
91
|
+
{
|
92
|
+
|
93
|
+
|
94
|
+
Class
|
95
|
+
control_change_event_class ()
|
96
|
+
{
|
97
|
+
return cControlChangeEvent;
|
98
|
+
}
|
99
|
+
|
100
|
+
|
101
|
+
}// Reflex
|
data/.doc/ext/reflex/midi.cpp
CHANGED
@@ -21,6 +21,13 @@ VALUE alloc(VALUE klass)
|
|
21
21
|
Reflex::reflex_error(__FILE__, __LINE__, "can not instantiate MIDI class.");
|
22
22
|
}
|
23
23
|
|
24
|
+
static
|
25
|
+
VALUE on_midi(VALUE self, VALUE event)
|
26
|
+
{
|
27
|
+
CHECK;
|
28
|
+
CALL(on_midi(to<Reflex::MIDIEvent*>(event)));
|
29
|
+
}
|
30
|
+
|
24
31
|
static
|
25
32
|
VALUE on_note(VALUE self, VALUE event)
|
26
33
|
{
|
@@ -42,6 +49,13 @@ VALUE on_note_off(VALUE self, VALUE event)
|
|
42
49
|
CALL(on_note_off(to<Reflex::NoteEvent*>(event)));
|
43
50
|
}
|
44
51
|
|
52
|
+
static
|
53
|
+
VALUE on_control_change(VALUE self, VALUE event)
|
54
|
+
{
|
55
|
+
CHECK;
|
56
|
+
CALL(on_control_change(to<Reflex::ControlChangeEvent*>(event)));
|
57
|
+
}
|
58
|
+
|
45
59
|
static
|
46
60
|
VALUE s_get_all(VALUE self)
|
47
61
|
{
|
@@ -60,9 +74,11 @@ Init_reflex_midi ()
|
|
60
74
|
|
61
75
|
cMIDI = mReflex.define_class("MIDI", Reflex::device_class());
|
62
76
|
rb_define_alloc_func(cMIDI, alloc);
|
77
|
+
rb_define_method(cMIDI, "on_midi", RUBY_METHOD_FUNC(on_midi), 1);
|
63
78
|
rb_define_method(cMIDI, "on_note", RUBY_METHOD_FUNC(on_note), 1);
|
64
79
|
rb_define_method(cMIDI, "on_note_on", RUBY_METHOD_FUNC(on_note_on), 1);
|
65
80
|
rb_define_method(cMIDI, "on_note_off", RUBY_METHOD_FUNC(on_note_off), 1);
|
81
|
+
rb_define_method(cMIDI, "on_control_change", RUBY_METHOD_FUNC(on_control_change), 1);
|
66
82
|
|
67
83
|
rb_define_singleton_method(cMIDI, "all", RUBY_METHOD_FUNC(s_get_all), 0);
|
68
84
|
}
|
@@ -0,0 +1,124 @@
|
|
1
|
+
#include "reflex/ruby/event.h"
|
2
|
+
|
3
|
+
|
4
|
+
#include "reflex/ruby/midi.h"
|
5
|
+
#include "defs.h"
|
6
|
+
|
7
|
+
|
8
|
+
RUCY_DEFINE_VALUE_FROM_TO(REFLEX_EXPORT, Reflex::MIDIEvent)
|
9
|
+
|
10
|
+
#define THIS to<Reflex::MIDIEvent*>(self)
|
11
|
+
|
12
|
+
#define CHECK RUCY_CHECK_OBJ(Reflex::MIDIEvent, self)
|
13
|
+
|
14
|
+
|
15
|
+
static
|
16
|
+
VALUE alloc(VALUE klass)
|
17
|
+
{
|
18
|
+
return new_type<Reflex::MIDIEvent>(klass);
|
19
|
+
}
|
20
|
+
|
21
|
+
static
|
22
|
+
VALUE initialize(VALUE self, VALUE midi, VALUE byte0, VALUE byte1, VALUE byte2, VALUE time)
|
23
|
+
{
|
24
|
+
CHECK;
|
25
|
+
|
26
|
+
uchar bytes[3] =
|
27
|
+
{
|
28
|
+
to<uchar>(byte0),
|
29
|
+
to<uchar>(byte1),
|
30
|
+
to<uchar>(byte2)
|
31
|
+
};
|
32
|
+
*THIS = Reflex::MIDIEvent(
|
33
|
+
midi ? to<Reflex::MIDI*>(midi) : NULL,
|
34
|
+
bytes,
|
35
|
+
to<double>(time));
|
36
|
+
|
37
|
+
return rb_call_super(0, NULL);
|
38
|
+
}
|
39
|
+
|
40
|
+
static
|
41
|
+
VALUE initialize_copy(VALUE self, VALUE obj)
|
42
|
+
{
|
43
|
+
CHECK;
|
44
|
+
*THIS = to<Reflex::MIDIEvent&>(obj).dup();
|
45
|
+
return self;
|
46
|
+
}
|
47
|
+
|
48
|
+
static
|
49
|
+
VALUE get_action(VALUE self)
|
50
|
+
{
|
51
|
+
CHECK;
|
52
|
+
return value(THIS->action());
|
53
|
+
}
|
54
|
+
|
55
|
+
static
|
56
|
+
VALUE get_channel(VALUE self)
|
57
|
+
{
|
58
|
+
CHECK;
|
59
|
+
return value(THIS->channel());
|
60
|
+
}
|
61
|
+
|
62
|
+
static
|
63
|
+
VALUE get_data1(VALUE self)
|
64
|
+
{
|
65
|
+
CHECK;
|
66
|
+
return value(THIS->data1());
|
67
|
+
}
|
68
|
+
|
69
|
+
static
|
70
|
+
VALUE get_data2(VALUE self)
|
71
|
+
{
|
72
|
+
CHECK;
|
73
|
+
return value(THIS->data2());
|
74
|
+
}
|
75
|
+
|
76
|
+
static
|
77
|
+
VALUE is_captured(VALUE self)
|
78
|
+
{
|
79
|
+
CHECK;
|
80
|
+
return value(THIS->is_captured());
|
81
|
+
}
|
82
|
+
|
83
|
+
|
84
|
+
static Class cMIDIEvent;
|
85
|
+
|
86
|
+
void
|
87
|
+
Init_reflex_midi_event ()
|
88
|
+
{
|
89
|
+
Module mReflex = rb_define_module("Reflex");
|
90
|
+
|
91
|
+
cMIDIEvent = mReflex.define_class("MIDIEvent", Reflex::event_class());
|
92
|
+
rb_define_alloc_func(cMIDIEvent, alloc);
|
93
|
+
rb_define_private_method(cMIDIEvent, "initialize", RUBY_METHOD_FUNC(initialize), 5);
|
94
|
+
rb_define_private_method(cMIDIEvent, "initialize_copy", RUBY_METHOD_FUNC(initialize_copy), 1);
|
95
|
+
rb_define_method(cMIDIEvent, "action", RUBY_METHOD_FUNC(get_action), 0);
|
96
|
+
rb_define_method(cMIDIEvent, "channel", RUBY_METHOD_FUNC(get_channel), 0);
|
97
|
+
rb_define_method(cMIDIEvent, "data1", RUBY_METHOD_FUNC(get_data1), 0);
|
98
|
+
rb_define_method(cMIDIEvent, "data2", RUBY_METHOD_FUNC(get_data2), 0);
|
99
|
+
cMIDIEvent.define_method("captured?", is_captured);
|
100
|
+
|
101
|
+
cMIDIEvent.define_const("ACTION_NONE", Reflex::MIDIEvent::ACTION_NONE);
|
102
|
+
cMIDIEvent.define_const("NOTE_ON", Reflex::MIDIEvent::NOTE_ON);
|
103
|
+
cMIDIEvent.define_const("NOTE_OFF", Reflex::MIDIEvent::NOTE_OFF);
|
104
|
+
cMIDIEvent.define_const("CONTROL_CHANGE", Reflex::MIDIEvent::CONTROL_CHANGE);
|
105
|
+
cMIDIEvent.define_const("PROGRAM_CHANGE", Reflex::MIDIEvent::PROGRAM_CHANGE);
|
106
|
+
cMIDIEvent.define_const("CHANNEL_PRESSURE", Reflex::MIDIEvent::CHANNEL_PRESSURE);
|
107
|
+
cMIDIEvent.define_const("KEY_PRESSURE", Reflex::MIDIEvent::KEY_PRESSURE);
|
108
|
+
cMIDIEvent.define_const("PITCH_BEND_CHANGE", Reflex::MIDIEvent::PITCH_BEND_CHANGE);
|
109
|
+
cMIDIEvent.define_const("SYSTEM", Reflex::MIDIEvent::SYSTEM);
|
110
|
+
}
|
111
|
+
|
112
|
+
|
113
|
+
namespace Reflex
|
114
|
+
{
|
115
|
+
|
116
|
+
|
117
|
+
Class
|
118
|
+
midi_event_class ()
|
119
|
+
{
|
120
|
+
return cMIDIEvent;
|
121
|
+
}
|
122
|
+
|
123
|
+
|
124
|
+
}// Reflex
|
data/.doc/ext/reflex/native.cpp
CHANGED
@@ -21,7 +21,9 @@ void Init_reflex_focus_event ();
|
|
21
21
|
void Init_reflex_key_event ();
|
22
22
|
void Init_reflex_pointer_event ();
|
23
23
|
void Init_reflex_wheel_event ();
|
24
|
+
void Init_reflex_midi_event ();
|
24
25
|
void Init_reflex_note_event ();
|
26
|
+
void Init_reflex_control_change_event ();
|
25
27
|
void Init_reflex_capture_event ();
|
26
28
|
void Init_reflex_timer_event ();
|
27
29
|
void Init_reflex_contact_event ();
|
@@ -75,7 +77,9 @@ extern "C" void
|
|
75
77
|
Init_reflex_key_event();
|
76
78
|
Init_reflex_pointer_event();
|
77
79
|
Init_reflex_wheel_event();
|
80
|
+
Init_reflex_midi_event();
|
78
81
|
Init_reflex_note_event();
|
82
|
+
Init_reflex_control_change_event();
|
79
83
|
Init_reflex_capture_event();
|
80
84
|
Init_reflex_timer_event();
|
81
85
|
Init_reflex_contact_event();
|
data/.doc/ext/reflex/view.cpp
CHANGED
@@ -1040,6 +1040,41 @@ VALUE on_wheel(VALUE self, VALUE event)
|
|
1040
1040
|
CALL(on_wheel(to<Reflex::WheelEvent*>(event)));
|
1041
1041
|
}
|
1042
1042
|
|
1043
|
+
static
|
1044
|
+
VALUE on_midi(VALUE self, VALUE event)
|
1045
|
+
{
|
1046
|
+
CHECK;
|
1047
|
+
CALL(on_midi(to<Reflex::MIDIEvent*>(event)));
|
1048
|
+
}
|
1049
|
+
|
1050
|
+
static
|
1051
|
+
VALUE on_note(VALUE self, VALUE event)
|
1052
|
+
{
|
1053
|
+
CHECK;
|
1054
|
+
CALL(on_note(to<Reflex::NoteEvent*>(event)));
|
1055
|
+
}
|
1056
|
+
|
1057
|
+
static
|
1058
|
+
VALUE on_note_on(VALUE self, VALUE event)
|
1059
|
+
{
|
1060
|
+
CHECK;
|
1061
|
+
CALL(on_note_on(to<Reflex::NoteEvent*>(event)));
|
1062
|
+
}
|
1063
|
+
|
1064
|
+
static
|
1065
|
+
VALUE on_note_off(VALUE self, VALUE event)
|
1066
|
+
{
|
1067
|
+
CHECK;
|
1068
|
+
CALL(on_note_off(to<Reflex::NoteEvent*>(event)));
|
1069
|
+
}
|
1070
|
+
|
1071
|
+
static
|
1072
|
+
VALUE on_control_change(VALUE self, VALUE event)
|
1073
|
+
{
|
1074
|
+
CHECK;
|
1075
|
+
CALL(on_control_change(to<Reflex::ControlChangeEvent*>(event)));
|
1076
|
+
}
|
1077
|
+
|
1043
1078
|
static
|
1044
1079
|
VALUE on_capture(VALUE self, VALUE event)
|
1045
1080
|
{
|
@@ -1215,6 +1250,11 @@ Init_reflex_view ()
|
|
1215
1250
|
rb_define_method(cView, "on_pointer_move", RUBY_METHOD_FUNC(on_pointer_move), 1);
|
1216
1251
|
rb_define_method(cView, "on_pointer_cancel", RUBY_METHOD_FUNC(on_pointer_cancel), 1);
|
1217
1252
|
rb_define_method(cView, "on_wheel", RUBY_METHOD_FUNC(on_wheel), 1);
|
1253
|
+
rb_define_method(cView, "on_midi", RUBY_METHOD_FUNC(on_midi), 1);
|
1254
|
+
rb_define_method(cView, "on_note", RUBY_METHOD_FUNC(on_note), 1);
|
1255
|
+
rb_define_method(cView, "on_note_on", RUBY_METHOD_FUNC(on_note_on), 1);
|
1256
|
+
rb_define_method(cView, "on_note_off", RUBY_METHOD_FUNC(on_note_off), 1);
|
1257
|
+
rb_define_method(cView, "on_control_change", RUBY_METHOD_FUNC(on_control_change), 1);
|
1218
1258
|
rb_define_method(cView, "on_capture", RUBY_METHOD_FUNC(on_capture), 1);
|
1219
1259
|
rb_define_method(cView, "on_timer", RUBY_METHOD_FUNC(on_timer), 1);
|
1220
1260
|
cView.define_method( "will_contact?", will_contact);
|
@@ -1225,7 +1265,7 @@ Init_reflex_view ()
|
|
1225
1265
|
cView.define_const("CAPTURE_NONE", Reflex::View::CAPTURE_NONE);
|
1226
1266
|
cView.define_const("CAPTURE_KEY", Reflex::View::CAPTURE_KEY);
|
1227
1267
|
cView.define_const("CAPTURE_POINTER", Reflex::View::CAPTURE_POINTER);
|
1228
|
-
cView.define_const("
|
1268
|
+
cView.define_const("CAPTURE_MIDI", Reflex::View::CAPTURE_MIDI);
|
1229
1269
|
cView.define_const("CAPTURE_ALL", Reflex::View::CAPTURE_ALL);
|
1230
1270
|
|
1231
1271
|
define_selector_methods<Reflex::View>(cView);
|
data/.doc/ext/reflex/window.cpp
CHANGED
@@ -369,6 +369,13 @@ VALUE on_wheel(VALUE self, VALUE event)
|
|
369
369
|
CALL(on_wheel(to<Reflex::WheelEvent*>(event)));
|
370
370
|
}
|
371
371
|
|
372
|
+
static
|
373
|
+
VALUE on_midi(VALUE self, VALUE event)
|
374
|
+
{
|
375
|
+
CHECK;
|
376
|
+
CALL(on_midi(to<Reflex::MIDIEvent*>(event)));
|
377
|
+
}
|
378
|
+
|
372
379
|
static
|
373
380
|
VALUE on_note(VALUE self, VALUE event)
|
374
381
|
{
|
@@ -390,6 +397,13 @@ VALUE on_note_off(VALUE self, VALUE event)
|
|
390
397
|
CALL(on_note_off(to<Reflex::NoteEvent*>(event)));
|
391
398
|
}
|
392
399
|
|
400
|
+
static
|
401
|
+
VALUE on_control_change(VALUE self, VALUE event)
|
402
|
+
{
|
403
|
+
CHECK;
|
404
|
+
CALL(on_control_change(to<Reflex::ControlChangeEvent*>(event)));
|
405
|
+
}
|
406
|
+
|
393
407
|
|
394
408
|
static Class cWindow;
|
395
409
|
|
@@ -443,9 +457,11 @@ Init_reflex_window ()
|
|
443
457
|
rb_define_method(cWindow, "on_pointer_move", RUBY_METHOD_FUNC(on_pointer_move), 1);
|
444
458
|
rb_define_method(cWindow, "on_pointer_cancel", RUBY_METHOD_FUNC(on_pointer_cancel), 1);
|
445
459
|
rb_define_method(cWindow, "on_wheel", RUBY_METHOD_FUNC(on_wheel), 1);
|
460
|
+
rb_define_method(cWindow, "on_midi", RUBY_METHOD_FUNC(on_midi), 1);
|
446
461
|
rb_define_method(cWindow, "on_note", RUBY_METHOD_FUNC(on_note), 1);
|
447
462
|
rb_define_method(cWindow, "on_note_on", RUBY_METHOD_FUNC(on_note_on), 1);
|
448
463
|
rb_define_method(cWindow, "on_note_off", RUBY_METHOD_FUNC(on_note_off), 1);
|
464
|
+
rb_define_method(cWindow, "on_control_change", RUBY_METHOD_FUNC(on_control_change), 1);
|
449
465
|
|
450
466
|
cWindow.define_const("ORIENTATION_PORTRAIT", Reflex::Window::FLAG_PORTRAIT);
|
451
467
|
cWindow.define_const("ORIENTATION_LANDSCAPE", Reflex::Window::FLAG_LANDSCAPE);
|
data/ChangeLog.md
CHANGED
@@ -1,6 +1,13 @@
|
|
1
1
|
# reflex ChangeLog
|
2
2
|
|
3
3
|
|
4
|
+
## [v0.3.9] - 2025-05-22
|
5
|
+
|
6
|
+
- Add MIDIEvent class and on_midi() event handler
|
7
|
+
- Add ControlChangeEvent and on_control_change() event handler
|
8
|
+
- Replace capture type from CAPTURE_NOTE to CAPTURE_MIDI
|
9
|
+
|
10
|
+
|
4
11
|
## [v0.3.8.1] - 2025-05-13
|
5
12
|
|
6
13
|
- Fix a crash that occasionally occurred at startup when a MIDI device was connected
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.9
|
@@ -0,0 +1,108 @@
|
|
1
|
+
#include "reflex/ruby/event.h"
|
2
|
+
|
3
|
+
|
4
|
+
#include "defs.h"
|
5
|
+
|
6
|
+
|
7
|
+
RUCY_DEFINE_VALUE_FROM_TO(REFLEX_EXPORT, Reflex::ControlChangeEvent)
|
8
|
+
|
9
|
+
#define THIS to<Reflex::ControlChangeEvent*>(self)
|
10
|
+
|
11
|
+
#define CHECK RUCY_CHECK_OBJ(Reflex::ControlChangeEvent, self)
|
12
|
+
|
13
|
+
|
14
|
+
static
|
15
|
+
RUCY_DEF_ALLOC(alloc, klass)
|
16
|
+
{
|
17
|
+
return new_type<Reflex::ControlChangeEvent>(klass);
|
18
|
+
}
|
19
|
+
RUCY_END
|
20
|
+
|
21
|
+
static
|
22
|
+
RUCY_DEF4(initialize, channel, controller, value, time)
|
23
|
+
{
|
24
|
+
CHECK;
|
25
|
+
|
26
|
+
*THIS = Reflex::ControlChangeEvent(
|
27
|
+
to<int>(channel),
|
28
|
+
to<int>(controller),
|
29
|
+
to<float>(value),
|
30
|
+
to<double>(time));
|
31
|
+
|
32
|
+
return rb_call_super(0, NULL);
|
33
|
+
}
|
34
|
+
RUCY_END
|
35
|
+
|
36
|
+
static
|
37
|
+
RUCY_DEF1(initialize_copy, obj)
|
38
|
+
{
|
39
|
+
CHECK;
|
40
|
+
*THIS = to<Reflex::ControlChangeEvent&>(obj).dup();
|
41
|
+
return self;
|
42
|
+
}
|
43
|
+
RUCY_END
|
44
|
+
|
45
|
+
static
|
46
|
+
RUCY_DEF0(get_channel)
|
47
|
+
{
|
48
|
+
CHECK;
|
49
|
+
return value(THIS->channel());
|
50
|
+
}
|
51
|
+
RUCY_END
|
52
|
+
|
53
|
+
static
|
54
|
+
RUCY_DEF0(get_controller)
|
55
|
+
{
|
56
|
+
CHECK;
|
57
|
+
return value(THIS->controller());
|
58
|
+
}
|
59
|
+
RUCY_END
|
60
|
+
|
61
|
+
static
|
62
|
+
RUCY_DEF0(get_value)
|
63
|
+
{
|
64
|
+
CHECK;
|
65
|
+
return value(THIS->value());
|
66
|
+
}
|
67
|
+
RUCY_END
|
68
|
+
|
69
|
+
static
|
70
|
+
RUCY_DEF0(is_captured)
|
71
|
+
{
|
72
|
+
CHECK;
|
73
|
+
return value(THIS->is_captured());
|
74
|
+
}
|
75
|
+
RUCY_END
|
76
|
+
|
77
|
+
|
78
|
+
static Class cControlChangeEvent;
|
79
|
+
|
80
|
+
void
|
81
|
+
Init_reflex_control_change_event ()
|
82
|
+
{
|
83
|
+
Module mReflex = define_module("Reflex");
|
84
|
+
|
85
|
+
cControlChangeEvent =
|
86
|
+
mReflex.define_class("ControlChangeEvent", Reflex::event_class());
|
87
|
+
cControlChangeEvent.define_alloc_func(alloc);
|
88
|
+
cControlChangeEvent.define_private_method("initialize", initialize);
|
89
|
+
cControlChangeEvent.define_private_method("initialize_copy", initialize_copy);
|
90
|
+
cControlChangeEvent.define_method("channel", get_channel);
|
91
|
+
cControlChangeEvent.define_method("controller", get_controller);
|
92
|
+
cControlChangeEvent.define_method("value", get_value);
|
93
|
+
cControlChangeEvent.define_method("captured?", is_captured);
|
94
|
+
}
|
95
|
+
|
96
|
+
|
97
|
+
namespace Reflex
|
98
|
+
{
|
99
|
+
|
100
|
+
|
101
|
+
Class
|
102
|
+
control_change_event_class ()
|
103
|
+
{
|
104
|
+
return cControlChangeEvent;
|
105
|
+
}
|
106
|
+
|
107
|
+
|
108
|
+
}// Reflex
|
data/ext/reflex/midi.cpp
CHANGED
@@ -22,6 +22,14 @@ RUCY_DEF_ALLOC(alloc, klass)
|
|
22
22
|
}
|
23
23
|
RUCY_END
|
24
24
|
|
25
|
+
static
|
26
|
+
RUCY_DEF1(on_midi, event)
|
27
|
+
{
|
28
|
+
CHECK;
|
29
|
+
CALL(on_midi(to<Reflex::MIDIEvent*>(event)));
|
30
|
+
}
|
31
|
+
RUCY_END
|
32
|
+
|
25
33
|
static
|
26
34
|
RUCY_DEF1(on_note, event)
|
27
35
|
{
|
@@ -46,6 +54,14 @@ RUCY_DEF1(on_note_off, event)
|
|
46
54
|
}
|
47
55
|
RUCY_END
|
48
56
|
|
57
|
+
static
|
58
|
+
RUCY_DEF1(on_control_change, event)
|
59
|
+
{
|
60
|
+
CHECK;
|
61
|
+
CALL(on_control_change(to<Reflex::ControlChangeEvent*>(event)));
|
62
|
+
}
|
63
|
+
RUCY_END
|
64
|
+
|
49
65
|
static
|
50
66
|
RUCY_DEF0(s_get_all)
|
51
67
|
{
|
@@ -65,9 +81,11 @@ Init_reflex_midi ()
|
|
65
81
|
|
66
82
|
cMIDI = mReflex.define_class("MIDI", Reflex::device_class());
|
67
83
|
cMIDI.define_alloc_func(alloc);
|
68
|
-
cMIDI.define_method("
|
69
|
-
cMIDI.define_method("
|
70
|
-
cMIDI.define_method("
|
84
|
+
cMIDI.define_method("on_midi", on_midi);
|
85
|
+
cMIDI.define_method("on_note", on_note);
|
86
|
+
cMIDI.define_method("on_note_on", on_note_on);
|
87
|
+
cMIDI.define_method("on_note_off", on_note_off);
|
88
|
+
cMIDI.define_method("on_control_change", on_control_change);
|
71
89
|
|
72
90
|
cMIDI.define_singleton_method("all", s_get_all);
|
73
91
|
}
|
@@ -0,0 +1,132 @@
|
|
1
|
+
#include "reflex/ruby/event.h"
|
2
|
+
|
3
|
+
|
4
|
+
#include "reflex/ruby/midi.h"
|
5
|
+
#include "defs.h"
|
6
|
+
|
7
|
+
|
8
|
+
RUCY_DEFINE_VALUE_FROM_TO(REFLEX_EXPORT, Reflex::MIDIEvent)
|
9
|
+
|
10
|
+
#define THIS to<Reflex::MIDIEvent*>(self)
|
11
|
+
|
12
|
+
#define CHECK RUCY_CHECK_OBJ(Reflex::MIDIEvent, self)
|
13
|
+
|
14
|
+
|
15
|
+
static
|
16
|
+
RUCY_DEF_ALLOC(alloc, klass)
|
17
|
+
{
|
18
|
+
return new_type<Reflex::MIDIEvent>(klass);
|
19
|
+
}
|
20
|
+
RUCY_END
|
21
|
+
|
22
|
+
static
|
23
|
+
RUCY_DEF5(initialize, midi, byte0, byte1, byte2, time)
|
24
|
+
{
|
25
|
+
CHECK;
|
26
|
+
|
27
|
+
uchar bytes[3] =
|
28
|
+
{
|
29
|
+
to<uchar>(byte0),
|
30
|
+
to<uchar>(byte1),
|
31
|
+
to<uchar>(byte2)
|
32
|
+
};
|
33
|
+
*THIS = Reflex::MIDIEvent(
|
34
|
+
midi ? to<Reflex::MIDI*>(midi) : NULL,
|
35
|
+
bytes,
|
36
|
+
to<double>(time));
|
37
|
+
|
38
|
+
return rb_call_super(0, NULL);
|
39
|
+
}
|
40
|
+
RUCY_END
|
41
|
+
|
42
|
+
static
|
43
|
+
RUCY_DEF1(initialize_copy, obj)
|
44
|
+
{
|
45
|
+
CHECK;
|
46
|
+
*THIS = to<Reflex::MIDIEvent&>(obj).dup();
|
47
|
+
return self;
|
48
|
+
}
|
49
|
+
RUCY_END
|
50
|
+
|
51
|
+
static
|
52
|
+
RUCY_DEF0(get_action)
|
53
|
+
{
|
54
|
+
CHECK;
|
55
|
+
return value(THIS->action());
|
56
|
+
}
|
57
|
+
RUCY_END
|
58
|
+
|
59
|
+
static
|
60
|
+
RUCY_DEF0(get_channel)
|
61
|
+
{
|
62
|
+
CHECK;
|
63
|
+
return value(THIS->channel());
|
64
|
+
}
|
65
|
+
RUCY_END
|
66
|
+
|
67
|
+
static
|
68
|
+
RUCY_DEF0(get_data1)
|
69
|
+
{
|
70
|
+
CHECK;
|
71
|
+
return value(THIS->data1());
|
72
|
+
}
|
73
|
+
RUCY_END
|
74
|
+
|
75
|
+
static
|
76
|
+
RUCY_DEF0(get_data2)
|
77
|
+
{
|
78
|
+
CHECK;
|
79
|
+
return value(THIS->data2());
|
80
|
+
}
|
81
|
+
RUCY_END
|
82
|
+
|
83
|
+
static
|
84
|
+
RUCY_DEF0(is_captured)
|
85
|
+
{
|
86
|
+
CHECK;
|
87
|
+
return value(THIS->is_captured());
|
88
|
+
}
|
89
|
+
RUCY_END
|
90
|
+
|
91
|
+
|
92
|
+
static Class cMIDIEvent;
|
93
|
+
|
94
|
+
void
|
95
|
+
Init_reflex_midi_event ()
|
96
|
+
{
|
97
|
+
Module mReflex = define_module("Reflex");
|
98
|
+
|
99
|
+
cMIDIEvent = mReflex.define_class("MIDIEvent", Reflex::event_class());
|
100
|
+
cMIDIEvent.define_alloc_func(alloc);
|
101
|
+
cMIDIEvent.define_private_method("initialize", initialize);
|
102
|
+
cMIDIEvent.define_private_method("initialize_copy", initialize_copy);
|
103
|
+
cMIDIEvent.define_method("action", get_action);
|
104
|
+
cMIDIEvent.define_method("channel", get_channel);
|
105
|
+
cMIDIEvent.define_method("data1", get_data1);
|
106
|
+
cMIDIEvent.define_method("data2", get_data2);
|
107
|
+
cMIDIEvent.define_method("captured?", is_captured);
|
108
|
+
|
109
|
+
cMIDIEvent.define_const("ACTION_NONE", Reflex::MIDIEvent::ACTION_NONE);
|
110
|
+
cMIDIEvent.define_const("NOTE_ON", Reflex::MIDIEvent::NOTE_ON);
|
111
|
+
cMIDIEvent.define_const("NOTE_OFF", Reflex::MIDIEvent::NOTE_OFF);
|
112
|
+
cMIDIEvent.define_const("CONTROL_CHANGE", Reflex::MIDIEvent::CONTROL_CHANGE);
|
113
|
+
cMIDIEvent.define_const("PROGRAM_CHANGE", Reflex::MIDIEvent::PROGRAM_CHANGE);
|
114
|
+
cMIDIEvent.define_const("CHANNEL_PRESSURE", Reflex::MIDIEvent::CHANNEL_PRESSURE);
|
115
|
+
cMIDIEvent.define_const("KEY_PRESSURE", Reflex::MIDIEvent::KEY_PRESSURE);
|
116
|
+
cMIDIEvent.define_const("PITCH_BEND_CHANGE", Reflex::MIDIEvent::PITCH_BEND_CHANGE);
|
117
|
+
cMIDIEvent.define_const("SYSTEM", Reflex::MIDIEvent::SYSTEM);
|
118
|
+
}
|
119
|
+
|
120
|
+
|
121
|
+
namespace Reflex
|
122
|
+
{
|
123
|
+
|
124
|
+
|
125
|
+
Class
|
126
|
+
midi_event_class ()
|
127
|
+
{
|
128
|
+
return cMIDIEvent;
|
129
|
+
}
|
130
|
+
|
131
|
+
|
132
|
+
}// Reflex
|