midi-message 0.2.2

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.
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'helper'
4
+
5
+ class ProcessorTest < Test::Unit::TestCase
6
+
7
+ include MIDIMessage
8
+ include MIDIMessage::Process
9
+ include TestHelper
10
+
11
+ def test_class_method
12
+ msg = MIDIMessage::NoteOn["C4"].new(0, 100)
13
+ assert_equal(60, msg.note)
14
+ Transpose.process(msg, :note, 5)
15
+ assert_equal(65, msg.note)
16
+ end
17
+
18
+
19
+ end
@@ -0,0 +1,123 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'helper'
4
+
5
+ class ShortMessageTest < Test::Unit::TestCase
6
+
7
+ include MIDIMessage
8
+ include TestHelper
9
+
10
+ def test_channel_message
11
+ msg = ChannelMessage.new(0x9, 0x0, 0x40, 0x40)
12
+ assert_equal(0x9, msg.status[0])
13
+ assert_equal(0x0, msg.status[1])
14
+ assert_equal(0x40, msg.data[0])
15
+ assert_equal(0x40, msg.data[1])
16
+ assert_equal([0x90, 0x40, 0x40], msg.to_a)
17
+ assert_equal("904040", msg.to_bytestr)
18
+ end
19
+
20
+ def test_to_type
21
+ msg = ChannelMessage.new(0x9, 0x0, 0x40, 0x40)
22
+ typemsg = msg.to_type
23
+ assert_equal(NoteOn, typemsg.class)
24
+ assert_equal(msg.status[1], typemsg.channel)
25
+ assert_equal(msg.data[0], typemsg.note)
26
+ assert_equal(msg.data[1], typemsg.velocity)
27
+ assert_equal(msg.to_a, typemsg.to_a)
28
+ assert_equal(msg.to_bytestr, typemsg.to_bytestr)
29
+ end
30
+
31
+ def test_note_off
32
+ msg = NoteOff.new(0, 0x40, 0x40)
33
+ assert_equal(0, msg.channel)
34
+ assert_equal(0x40, msg.note)
35
+ assert_equal(0x40, msg.velocity)
36
+ assert_equal([0x80, 0x40, 0x40], msg.to_a)
37
+ assert_equal("804040", msg.to_bytestr)
38
+ end
39
+
40
+ def test_note_on
41
+ msg = NoteOn.new(0, 0x40, 0x40)
42
+ assert_equal(0, msg.channel)
43
+ assert_equal(0x40, msg.note)
44
+ assert_equal(0x40, msg.velocity)
45
+ assert_equal([0x90, 0x40, 0x40], msg.to_a)
46
+ assert_equal("904040", msg.to_bytestr)
47
+ end
48
+
49
+ def test_note_on_to_note_off
50
+ msg = NoteOn.new(0, 0x40, 0x40)
51
+ assert_equal(0, msg.channel)
52
+ assert_equal(0x40, msg.note)
53
+ assert_equal(0x40, msg.velocity)
54
+ assert_equal([0x90, 0x40, 0x40], msg.to_a)
55
+ off = msg.to_note_off
56
+ assert_equal(0, off.channel)
57
+ assert_equal(0x40, off.note)
58
+ assert_equal(0x40, off.velocity)
59
+ assert_equal([0x80, 0x40, 0x40], off.to_a)
60
+ end
61
+
62
+
63
+ def test_polyphonic_aftertouch
64
+ msg = PolyphonicAftertouch.new(1, 0x40, 0x40)
65
+ assert_equal(1, msg.channel)
66
+ assert_equal(0x40, msg.note)
67
+ assert_equal(0x40, msg.value)
68
+ assert_equal([0xA1, 0x40, 0x40], msg.to_a)
69
+ assert_equal("A14040", msg.to_bytestr)
70
+ end
71
+
72
+ def test_control_change
73
+ msg = ControlChange.new(2, 0x20, 0x20)
74
+ assert_equal(msg.channel, 2)
75
+ assert_equal(0x20, msg.index)
76
+ assert_equal(0x20, msg.value)
77
+ assert_equal([0xB2, 0x20, 0x20], msg.to_a)
78
+ assert_equal("B22020", msg.to_bytestr)
79
+ end
80
+
81
+ def test_program_change
82
+ msg = ProgramChange.new(3, 0x40)
83
+ assert_equal(3, msg.channel)
84
+ assert_equal(0x40, msg.program)
85
+ assert_equal([0xC3, 0x40], msg.to_a)
86
+ assert_equal("C340", msg.to_bytestr)
87
+
88
+ end
89
+
90
+ def test_channel_aftertouch
91
+ msg = ChannelAftertouch.new(3, 0x50)
92
+ assert_equal(3, msg.channel)
93
+ assert_equal(0x50, msg.value)
94
+ assert_equal([0xD3, 0x50], msg.to_a)
95
+ assert_equal("D350", msg.to_bytestr)
96
+ end
97
+
98
+ def test_pitch_bend
99
+ msg = MIDIMessage::PitchBend.new(0, 0x50, 0xA0)
100
+ assert_equal(0, msg.channel)
101
+ assert_equal(0x50, msg.low)
102
+ assert_equal(0xA0, msg.high)
103
+ assert_equal([0xE0, 0x50, 0xA0], msg.to_a)
104
+ assert_equal("E050A0", msg.to_bytestr)
105
+ end
106
+
107
+ def test_system_common
108
+ msg = SystemCommon.new(1, 0x50, 0xA0)
109
+ assert_equal(1, msg.status[1])
110
+ assert_equal(0x50, msg.data[0])
111
+ assert_equal(0xA0, msg.data[1])
112
+ assert_equal([0xF1, 0x50, 0xA0], msg.to_a)
113
+ assert_equal("F150A0", msg.to_bytestr)
114
+ end
115
+
116
+ def test_system_realtime
117
+ msg = SystemRealtime.new(0x8)
118
+ assert_equal(8, msg.id)
119
+ assert_equal([0xF8], msg.to_a)
120
+ assert_equal("F8", msg.to_bytestr)
121
+ end
122
+
123
+ end
@@ -0,0 +1,100 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'helper'
4
+
5
+ class SystemExclusiveMessageTest < Test::Unit::TestCase
6
+
7
+ include MIDIMessage
8
+ include TestHelper
9
+
10
+ def test_node
11
+ node = SystemExclusive::Node.new(0x41, :model_id => 0x42, :device_id => 0x10)
12
+ assert_equal(0x41, node.manufacturer_id)
13
+ assert_equal(0x42, node.model_id)
14
+ assert_equal(0x10, node.device_id)
15
+ end
16
+
17
+ def test_node_manufacturer_constant
18
+ node = SystemExclusive::Node.new(:Roland, :model_id => 0x42, :device_id => 0x10)
19
+ assert_equal(0x41, node.manufacturer_id)
20
+ assert_equal(0x42, node.model_id)
21
+ assert_equal(0x10, node.device_id)
22
+ end
23
+
24
+ def test_new
25
+ msg = SystemExclusive.new(0xF0, 0x41, 0x10, 0x42, 0x12, 0x40, 0x00, 0x7F, 0x10, 0x41, 0xF7)
26
+ assert_equal(0x41, msg.node.manufacturer_id)
27
+ assert_equal(0x42, msg.node.model_id)
28
+ assert_equal(0x10, msg.node.device_id)
29
+ assert_equal([0x40, 0x00, 0x7F], msg.address)
30
+ assert_equal(0x10, msg.data)
31
+ end
32
+
33
+ def test_command
34
+ node = SystemExclusive::Node.new(0x41, :model_id => 0x42, :device_id => 0x10)
35
+ msg = SystemExclusive::Command.new([0x40, 0x7F, 0x00], 0x10, :node => node)
36
+ assert_equal(node, msg.node)
37
+ assert_equal([0x40, 0x7F, 0x00], msg.address)
38
+ assert_equal(0x10, msg.data)
39
+ end
40
+
41
+ def test_request_byte_size
42
+ node = SystemExclusive::Node.new(0x41, :model_id => 0x42, :device_id => 0x10)
43
+ msg = SystemExclusive::Request.new([0x40, 0x7F, 0x00], 0x10, :node => node)
44
+ assert_equal(node, msg.node)
45
+ assert_equal([0x40, 0x7F, 0x00], msg.address)
46
+ assert_equal([0x0, 0x0, 0x10], msg.size)
47
+ end
48
+
49
+ def test_request_array_size
50
+ node = SystemExclusive::Node.new(0x41, :model_id => 0x42, :device_id => 0x10)
51
+ msg = SystemExclusive::Request.new([0x40, 0x7F, 0x00], [0x0, 0x9, 0x10], :node => node)
52
+ assert_equal(node, msg.node)
53
+ assert_equal([0x40, 0x7F, 0x00], msg.address)
54
+ assert_equal([0x0, 0x9, 0x10], msg.size)
55
+ end
56
+
57
+ def test_request_numeric_size
58
+ node = SystemExclusive::Node.new(0x41, :model_id => 0x42, :device_id => 0x10)
59
+ msg = SystemExclusive::Request.new([0x40, 0x7F, 0x00], 300, :node => node)
60
+ assert_equal(node, msg.node)
61
+ assert_equal([0x40, 0x7F, 0x00], msg.address)
62
+ assert_equal([0x0, 0x35, 0xF7], msg.size)
63
+ end
64
+
65
+ def test_node_oriented
66
+ node = SystemExclusive::Node.new(0x41, :model_id => 0x42, :device_id => 0x10)
67
+ msg = node.request([0x40, 0x7F, 0x00], 0x10)
68
+ assert_equal(node, msg.node)
69
+ assert_equal([0x40, 0x7F, 0x00], msg.address)
70
+ assert_equal([0x0, 0x0, 0x10], msg.size)
71
+ end
72
+
73
+ def test_prototype
74
+ prototype = SystemExclusive::Request.new([0x40, 0x7F, 0x00], 0x10)
75
+ node = SystemExclusive::Node.new(0x41, :model_id => 0x42, :device_id => 0x10)
76
+ msg = node.new_message_from(prototype)
77
+ assert_equal(node, msg.node)
78
+ assert_equal(prototype.address, msg.address)
79
+ assert_equal(prototype.size, msg.size)
80
+ end
81
+
82
+ def test_checksum
83
+ node = SystemExclusive::Node.new(0x41, :model_id => 0x42, :device_id => 0x10)
84
+ msg = SystemExclusive::Command.new([0x40, 0x00, 0x7F], 0x00, :node => node)
85
+ assert_equal(0x41, msg.checksum)
86
+ end
87
+
88
+ def test_to_a
89
+ node = SystemExclusive::Node.new(0x41, :model_id => 0x42, :device_id => 0x10)
90
+ msg = SystemExclusive::Command.new([0x40, 0x00, 0x7F], 0x00, :node => node)
91
+ assert_equal([0xF0, 0x41, 0x10, 0x42, 0x12, 0x40, 0x00, 0x7F, 0x00, 0x41, 0xF7], msg.to_bytes)
92
+ end
93
+
94
+ def test_to_s
95
+ node = SystemExclusive::Node.new(0x41, :model_id => 0x42, :device_id => 0x10)
96
+ msg = SystemExclusive::Command.new([0x40, 0x00, 0x7F], 0x00, :node => node)
97
+ assert_equal("F04110421240007F0041F7", msg.to_bytestr)
98
+ end
99
+
100
+ end
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'helper'
4
+
5
+ class TransposeTest < Test::Unit::TestCase
6
+
7
+ include MIDIMessage
8
+ include MIDIMessage::Process
9
+ include TestHelper
10
+
11
+ def test_transpose_note_up
12
+ msg = MIDIMessage::NoteOn["C4"].new(0, 100)
13
+ assert_equal(60, msg.note)
14
+ Transpose.new(msg, :note, 5).process
15
+ assert_equal(65, msg.note)
16
+ end
17
+
18
+ def test_transpose_velocity_up
19
+ msg = MIDIMessage::NoteOn["C4"].new(0, 82)
20
+ assert_equal(82, msg.velocity)
21
+ Transpose.new(msg, :velocity, 10).process
22
+ assert_equal(92, msg.velocity)
23
+ end
24
+
25
+ def test_transpose_note_down
26
+ msg = MIDIMessage::NoteOn["C4"].new(0, 100)
27
+ assert_equal(60, msg.note)
28
+ Transpose.new(msg, :note, -5).process
29
+ assert_equal(55, msg.note)
30
+ end
31
+
32
+ def test_transpose_velocity_down
33
+ msg = MIDIMessage::NoteOn["C4"].new(0, 82)
34
+ assert_equal(82, msg.velocity)
35
+ Transpose.new(msg, :velocity, -10).process
36
+ assert_equal(72, msg.velocity)
37
+ end
38
+
39
+ end
metadata ADDED
@@ -0,0 +1,74 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: midi-message
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Ari Russo
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-09-10 00:00:00.000000000Z
13
+ dependencies: []
14
+ description: MIDI messages, objectified in Ruby
15
+ email:
16
+ - ari.russo@gmail.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - lib/midi-message/channel_message.rb
22
+ - lib/midi-message/constant.rb
23
+ - lib/midi-message/context.rb
24
+ - lib/midi-message/note_message.rb
25
+ - lib/midi-message/parser.rb
26
+ - lib/midi-message/process/filter.rb
27
+ - lib/midi-message/process/limit.rb
28
+ - lib/midi-message/process/processor.rb
29
+ - lib/midi-message/process/transpose.rb
30
+ - lib/midi-message/short_message.rb
31
+ - lib/midi-message/system_exclusive.rb
32
+ - lib/midi-message/system_message.rb
33
+ - lib/midi-message/type_conversion.rb
34
+ - lib/midi-message.rb
35
+ - lib/midi.yml
36
+ - test/helper.rb
37
+ - test/test_constants.rb
38
+ - test/test_context.rb
39
+ - test/test_filter.rb
40
+ - test/test_limit.rb
41
+ - test/test_mutability.rb
42
+ - test/test_parser.rb
43
+ - test/test_processor.rb
44
+ - test/test_short_message.rb
45
+ - test/test_system_exclusive.rb
46
+ - test/test_transpose.rb
47
+ - LICENSE
48
+ - README.rdoc
49
+ - TODO
50
+ homepage: http://github.com/arirusso/midi-message
51
+ licenses: []
52
+ post_install_message:
53
+ rdoc_options: []
54
+ require_paths:
55
+ - lib
56
+ required_ruby_version: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ required_rubygems_version: !ruby/object:Gem::Requirement
63
+ none: false
64
+ requirements:
65
+ - - ! '>='
66
+ - !ruby/object:Gem::Version
67
+ version: 1.3.6
68
+ requirements: []
69
+ rubyforge_project: midi-message
70
+ rubygems_version: 1.8.6
71
+ signing_key:
72
+ specification_version: 3
73
+ summary: MIDI messages, objectified in Ruby
74
+ test_files: []