micromidi 0.1.4 → 0.1.5
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/LICENSE +1 -1
- data/README.md +16 -16
- data/lib/micromidi.rb +9 -3
- data/lib/micromidi/context.rb +1 -1
- data/lib/micromidi/instructions/input.rb +5 -3
- data/lib/micromidi/instructions/shorthand.rb +1 -0
- data/test/context_test.rb +10 -0
- data/test/helper.rb +1 -0
- data/test/module_test.rb +19 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 34add3c5d0d82e3fe9ac1ea773a574d8f29b43ca
|
4
|
+
data.tar.gz: 77bb91ec4695c2aeea7cfa4b589d1cdef3864d6a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 330ba95c70c88f7a493a2df2a9ac06877aebb500173dc19761c2aa07fc82f356566f5098b28fd2672bb82e0a31161e0bace2df950b9b97483c2c74996461fe60
|
7
|
+
data.tar.gz: b4ec59d0664aa536713fedfa736edcda4536ff54ac73b5224ad6f1d44b6caa6bcf75eab420adf9f73029887514fdec4d75a113a3bd4c9980a9c46b02beca94b4
|
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -5,7 +5,7 @@ A Ruby DSL for MIDI
|
|
5
5
|

|
6
6
|
|
7
7
|
## Features
|
8
|
-
|
8
|
+
|
9
9
|
* Cross-platform compatible using MRI or JRuby.
|
10
10
|
* Simplified MIDI and Sysex message output
|
11
11
|
* MIDI Thru, processing and custom input events
|
@@ -30,17 +30,17 @@ require "midi"
|
|
30
30
|
|
31
31
|
@input = UniMIDI::Input.gets
|
32
32
|
@output = UniMIDI::Output.gets
|
33
|
-
|
33
|
+
|
34
34
|
MIDI.using(@output) do
|
35
|
-
|
35
|
+
|
36
36
|
5.times do |oct|
|
37
37
|
octave oct
|
38
|
-
%w{C E G B}.each { |n| play n 0.5 }
|
38
|
+
%w{C E G B}.each { |n| play n, 0.5 }
|
39
39
|
end
|
40
40
|
|
41
41
|
end
|
42
42
|
```
|
43
|
-
|
43
|
+
|
44
44
|
This next example filters outs notes if their octave is between 1 and 3. All other messages are sent thru.
|
45
45
|
|
46
46
|
Output is also printed to the console by passing `$stdout` as though it's a MIDI device
|
@@ -66,26 +66,26 @@ M(@input, @output) do
|
|
66
66
|
|
67
67
|
end
|
68
68
|
```
|
69
|
-
|
69
|
+
|
70
70
|
Finally, here is an example that maps some MIDI Control Change messages to SysEx
|
71
|
-
|
71
|
+
|
72
72
|
```ruby
|
73
73
|
MIDI.using(@input, @output) do
|
74
|
-
|
74
|
+
|
75
75
|
*@the_map =
|
76
76
|
[0x40, 0x7F, 0x00],
|
77
77
|
[0x41, 0x7F, 0x00],
|
78
78
|
[0x42, 0x7F, 0x00]
|
79
|
-
|
79
|
+
|
80
80
|
node :roland, :model_id => 0x42, :device_id => 0x10
|
81
|
-
|
81
|
+
|
82
82
|
receive :cc do |message|
|
83
|
-
|
83
|
+
|
84
84
|
command @the_map[message.index - 1], message.value
|
85
|
-
|
85
|
+
|
86
86
|
end
|
87
|
-
|
88
|
-
end
|
87
|
+
|
88
|
+
end
|
89
89
|
```
|
90
90
|
|
91
91
|
Here are a few posts explaining each of the concepts used here in greater detail:
|
@@ -96,7 +96,7 @@ Here are a few posts explaining each of the concepts used here in greater detail
|
|
96
96
|
* [Shorthand](http://tx81z.blogspot.com/2011/08/micromidi-shorthand.html)
|
97
97
|
* [Sysex](http://tx81z.blogspot.com/2011/09/generating-sysex-messages-with.html)
|
98
98
|
* [Etc](http://tx81z.blogspot.com/2011/09/more-micromidi-tricks.html)
|
99
|
-
|
99
|
+
|
100
100
|
## Documentation
|
101
101
|
|
102
102
|
* [rdoc](http://rubydoc.info/github/arirusso/micromidi)
|
@@ -109,4 +109,4 @@ Here are a few posts explaining each of the concepts used here in greater detail
|
|
109
109
|
|
110
110
|
Apache 2.0, See the file LICENSE
|
111
111
|
|
112
|
-
Copyright (c) 2011-
|
112
|
+
Copyright (c) 2011-2015 Ari Russo
|
data/lib/micromidi.rb
CHANGED
@@ -1,9 +1,8 @@
|
|
1
1
|
#
|
2
2
|
# MicroMIDI
|
3
|
-
#
|
4
3
|
# A Ruby DSL for MIDI
|
5
4
|
#
|
6
|
-
# (c)2011-
|
5
|
+
# (c)2011-2015 Ari Russo
|
7
6
|
# Apache 2.0 License
|
8
7
|
#
|
9
8
|
|
@@ -34,7 +33,14 @@ require "micromidi/instructions/shorthand"
|
|
34
33
|
|
35
34
|
module MicroMIDI
|
36
35
|
|
37
|
-
VERSION = "0.1.
|
36
|
+
VERSION = "0.1.5"
|
38
37
|
|
39
38
|
end
|
39
|
+
|
40
40
|
MIDI = MicroMIDI
|
41
|
+
|
42
|
+
# Shortcuts to UniMIDI modules
|
43
|
+
module MIDI
|
44
|
+
Input = UniMIDI::Input
|
45
|
+
Output = UniMIDI::Output
|
46
|
+
end
|
data/lib/micromidi/context.rb
CHANGED
@@ -19,12 +19,12 @@ module MicroMIDI
|
|
19
19
|
|
20
20
|
@instructions = {
|
21
21
|
:process => Instructions::Process.new(@state),
|
22
|
-
:input => Instructions::Input.new(@state),
|
23
22
|
:message => Instructions::Message.new(@state),
|
24
23
|
:output => Instructions::Output.new(@state),
|
25
24
|
:sticky => Instructions::Sticky.new(@state),
|
26
25
|
:sysex => Instructions::SysEx.new(@state)
|
27
26
|
}
|
27
|
+
@instructions[:input] = Instructions::Input.new(@state) { |message| @instructions[:output].output(message) }
|
28
28
|
|
29
29
|
edit(&block) if block_given?
|
30
30
|
end
|
@@ -6,8 +6,10 @@ module MicroMIDI
|
|
6
6
|
class Input
|
7
7
|
|
8
8
|
# @param [State] state
|
9
|
-
|
9
|
+
# @param [Proc] thru_action Output module to send thru messages to
|
10
|
+
def initialize(state, &thru_action)
|
10
11
|
@state = state
|
12
|
+
@thru_action = thru_action
|
11
13
|
end
|
12
14
|
|
13
15
|
# Bind an event that will be fired when a message is received
|
@@ -58,7 +60,7 @@ module MicroMIDI
|
|
58
60
|
# @return [Boolean]
|
59
61
|
def thru_if(*args)
|
60
62
|
receive_options = thru_arguments(args)
|
61
|
-
receive(*receive_options) { |message, timestamp|
|
63
|
+
receive(*receive_options) { |message, timestamp| @thru_action.call(message) }
|
62
64
|
true
|
63
65
|
end
|
64
66
|
|
@@ -67,7 +69,7 @@ module MicroMIDI
|
|
67
69
|
# @return [Boolean]
|
68
70
|
def thru_unless(*args)
|
69
71
|
receive_options = thru_arguments(args)
|
70
|
-
receive_unless(*receive_options) { |message, timestamp|
|
72
|
+
receive_unless(*receive_options) { |message, timestamp| @thru_action.call(message) }
|
71
73
|
end
|
72
74
|
|
73
75
|
# Similar to Input#thru_unless except a callback can be passed that will be fired when notes specified arrive
|
data/test/context_test.rb
CHANGED
@@ -20,6 +20,16 @@ class ContextTest < Minitest::Test
|
|
20
20
|
assert_equal(0, msg.channel)
|
21
21
|
end
|
22
22
|
|
23
|
+
def test_exception
|
24
|
+
msg = nil
|
25
|
+
m = MIDI::IO.new
|
26
|
+
assert_raises(ArgumentError) do
|
27
|
+
m.edit do
|
28
|
+
msg = m.note
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
23
33
|
def test_edit
|
24
34
|
msg = nil
|
25
35
|
m = MIDI::IO.new
|
data/test/helper.rb
CHANGED
data/test/module_test.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require "helper"
|
2
|
+
|
3
|
+
class ModuleTest < Minitest::Test
|
4
|
+
|
5
|
+
context "MIDI" do
|
6
|
+
|
7
|
+
should "have MIDI module" do
|
8
|
+
refute_nil MIDI
|
9
|
+
assert_equal MicroMIDI, MIDI
|
10
|
+
end
|
11
|
+
|
12
|
+
should "add UniMIDI modules" do
|
13
|
+
assert_equal UniMIDI::Input, MIDI::Input
|
14
|
+
assert_equal UniMIDI::Output, MIDI::Output
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: micromidi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ari Russo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-04-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|
@@ -199,6 +199,7 @@ files:
|
|
199
199
|
- test/helper.rb
|
200
200
|
- test/input_test.rb
|
201
201
|
- test/message_test.rb
|
202
|
+
- test/module_test.rb
|
202
203
|
- test/output_test.rb
|
203
204
|
- test/state_test.rb
|
204
205
|
- test/sticky_test.rb
|