unimidi 0.4.6 → 0.5.1
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 +5 -5
- data/LICENSE +1 -1
- data/README.md +8 -11
- data/lib/unimidi/adapter/alsa-rawmidi.rb +3 -10
- data/lib/unimidi/adapter/ffi-coremidi.rb +4 -10
- data/lib/unimidi/adapter/midi-jruby.rb +4 -10
- data/lib/unimidi/adapter/midi-winmm.rb +4 -10
- data/lib/unimidi/command.rb +9 -11
- data/lib/unimidi/device.rb +35 -26
- data/lib/unimidi/input/buffer_access.rb +46 -0
- data/lib/unimidi/input/stream_reader.rb +81 -0
- data/lib/unimidi/input.rb +8 -101
- data/lib/unimidi/loader.rb +23 -23
- data/lib/unimidi/output.rb +12 -14
- data/lib/unimidi/platform.rb +23 -17
- data/lib/unimidi/type_conversion.rb +5 -7
- data/lib/unimidi.rb +13 -11
- metadata +36 -62
- data/test/adapter_test.rb +0 -66
- data/test/class_methods_test.rb +0 -95
- data/test/functional_test.rb +0 -113
- data/test/helper.rb +0 -74
- data/test/input_test.rb +0 -44
- data/test/platform_test.rb +0 -47
- data/test/type_conversion_test.rb +0 -18
data/test/functional_test.rb
DELETED
@@ -1,113 +0,0 @@
|
|
1
|
-
require "helper"
|
2
|
-
|
3
|
-
class UniMIDI::FunctionalTest < Minitest::Test
|
4
|
-
|
5
|
-
# ** these tests assume that TestOutput is connected to TestInput
|
6
|
-
context "UniMIDI" do
|
7
|
-
|
8
|
-
setup do
|
9
|
-
@input = TestHelper.devices[:input].open
|
10
|
-
@output = TestHelper.devices[:output].open
|
11
|
-
end
|
12
|
-
|
13
|
-
teardown do
|
14
|
-
@input.close
|
15
|
-
@output.close
|
16
|
-
end
|
17
|
-
|
18
|
-
context "full IO" do
|
19
|
-
|
20
|
-
context "using numeric bytes" do
|
21
|
-
|
22
|
-
setup do
|
23
|
-
@messages = TestHelper.numeric_messages
|
24
|
-
@messages_arr = @messages.inject(&:+).flatten
|
25
|
-
@received_arr = []
|
26
|
-
@pointer = 0
|
27
|
-
end
|
28
|
-
|
29
|
-
should "do IO" do
|
30
|
-
|
31
|
-
@messages.each do |message|
|
32
|
-
p "sending: #{message}"
|
33
|
-
|
34
|
-
@output.puts(message)
|
35
|
-
sleep(1)
|
36
|
-
received = @input.gets.map { |m| m[:data] }.flatten
|
37
|
-
|
38
|
-
p "received: #{received}"
|
39
|
-
|
40
|
-
assert_equal(@messages_arr.slice(@pointer, received.length), received)
|
41
|
-
@pointer += received.length
|
42
|
-
@received_arr += received
|
43
|
-
end
|
44
|
-
assert_equal(@messages_arr.length, @received_arr.length)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
context "using byte Strings" do
|
49
|
-
|
50
|
-
setup do
|
51
|
-
@messages = TestHelper.string_messages
|
52
|
-
@messages_str = @messages.join
|
53
|
-
@received_str = ""
|
54
|
-
@pointer = 0
|
55
|
-
end
|
56
|
-
|
57
|
-
should "do IO" do
|
58
|
-
|
59
|
-
@messages.each do |message|
|
60
|
-
|
61
|
-
p "sending: #{message}"
|
62
|
-
|
63
|
-
@output.puts(message)
|
64
|
-
sleep(1)
|
65
|
-
received = @input.gets_bytestr.map { |m| m[:data] }.flatten.join
|
66
|
-
p "received: #{received}"
|
67
|
-
|
68
|
-
assert_equal(@messages_str.slice(@pointer, received.length), received)
|
69
|
-
@pointer += received.length
|
70
|
-
@received_str += received
|
71
|
-
end
|
72
|
-
assert_equal(@messages_str, @received_str)
|
73
|
-
|
74
|
-
end
|
75
|
-
|
76
|
-
end
|
77
|
-
|
78
|
-
context "using MIDIMessages" do
|
79
|
-
|
80
|
-
setup do
|
81
|
-
@messages = TestHelper.message_objects
|
82
|
-
@messages_arr = @messages.map(&:to_bytes).flatten
|
83
|
-
@received_arr = []
|
84
|
-
@pointer = 0
|
85
|
-
end
|
86
|
-
|
87
|
-
should "do IO" do
|
88
|
-
|
89
|
-
@messages.each do |message|
|
90
|
-
|
91
|
-
p "sending: #{message}"
|
92
|
-
|
93
|
-
@output.puts(message)
|
94
|
-
sleep(1)
|
95
|
-
received = @input.gets.map { |m| m[:data] }.flatten
|
96
|
-
|
97
|
-
p "received: #{received}"
|
98
|
-
|
99
|
-
assert_equal(@messages_arr.slice(@pointer, received.length), received)
|
100
|
-
@pointer += received.length
|
101
|
-
@received_arr += received
|
102
|
-
end
|
103
|
-
assert_equal(@messages_arr.length, @received_arr.length)
|
104
|
-
|
105
|
-
end
|
106
|
-
|
107
|
-
end
|
108
|
-
|
109
|
-
end
|
110
|
-
|
111
|
-
end
|
112
|
-
|
113
|
-
end
|
data/test/helper.rb
DELETED
@@ -1,74 +0,0 @@
|
|
1
|
-
dir = File.dirname(File.expand_path(__FILE__))
|
2
|
-
$LOAD_PATH.unshift dir + '/../lib'
|
3
|
-
|
4
|
-
require "minitest/autorun"
|
5
|
-
require "mocha/test_unit"
|
6
|
-
require "shoulda-context"
|
7
|
-
require "unimidi"
|
8
|
-
|
9
|
-
module TestHelper
|
10
|
-
|
11
|
-
extend self
|
12
|
-
|
13
|
-
def sysex_ok?
|
14
|
-
ENV["_system_name"] != "OSX" || !RUBY_PLATFORM.include?("java")
|
15
|
-
end
|
16
|
-
|
17
|
-
def devices
|
18
|
-
if @devices.nil?
|
19
|
-
@devices = {}
|
20
|
-
{ :input => UniMIDI::Input, :output => UniMIDI::Output }.each do |type, klass|
|
21
|
-
@devices[type] = klass.gets
|
22
|
-
end
|
23
|
-
end
|
24
|
-
@devices
|
25
|
-
end
|
26
|
-
|
27
|
-
def bytestrs_to_ints(arr)
|
28
|
-
data = arr.map { |m| m[:data] }.join
|
29
|
-
output = []
|
30
|
-
until (bytestr = data.slice!(0,2)).eql?("")
|
31
|
-
output << bytestr.hex
|
32
|
-
end
|
33
|
-
output
|
34
|
-
end
|
35
|
-
|
36
|
-
class MIDIObj
|
37
|
-
def initialize(*bytes)
|
38
|
-
@bytes = bytes
|
39
|
-
end
|
40
|
-
def to_bytes
|
41
|
-
@bytes
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def message_objects
|
46
|
-
numeric_messages.map { |message| MIDIObj.new(*message) }
|
47
|
-
end
|
48
|
-
|
49
|
-
def numeric_messages
|
50
|
-
messages = [
|
51
|
-
[0x90, 100, 100], # note on
|
52
|
-
[0x90, 43, 100], # note on
|
53
|
-
[0x90, 76, 100], # note on
|
54
|
-
[0x90, 60, 100], # note on
|
55
|
-
[0x80, 100, 100] # note off
|
56
|
-
]
|
57
|
-
if sysex_ok?
|
58
|
-
messages << [0xF0, 0x41, 0x10, 0x42, 0x12, 0x40, 0x00, 0x7F, 0x00, 0x41, 0xF7]
|
59
|
-
end
|
60
|
-
messages
|
61
|
-
end
|
62
|
-
|
63
|
-
def string_messages
|
64
|
-
messages = [
|
65
|
-
"906440", # note on
|
66
|
-
"804340" # note off
|
67
|
-
]
|
68
|
-
if sysex_ok?
|
69
|
-
messages << "F04110421240007F0041F7"
|
70
|
-
end
|
71
|
-
messages
|
72
|
-
end
|
73
|
-
|
74
|
-
end
|
data/test/input_test.rb
DELETED
@@ -1,44 +0,0 @@
|
|
1
|
-
require 'helper'
|
2
|
-
|
3
|
-
class UniMIDI::InputTest < Minitest::Test
|
4
|
-
|
5
|
-
context "Input" do
|
6
|
-
|
7
|
-
context "#buffer" do
|
8
|
-
|
9
|
-
setup do
|
10
|
-
sleep(1)
|
11
|
-
@input = TestHelper.devices[:input].open
|
12
|
-
@output = TestHelper.devices[:output].open
|
13
|
-
@messages = TestHelper.numeric_messages
|
14
|
-
@bytes = []
|
15
|
-
end
|
16
|
-
|
17
|
-
teardown do
|
18
|
-
@input.close
|
19
|
-
@output.close
|
20
|
-
end
|
21
|
-
|
22
|
-
should "add received messages to the buffer" do
|
23
|
-
|
24
|
-
@input.buffer.clear
|
25
|
-
|
26
|
-
@messages.each do |message|
|
27
|
-
|
28
|
-
p "sending: #{message}"
|
29
|
-
@output.puts(message)
|
30
|
-
@bytes += message
|
31
|
-
sleep(1)
|
32
|
-
buffer = @input.buffer.map { |m| m[:data] }.flatten
|
33
|
-
p "received: #{buffer}"
|
34
|
-
assert_equal(@bytes, buffer)
|
35
|
-
|
36
|
-
end
|
37
|
-
|
38
|
-
assert_equal(@bytes.length, @input.buffer.map { |m| m[:data] }.flatten.length)
|
39
|
-
|
40
|
-
end
|
41
|
-
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
data/test/platform_test.rb
DELETED
@@ -1,47 +0,0 @@
|
|
1
|
-
require 'helper'
|
2
|
-
|
3
|
-
class UniMIDI::PlatformTest < Minitest::Test
|
4
|
-
|
5
|
-
def platform_test(adapter, mod, device_class = nil, input_class = nil, output_class = nil)
|
6
|
-
device_class ||= mod::Device
|
7
|
-
input_class ||= mod::Input
|
8
|
-
output_class ||= mod::Output
|
9
|
-
refute_equal(input_class, UniMIDI::Input)
|
10
|
-
refute_equal(output_class, UniMIDI::Output)
|
11
|
-
refute_equal(device_class, UniMIDI::Device)
|
12
|
-
assert_equal(input_class.first.name, UniMIDI::Input.first.name)
|
13
|
-
assert_equal(input_class.first.id, UniMIDI::Input.first.id)
|
14
|
-
refute_equal(output_class.first, UniMIDI::Output.first)
|
15
|
-
assert_equal(output_class.first.name, UniMIDI::Output.first.name)
|
16
|
-
assert_equal(output_class.first.id, UniMIDI::Output.first.id)
|
17
|
-
end
|
18
|
-
|
19
|
-
context "Platform" do
|
20
|
-
|
21
|
-
should "recognize java" do
|
22
|
-
if RUBY_PLATFORM.include?("java")
|
23
|
-
platform_test(UniMIDI::Adapter::MIDIJRuby, ::MIDIJRuby)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
should "recognize linux" do
|
28
|
-
if RUBY_PLATFORM.include?("linux")
|
29
|
-
platform_test(UniMIDI::Adapter::AlsaRawMIDI, ::AlsaRawMIDI)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
should "recognize osx" do
|
34
|
-
if RUBY_PLATFORM.include?("darwin")
|
35
|
-
platform_test(UniMIDI::Adapter::CoreMIDI, ::CoreMIDI, ::CoreMIDI::Endpoint, ::CoreMIDI::Source, ::CoreMIDI::Destination)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
should "recognize windows" do
|
40
|
-
if RUBY_PLATFORM.include?("mingw")
|
41
|
-
platform_test(UniMIDI::Adapter::MIDIWinMM, ::MIDIWinMM)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
end
|
46
|
-
|
47
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
require 'helper'
|
2
|
-
|
3
|
-
class UniMIDI::TypeConversionTest < Minitest::Test
|
4
|
-
|
5
|
-
context "TypeConversion" do
|
6
|
-
|
7
|
-
context "#numeric_byte_array_to_hex_string" do
|
8
|
-
|
9
|
-
should "convert byte array to hex string" do
|
10
|
-
result = UniMIDI::TypeConversion.numeric_byte_array_to_hex_string([0x90, 0x40, 0x40])
|
11
|
-
assert "904040", result
|
12
|
-
end
|
13
|
-
|
14
|
-
end
|
15
|
-
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|