midi-message 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []