midi-message 0.4.7 → 0.4.8
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/README.md +1 -1
- data/lib/midi-message/constant.rb +53 -34
- data/lib/midi-message.rb +1 -1
- data/test/constant_test.rb +160 -0
- data/test/context_test.rb +111 -60
- data/test/helper.rb +3 -2
- data/test/message_test.rb +2 -0
- metadata +3 -3
- data/test/constants_test.rb +0 -45
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a74063f4fe5e1a622a69fc4c775763f20046defb
|
4
|
+
data.tar.gz: 19638072ab7f93b748d5a435263947ece626f9ea
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f85ede4091a84b04f9f292298205cdd7e8fa7e12c24f27e078de4076ede187f94aad464cec41640dfb7aeaf45b2d010a753a4248441143b1157ea93ff5be0a37
|
7
|
+
data.tar.gz: 5f031bf9d385a268d2c3355f787918bf8f1ebdc65321df5a25b7dfc67bc8d5a000f23851e899310f4ee644c9c8f5d161915ffaf74a4845bd87ad0d3630cc4787
|
data/README.md
CHANGED
@@ -4,16 +4,31 @@ module MIDIMessage
|
|
4
4
|
# eg *C4* for MIDI note *60* or *Bank Select* for MIDI control change *0*
|
5
5
|
module Constant
|
6
6
|
|
7
|
+
# Get a Mapping object for the specified constant
|
8
|
+
# @param [Symbol, String] group_name
|
9
|
+
# @param [String] const_name
|
10
|
+
# @return [MIDIMessage::Constant::Map, nil]
|
7
11
|
def self.find(group_name, const_name)
|
8
12
|
group = Group[group_name]
|
9
13
|
group.find(const_name)
|
10
14
|
end
|
11
15
|
|
16
|
+
# Get the value of the specified constant
|
17
|
+
# @param [Symbol, String] group_name
|
18
|
+
# @param [String] const_name
|
19
|
+
# @return [Object]
|
20
|
+
def self.value(group_name, const_name)
|
21
|
+
map = find(group_name, const_name)
|
22
|
+
map.value
|
23
|
+
end
|
24
|
+
|
12
25
|
# MIDI Constant container
|
13
26
|
class Group
|
14
27
|
|
15
|
-
attr_reader :
|
28
|
+
attr_reader :constants, :key
|
16
29
|
|
30
|
+
# @param [String] key
|
31
|
+
# @param [Hash] constants
|
17
32
|
def initialize(key, constants)
|
18
33
|
@key = key
|
19
34
|
@constants = constants.map { |k, v| Constant::Map.new(k, v) }
|
@@ -25,7 +40,6 @@ module MIDIMessage
|
|
25
40
|
def find(name)
|
26
41
|
@constants.find { |const| const.key.to_s.downcase == name.to_s.downcase }
|
27
42
|
end
|
28
|
-
alias_method :[], :find
|
29
43
|
|
30
44
|
# Find a constant by its value
|
31
45
|
# @param [Object] value
|
@@ -34,45 +48,50 @@ module MIDIMessage
|
|
34
48
|
@constants.find { |const| const.value.to_s.downcase == value.to_s.downcase }
|
35
49
|
end
|
36
50
|
|
37
|
-
|
38
|
-
# @return [Array<ConstantGroup>]
|
39
|
-
def self.all
|
40
|
-
ensure_initialized
|
41
|
-
@groups
|
42
|
-
end
|
51
|
+
class << self
|
43
52
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
end
|
53
|
+
# All constant groups
|
54
|
+
# @return [Array<ConstantGroup>]
|
55
|
+
def all
|
56
|
+
ensure_initialized
|
57
|
+
@groups
|
58
|
+
end
|
51
59
|
|
52
|
-
|
60
|
+
# Find a constant group by its key
|
61
|
+
# @param [String, Symbol] key
|
62
|
+
# @return [ConstantGroup]
|
63
|
+
def find(key)
|
64
|
+
ensure_initialized
|
65
|
+
@groups.find { |g| g.key.to_s.downcase == key.to_s.downcase }
|
66
|
+
end
|
67
|
+
alias_method :[], :find
|
53
68
|
|
54
|
-
|
55
|
-
# @return [Boolean]
|
56
|
-
def self.ensure_initialized
|
57
|
-
populate_dictionary | populate_groups
|
58
|
-
end
|
69
|
+
private
|
59
70
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
@dict = YAML.load_file(File.expand_path('../../midi.yml', __FILE__))
|
65
|
-
true
|
71
|
+
# Lazy initialize
|
72
|
+
# @return [Boolean]
|
73
|
+
def ensure_initialized
|
74
|
+
populate_dictionary | populate_groups
|
66
75
|
end
|
67
|
-
end
|
68
76
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
77
|
+
# Populate the dictionary of constants
|
78
|
+
# @return [Boolean]
|
79
|
+
def populate_dictionary
|
80
|
+
if @dict.nil?
|
81
|
+
@dict = YAML.load_file(File.expand_path('../../midi.yml', __FILE__))
|
82
|
+
true
|
83
|
+
end
|
75
84
|
end
|
85
|
+
|
86
|
+
# Populate the constant groups using the dictionary
|
87
|
+
# @return [Boolean]
|
88
|
+
def populate_groups
|
89
|
+
if @groups.nil? && !@dict.nil?
|
90
|
+
@groups = @dict.map { |k, v| new(k, v) }
|
91
|
+
true
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
76
95
|
end
|
77
96
|
|
78
97
|
end
|
data/lib/midi-message.rb
CHANGED
@@ -0,0 +1,160 @@
|
|
1
|
+
require "helper"
|
2
|
+
|
3
|
+
class ConstantTest < Minitest::Test
|
4
|
+
|
5
|
+
context "Constant" do
|
6
|
+
|
7
|
+
context ".find" do
|
8
|
+
|
9
|
+
setup do
|
10
|
+
@map = MIDIMessage::Constant.find(:note, "C2")
|
11
|
+
end
|
12
|
+
|
13
|
+
should "return constant mapping" do
|
14
|
+
refute_nil @map
|
15
|
+
assert_equal MIDIMessage::Constant::Map, @map.class
|
16
|
+
assert_equal 36, @map.value
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
context ".value" do
|
22
|
+
|
23
|
+
setup do
|
24
|
+
@value = MIDIMessage::Constant.value(:note, "C3")
|
25
|
+
end
|
26
|
+
|
27
|
+
should "return constant value" do
|
28
|
+
refute_nil @value
|
29
|
+
assert_equal 48, @value
|
30
|
+
assert_equal MIDIMessage::NoteOn.new(0, @value, 100).note, @value
|
31
|
+
assert_equal MIDIMessage::NoteOn["C3"].new(0, 100).note, @value
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
context "Group" do
|
37
|
+
|
38
|
+
context "#find" do
|
39
|
+
|
40
|
+
setup do
|
41
|
+
@group = MIDIMessage::Constant::Group.find(:note)
|
42
|
+
@map = @group.find("C3")
|
43
|
+
end
|
44
|
+
|
45
|
+
should "return correct mapping" do
|
46
|
+
refute_nil @map
|
47
|
+
assert_equal MIDIMessage::Constant::Map, @map.class
|
48
|
+
assert_equal 48, @map.value
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
context ".find" do
|
54
|
+
|
55
|
+
setup do
|
56
|
+
@group = MIDIMessage::Constant::Group.find(:note)
|
57
|
+
end
|
58
|
+
|
59
|
+
should "return group object" do
|
60
|
+
refute_nil @group
|
61
|
+
assert_equal MIDIMessage::Constant::Group, @group.class
|
62
|
+
assert_equal "Note", @group.key
|
63
|
+
refute_empty @group.constants
|
64
|
+
assert @group.constants.all? { |c| c.kind_of?(MIDIMessage::Constant::Map) }
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
context "Loader" do
|
72
|
+
|
73
|
+
context "DSL" do
|
74
|
+
|
75
|
+
context "#[]" do
|
76
|
+
|
77
|
+
context "note on" do
|
78
|
+
|
79
|
+
setup do
|
80
|
+
@message = MIDIMessage::NoteOn["c3"].new(0, 100)
|
81
|
+
end
|
82
|
+
|
83
|
+
should "create message object" do
|
84
|
+
assert_equal(MIDIMessage::NoteOn, @message.class)
|
85
|
+
assert_equal("C3", @message.name)
|
86
|
+
assert_equal("C", @message.note_name)
|
87
|
+
assert_equal("Note On: C3", @message.verbose_name)
|
88
|
+
assert_equal([0x90, 0x30, 100], @message.to_a)
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
92
|
+
|
93
|
+
context "note off" do
|
94
|
+
|
95
|
+
setup do
|
96
|
+
@message = MIDIMessage::NoteOff["C2"].new(0, 100)
|
97
|
+
end
|
98
|
+
|
99
|
+
should "create message object" do
|
100
|
+
assert_equal(MIDIMessage::NoteOff, @message.class)
|
101
|
+
assert_equal("C2", @message.name)
|
102
|
+
assert_equal("Note Off: C2", @message.verbose_name)
|
103
|
+
assert_equal([0x80, 0x24, 100], @message.to_a)
|
104
|
+
end
|
105
|
+
|
106
|
+
end
|
107
|
+
|
108
|
+
context "cc" do
|
109
|
+
|
110
|
+
setup do
|
111
|
+
@message = MIDIMessage::ControlChange["Modulation Wheel"].new(2, 0x20)
|
112
|
+
end
|
113
|
+
|
114
|
+
should "create message object" do
|
115
|
+
assert_equal(MIDIMessage::ControlChange, @message.class)
|
116
|
+
assert_equal(@message.channel, 2)
|
117
|
+
assert_equal(0x01, @message.index)
|
118
|
+
assert_equal(0x20, @message.value)
|
119
|
+
assert_equal([0xB2, 0x01, 0x20], @message.to_a)
|
120
|
+
end
|
121
|
+
|
122
|
+
end
|
123
|
+
|
124
|
+
context "system realtime" do
|
125
|
+
|
126
|
+
setup do
|
127
|
+
@message = MIDIMessage::SystemRealtime["Stop"].new
|
128
|
+
end
|
129
|
+
|
130
|
+
should "create message object" do
|
131
|
+
assert_equal(MIDIMessage::SystemRealtime, @message.class)
|
132
|
+
assert_equal("Stop", @message.name)
|
133
|
+
assert_equal([0xFC], @message.to_a)
|
134
|
+
end
|
135
|
+
|
136
|
+
end
|
137
|
+
|
138
|
+
context "system common" do
|
139
|
+
|
140
|
+
setup do
|
141
|
+
@message = MIDIMessage::SystemCommon["Song Select"].new
|
142
|
+
end
|
143
|
+
|
144
|
+
should "create message object" do
|
145
|
+
assert_equal(MIDIMessage::SystemCommon, @message.class)
|
146
|
+
assert_equal("Song Select", @message.name)
|
147
|
+
assert_equal([0xF3], @message.to_a)
|
148
|
+
end
|
149
|
+
|
150
|
+
end
|
151
|
+
|
152
|
+
end
|
153
|
+
|
154
|
+
end
|
155
|
+
|
156
|
+
end
|
157
|
+
|
158
|
+
end
|
159
|
+
|
160
|
+
end
|
data/test/context_test.rb
CHANGED
@@ -2,81 +2,132 @@ require "helper"
|
|
2
2
|
|
3
3
|
class ContextTest < Minitest::Test
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
context "Context" do
|
6
|
+
|
7
|
+
context "note off" do
|
8
|
+
|
9
|
+
setup do
|
10
|
+
@message = MIDIMessage.with(:channel => 0, :velocity => 64) do
|
11
|
+
note_off(55)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
should "create message object" do
|
16
|
+
assert_equal(0, @message.channel)
|
17
|
+
assert_equal(55, @message.note)
|
18
|
+
assert_equal(64, @message.velocity)
|
19
|
+
assert_equal([128, 55, 64], @message.to_a)
|
20
|
+
assert_equal("803740", @message.to_bytestr)
|
21
|
+
end
|
22
|
+
|
8
23
|
end
|
9
|
-
assert_equal(0, msg.channel)
|
10
|
-
assert_equal(55, msg.note)
|
11
|
-
assert_equal(64, msg.velocity)
|
12
|
-
assert_equal([128, 55, 64], msg.to_a)
|
13
|
-
assert_equal("803740", msg.to_bytestr)
|
14
|
-
end
|
15
24
|
|
16
|
-
|
17
|
-
|
18
|
-
|
25
|
+
context "note on" do
|
26
|
+
|
27
|
+
setup do
|
28
|
+
@message = MIDIMessage.with(:channel => 0, :velocity => 64) do
|
29
|
+
note_on(55)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
should "create message object" do
|
34
|
+
assert_equal(0, @message.channel)
|
35
|
+
assert_equal(55, @message.note)
|
36
|
+
assert_equal(64, @message.velocity)
|
37
|
+
assert_equal([144, 55, 64], @message.to_a)
|
38
|
+
assert_equal("903740", @message.to_bytestr)
|
39
|
+
end
|
40
|
+
|
19
41
|
end
|
20
|
-
assert_equal(0, msg.channel)
|
21
|
-
assert_equal(55, msg.note)
|
22
|
-
assert_equal(64, msg.velocity)
|
23
|
-
assert_equal([144, 55, 64], msg.to_a)
|
24
|
-
assert_equal("903740", msg.to_bytestr)
|
25
|
-
end
|
26
42
|
|
27
|
-
|
28
|
-
|
29
|
-
|
43
|
+
context "cc" do
|
44
|
+
|
45
|
+
setup do
|
46
|
+
@message = MIDIMessage.with(:channel => 2) do
|
47
|
+
control_change(0x20, 0x30)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
should "create message object" do
|
52
|
+
assert_equal(@message.channel, 2)
|
53
|
+
assert_equal(0x20, @message.index)
|
54
|
+
assert_equal(0x30, @message.value)
|
55
|
+
assert_equal([0xB2, 0x20, 0x30], @message.to_a)
|
56
|
+
assert_equal("B22030", @message.to_bytestr)
|
57
|
+
end
|
58
|
+
|
30
59
|
end
|
31
|
-
assert_equal(msg.channel, 2)
|
32
|
-
assert_equal(0x20, msg.index)
|
33
|
-
assert_equal(0x30, msg.value)
|
34
|
-
assert_equal([0xB2, 0x20, 0x30], msg.to_a)
|
35
|
-
assert_equal("B22030", msg.to_bytestr)
|
36
60
|
|
37
|
-
|
61
|
+
context "polyphonic aftertouch" do
|
62
|
+
|
63
|
+
setup do
|
64
|
+
@message = MIDIMessage.with(:channel => 1) do
|
65
|
+
polyphonic_aftertouch(0x40, 0x40)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
should "create message object" do
|
70
|
+
assert_equal(1, @message.channel)
|
71
|
+
assert_equal(0x40, @message.note)
|
72
|
+
assert_equal(0x40, @message.value)
|
73
|
+
assert_equal([0xA1, 0x40, 0x40], @message.to_a)
|
74
|
+
assert_equal("A14040", @message.to_bytestr)
|
75
|
+
end
|
38
76
|
|
39
|
-
def test_polyphonic_aftertouch
|
40
|
-
msg = MIDIMessage.with(:channel => 1) do
|
41
|
-
polyphonic_aftertouch(0x40, 0x40)
|
42
77
|
end
|
43
|
-
assert_equal(1, msg.channel)
|
44
|
-
assert_equal(0x40, msg.note)
|
45
|
-
assert_equal(0x40, msg.value)
|
46
|
-
assert_equal([0xA1, 0x40, 0x40], msg.to_a)
|
47
|
-
assert_equal("A14040", msg.to_bytestr)
|
48
|
-
end
|
49
78
|
|
50
|
-
|
51
|
-
|
52
|
-
|
79
|
+
context "program change" do
|
80
|
+
|
81
|
+
setup do
|
82
|
+
@message = MIDIMessage.with(:channel => 3) do
|
83
|
+
program_change(0x40)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
should "create message object" do
|
88
|
+
assert_equal(3, @message.channel)
|
89
|
+
assert_equal(0x40, @message.program)
|
90
|
+
assert_equal([0xC3, 0x40], @message.to_a)
|
91
|
+
assert_equal("C340", @message.to_bytestr)
|
92
|
+
end
|
93
|
+
|
53
94
|
end
|
54
|
-
assert_equal(3, msg.channel)
|
55
|
-
assert_equal(0x40, msg.program)
|
56
|
-
assert_equal([0xC3, 0x40], msg.to_a)
|
57
|
-
assert_equal("C340", msg.to_bytestr)
|
58
95
|
|
59
|
-
|
96
|
+
context "channel aftertouch" do
|
97
|
+
|
98
|
+
setup do
|
99
|
+
@message = MIDIMessage.with(:channel => 3) do
|
100
|
+
channel_aftertouch(0x50)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
should "create message object" do
|
105
|
+
assert_equal(3, @message.channel)
|
106
|
+
assert_equal(0x50, @message.value)
|
107
|
+
assert_equal([0xD3, 0x50], @message.to_a)
|
108
|
+
assert_equal("D350", @message.to_bytestr)
|
109
|
+
end
|
60
110
|
|
61
|
-
def test_channel_aftertouch
|
62
|
-
msg = MIDIMessage.with(:channel => 3) do
|
63
|
-
channel_aftertouch(0x50)
|
64
111
|
end
|
65
|
-
assert_equal(3, msg.channel)
|
66
|
-
assert_equal(0x50, msg.value)
|
67
|
-
assert_equal([0xD3, 0x50], msg.to_a)
|
68
|
-
assert_equal("D350", msg.to_bytestr)
|
69
|
-
end
|
70
112
|
|
71
|
-
|
72
|
-
|
73
|
-
|
113
|
+
context "pitch bend" do
|
114
|
+
|
115
|
+
setup do
|
116
|
+
@message = MIDIMessage.with(:channel => 0) do
|
117
|
+
pitch_bend(0x50, 0xA0)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
should "create message object" do
|
122
|
+
assert_equal(0, @message.channel)
|
123
|
+
assert_equal(0x50, @message.low)
|
124
|
+
assert_equal(0xA0, @message.high)
|
125
|
+
assert_equal([0xE0, 0x50, 0xA0], @message.to_a)
|
126
|
+
assert_equal("E050A0", @message.to_bytestr)
|
127
|
+
end
|
128
|
+
|
74
129
|
end
|
75
|
-
|
76
|
-
assert_equal(0x50, msg.low)
|
77
|
-
assert_equal(0xA0, msg.high)
|
78
|
-
assert_equal([0xE0, 0x50, 0xA0], msg.to_a)
|
79
|
-
assert_equal("E050A0", msg.to_bytestr)
|
130
|
+
|
80
131
|
end
|
81
132
|
|
82
133
|
end
|
data/test/helper.rb
CHANGED
data/test/message_test.rb
CHANGED
@@ -4,6 +4,8 @@ class ShortMessageTest < Minitest::Test
|
|
4
4
|
|
5
5
|
def test_channel_message
|
6
6
|
message = MIDIMessage::ChannelMessage.new(0x9, 0x0, 0x40, 0x40)
|
7
|
+
refute_nil message
|
8
|
+
assert message.kind_of?(MIDIMessage)
|
7
9
|
assert_equal(0x9, message.status[0])
|
8
10
|
assert_equal(0x0, message.status[1])
|
9
11
|
assert_equal(0x40, message.data[0])
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: midi-message
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.8
|
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-05-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|
@@ -111,7 +111,7 @@ files:
|
|
111
111
|
- lib/midi-message/system_message.rb
|
112
112
|
- lib/midi-message/type_conversion.rb
|
113
113
|
- lib/midi.yml
|
114
|
-
- test/
|
114
|
+
- test/constant_test.rb
|
115
115
|
- test/context_test.rb
|
116
116
|
- test/helper.rb
|
117
117
|
- test/message_test.rb
|
data/test/constants_test.rb
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
require "helper"
|
2
|
-
|
3
|
-
class ConstantsTest < Minitest::Test
|
4
|
-
|
5
|
-
def test_note_on
|
6
|
-
msg = MIDIMessage::NoteOn["c3"].new(0, 100)
|
7
|
-
assert_equal(MIDIMessage::NoteOn, msg.class)
|
8
|
-
assert_equal("C3", msg.name)
|
9
|
-
assert_equal("C", msg.note_name)
|
10
|
-
assert_equal("Note On: C3", msg.verbose_name)
|
11
|
-
assert_equal([0x90, 0x30, 100], msg.to_a)
|
12
|
-
end
|
13
|
-
|
14
|
-
def test_note_off
|
15
|
-
msg = MIDIMessage::NoteOff["C2"].new(0, 100)
|
16
|
-
assert_equal(MIDIMessage::NoteOff, msg.class)
|
17
|
-
assert_equal("C2", msg.name)
|
18
|
-
assert_equal("Note Off: C2", msg.verbose_name)
|
19
|
-
assert_equal([0x80, 0x24, 100], msg.to_a)
|
20
|
-
end
|
21
|
-
|
22
|
-
def test_control_change
|
23
|
-
msg = MIDIMessage::ControlChange["Modulation Wheel"].new(2, 0x20)
|
24
|
-
assert_equal(MIDIMessage::ControlChange, msg.class)
|
25
|
-
assert_equal(msg.channel, 2)
|
26
|
-
assert_equal(0x01, msg.index)
|
27
|
-
assert_equal(0x20, msg.value)
|
28
|
-
assert_equal([0xB2, 0x01, 0x20], msg.to_a)
|
29
|
-
end
|
30
|
-
|
31
|
-
def test_system_realtime
|
32
|
-
msg = MIDIMessage::SystemRealtime["Stop"].new
|
33
|
-
assert_equal(MIDIMessage::SystemRealtime, msg.class)
|
34
|
-
assert_equal("Stop", msg.name)
|
35
|
-
assert_equal([0xFC], msg.to_a)
|
36
|
-
end
|
37
|
-
|
38
|
-
def test_system_common
|
39
|
-
msg = MIDIMessage::SystemCommon["Song Select"].new
|
40
|
-
assert_equal(MIDIMessage::SystemCommon, msg.class)
|
41
|
-
assert_equal("Song Select", msg.name)
|
42
|
-
assert_equal([0xF3], msg.to_a)
|
43
|
-
end
|
44
|
-
|
45
|
-
end
|