mmplayer 0.0.3 → 0.0.4
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/lib/mmplayer/instructions/midi.rb +4 -4
- data/lib/mmplayer/message_handler.rb +16 -4
- data/lib/mmplayer/midi.rb +3 -3
- data/lib/mmplayer.rb +1 -1
- data/test/message_handler_test.rb +63 -6
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 22ba4c7203b98702ef6771a78b984d725e563b53
|
4
|
+
data.tar.gz: 677cc0a18786f01cbb6de3d832e5d86f41628818
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4348a42a44f4d0a9b0a9619bc06fef9d8464cb166d725a1a81dd9f3bbe999265e04e90891b2e3da2cc39ef324b4e3bd290b12639c33e370e8e3179332c0bcbea
|
7
|
+
data.tar.gz: 4f87d5c157d78f51bceaf11cf1a210534261245f0178904daa391bc9c9800f947efe2e5ec669ed9105536444192473dc449e512df244e78a6951b972cdbe2f28
|
@@ -22,19 +22,19 @@ module MMPlayer
|
|
22
22
|
alias_method :system, :on_system
|
23
23
|
|
24
24
|
# Assign a callback for a given MIDI note
|
25
|
-
# @param [Fixnum, String] note A MIDI note eg 64 "F4"
|
25
|
+
# @param [Fixnum, String] note A MIDI note eg 64 "F4" or nil for all
|
26
26
|
# @param [Proc] callback The callback to execute when a matching message is received
|
27
27
|
# @return [Hash]
|
28
|
-
def on_note(note, &callback)
|
28
|
+
def on_note(note = nil, &callback)
|
29
29
|
@midi.add_note_callback(note, &callback)
|
30
30
|
end
|
31
31
|
alias_method :note, :on_note
|
32
32
|
|
33
33
|
# Assign a callback for the given MIDI control change
|
34
|
-
# @param [Fixnum] index The MIDI control change index to assign the callback for
|
34
|
+
# @param [Fixnum] index The MIDI control change index to assign the callback for or nil for all
|
35
35
|
# @param [Proc] callback The callback to execute when a matching message is received
|
36
36
|
# @return [Hash]
|
37
|
-
def on_cc(index, &callback)
|
37
|
+
def on_cc(index = nil, &callback)
|
38
38
|
@midi.add_cc_callback(index, &callback)
|
39
39
|
end
|
40
40
|
alias_method :cc, :on_cc
|
@@ -13,9 +13,9 @@ module MMPlayer
|
|
13
13
|
}
|
14
14
|
end
|
15
15
|
|
16
|
-
# Add a callback for a given MIDI
|
16
|
+
# Add a callback for a given MIDI message type
|
17
17
|
# @param [Symbol] type The MIDI message type (eg :note, :cc)
|
18
|
-
# @param [
|
18
|
+
# @param [Fixnum, String] key The ID of the message eg note number/cc index
|
19
19
|
# @param [Proc] callback The callback to execute when the given MIDI command is received
|
20
20
|
# @return [Hash]
|
21
21
|
def add_callback(type, key, &callback)
|
@@ -23,6 +23,16 @@ module MMPlayer
|
|
23
23
|
@callback[type]
|
24
24
|
end
|
25
25
|
|
26
|
+
# Add a callback for a given MIDI note
|
27
|
+
# @param [Symbol] type The MIDI message type (eg :note, :cc)
|
28
|
+
# @param [Fixnum, String] note
|
29
|
+
# @param [Proc] callback The callback to execute when the given MIDI command is received
|
30
|
+
# @return [Hash]
|
31
|
+
def add_note_callback(note, &callback)
|
32
|
+
note = MIDIMessage::Constant.value(:note, note) if note.kind_of?(String)
|
33
|
+
add_callback(:note, note, &callback)
|
34
|
+
end
|
35
|
+
|
26
36
|
# Process a message for the given channel
|
27
37
|
# @param [Fixnum, nil] channel
|
28
38
|
# @param [MIDIMessage] message
|
@@ -39,7 +49,8 @@ module MMPlayer
|
|
39
49
|
# @param [MIDIMessage] message
|
40
50
|
# @return [Boolean, nil]
|
41
51
|
def note_message(message)
|
42
|
-
|
52
|
+
callback = callback = @callback[:note][message.note] || @callback[:note][nil]
|
53
|
+
unless callback.nil?
|
43
54
|
callback.call(message.velocity)
|
44
55
|
true
|
45
56
|
end
|
@@ -49,7 +60,8 @@ module MMPlayer
|
|
49
60
|
# @param [MIDIMessage] message
|
50
61
|
# @return [Boolean, nil]
|
51
62
|
def cc_message(message)
|
52
|
-
|
63
|
+
callback = @callback[:cc][message.index] || @callback[:cc][nil]
|
64
|
+
unless callback.nil?
|
53
65
|
callback.call(message.value)
|
54
66
|
true
|
55
67
|
end
|
data/lib/mmplayer/midi.rb
CHANGED
@@ -23,15 +23,15 @@ module MMPlayer
|
|
23
23
|
end
|
24
24
|
|
25
25
|
# Add a callback for a given MIDI note
|
26
|
-
# @param [Fixnum, String] note The MIDI note to add a callback for eg 64 "E4"
|
26
|
+
# @param [Fixnum, String, nil] note The MIDI note to add a callback for eg 64 "E4"
|
27
27
|
# @param [Proc] callback The callback to execute when the given MIDI note is received
|
28
28
|
# @return [Hash]
|
29
29
|
def add_note_callback(note, &callback)
|
30
|
-
@message_handler.
|
30
|
+
@message_handler.add_note_callback(note, &callback)
|
31
31
|
end
|
32
32
|
|
33
33
|
# Add a callback for a given MIDI control change
|
34
|
-
# @param [Fixnum] index The MIDI control change index to add a callback for eg 10
|
34
|
+
# @param [Fixnum, nil] index The MIDI control change index to add a callback for eg 10
|
35
35
|
# @param [Proc] callback The callback to execute when the given MIDI control change is received
|
36
36
|
# @return [Hash]
|
37
37
|
def add_cc_callback(index, &callback)
|
data/lib/mmplayer.rb
CHANGED
@@ -27,16 +27,54 @@ class MMPlayer::MessageHandlerTest < Minitest::Test
|
|
27
27
|
@callback.unstub(:call)
|
28
28
|
end
|
29
29
|
|
30
|
-
|
31
|
-
|
30
|
+
context "has catch-all callback" do
|
31
|
+
|
32
|
+
setup do
|
33
|
+
@var2 = nil
|
34
|
+
@catchall = proc { |vel| @var2 = vel }
|
35
|
+
@handler.add_callback(:note, nil, &@catchall)
|
36
|
+
@catchall.expects(:call).never
|
37
|
+
end
|
38
|
+
|
39
|
+
should "call specific callback" do
|
40
|
+
assert @handler.send(:note_message, @message)
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
context "no catch-all callback" do
|
46
|
+
|
47
|
+
should "call specific callback" do
|
48
|
+
assert @handler.send(:note_message, @message)
|
49
|
+
end
|
50
|
+
|
32
51
|
end
|
33
52
|
|
34
53
|
end
|
35
54
|
|
36
55
|
context "callback doesn't exist" do
|
37
56
|
|
38
|
-
|
39
|
-
|
57
|
+
context "has catch-all callback" do
|
58
|
+
|
59
|
+
setup do
|
60
|
+
@var = nil
|
61
|
+
@callback = proc { |vel| @var = vel }
|
62
|
+
@handler.add_callback(:note, nil, &@callback)
|
63
|
+
@callback.expects(:call).once
|
64
|
+
end
|
65
|
+
|
66
|
+
should "call callback" do
|
67
|
+
assert @handler.send(:note_message, @message)
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
context "no catch-all callback" do
|
73
|
+
|
74
|
+
should "do nothing" do
|
75
|
+
refute @handler.send(:note_message, @message)
|
76
|
+
end
|
77
|
+
|
40
78
|
end
|
41
79
|
|
42
80
|
end
|
@@ -70,8 +108,27 @@ class MMPlayer::MessageHandlerTest < Minitest::Test
|
|
70
108
|
|
71
109
|
context "callback doesn't exist" do
|
72
110
|
|
73
|
-
|
74
|
-
|
111
|
+
context "has catch-all callback" do
|
112
|
+
|
113
|
+
setup do
|
114
|
+
@var = nil
|
115
|
+
@callback = proc { |vel| @var = vel }
|
116
|
+
@handler.add_callback(:cc, nil, &@callback)
|
117
|
+
@callback.expects(:call).once
|
118
|
+
end
|
119
|
+
|
120
|
+
should "call callback" do
|
121
|
+
assert @handler.send(:cc_message, @message)
|
122
|
+
end
|
123
|
+
|
124
|
+
end
|
125
|
+
|
126
|
+
context "no catch-all callback" do
|
127
|
+
|
128
|
+
should "do nothing" do
|
129
|
+
refute @handler.send(:cc_message, @message)
|
130
|
+
end
|
131
|
+
|
75
132
|
end
|
76
133
|
|
77
134
|
end
|