unimidi 0.1.14-i386-mingw32 → 0.2.0-i386-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +12 -12
- data/README.rdoc +82 -63
- data/bin/unimidi +9 -9
- data/lib/unimidi.rb +31 -31
- data/lib/unimidi/adapter/alsa-rawmidi.rb +25 -25
- data/lib/unimidi/adapter/ffi-coremidi.rb +25 -25
- data/lib/unimidi/adapter/midi-jruby.rb +25 -25
- data/lib/unimidi/adapter/midi-winmm.rb +25 -25
- data/lib/unimidi/congruous_api_adapter.rb +226 -214
- data/lib/unimidi/platform.rb +35 -35
- data/lib/unimidi/type_conversion.rb +14 -14
- data/test/config.rb +15 -0
- data/test/helper.rb +72 -0
- data/test/test_input_buffer.rb +44 -0
- data/test/test_io.rb +117 -0
- data/test/test_platform.rb +35 -0
- metadata +45 -33
@@ -1,15 +1,15 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
#
|
3
|
-
|
4
|
-
module UniMIDI
|
5
|
-
|
6
|
-
module TypeConversion
|
7
|
-
|
8
|
-
# byte array to string of hex bytes
|
9
|
-
def numeric_byte_array_to_hex_string(bytes)
|
10
|
-
bytes.map { |b| b.hex }.join
|
11
|
-
end
|
12
|
-
|
13
|
-
end
|
14
|
-
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
|
4
|
+
module UniMIDI
|
5
|
+
|
6
|
+
module TypeConversion
|
7
|
+
|
8
|
+
# byte array to string of hex bytes
|
9
|
+
def numeric_byte_array_to_hex_string(bytes)
|
10
|
+
bytes.map { |b| b.hex }.join
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
|
15
15
|
end
|
data/test/config.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
module TestHelper::Config
|
4
|
+
|
5
|
+
# adjust these constants to suit your hardware configuration
|
6
|
+
# before running tests
|
7
|
+
|
8
|
+
TestInput = UniMIDI::Input.first # this is the device you wish to use to test input
|
9
|
+
TestOutput = UniMIDI::Output.first # likewise for output
|
10
|
+
|
11
|
+
puts "connect #{TestInput.name} (#{TestInput.id}) to #{TestOutput.name} (#{TestOutput.id}) and press enter"
|
12
|
+
$stdin.gets.chomp
|
13
|
+
|
14
|
+
end
|
15
|
+
|
data/test/helper.rb
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
dir = File.dirname(File.expand_path(__FILE__))
|
4
|
+
$LOAD_PATH.unshift dir + '/../lib'
|
5
|
+
|
6
|
+
require 'test/unit'
|
7
|
+
require 'unimidi'
|
8
|
+
|
9
|
+
module TestHelper
|
10
|
+
|
11
|
+
TestSysex = !RUBY_PLATFORM.include?("java")
|
12
|
+
|
13
|
+
def platform_test(adapter, mod)
|
14
|
+
assert_equal(adapter, UniMIDI::Platform.instance.interface)
|
15
|
+
assert_not_same(mod::Input, UniMIDI::Input)
|
16
|
+
assert_not_same(mod::Output, UniMIDI::Output)
|
17
|
+
assert_not_same(mod::Device, UniMIDI::Device)
|
18
|
+
assert_equal(mod::Input.first.name, UniMIDI::Input.first.name)
|
19
|
+
assert_equal(mod::Input.first.id, UniMIDI::Input.first.id)
|
20
|
+
assert_not_same(mod::Output.first, UniMIDI::Output.first)
|
21
|
+
assert_equal(mod::Output.first.name, UniMIDI::Output.first.name)
|
22
|
+
assert_equal(mod::Output.first.id, UniMIDI::Output.first.id)
|
23
|
+
end
|
24
|
+
|
25
|
+
def bytestrs_to_ints(arr)
|
26
|
+
data = arr.map { |m| m[:data] }.join
|
27
|
+
output = []
|
28
|
+
until (bytestr = data.slice!(0,2)).eql?("")
|
29
|
+
output << bytestr.hex
|
30
|
+
end
|
31
|
+
output
|
32
|
+
end
|
33
|
+
|
34
|
+
class MIDIObj
|
35
|
+
def initialize(*bytes)
|
36
|
+
@bytes = bytes
|
37
|
+
end
|
38
|
+
def to_bytes
|
39
|
+
@bytes
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# some MIDI messages
|
44
|
+
VariousMIDIObjects = [
|
45
|
+
TestSysex ? MIDIObj.new(0xF0, 0x41, 0x10, 0x42, 0x12, 0x40, 0x00, 0x7F, 0x00, 0x41, 0xF7) : nil, # SysEx
|
46
|
+
MIDIObj.new(0x90, 100, 100), # note on
|
47
|
+
MIDIObj.new(0x90, 43, 100), # note on
|
48
|
+
MIDIObj.new(0x90, 76, 100), # note on
|
49
|
+
MIDIObj.new(0x90, 60, 100), # note on
|
50
|
+
MIDIObj.new(0x80, 100, 100) # note off
|
51
|
+
].compact
|
52
|
+
|
53
|
+
# some MIDI messages
|
54
|
+
VariousMIDIMessages = [
|
55
|
+
TestSysex ? [0xF0, 0x41, 0x10, 0x42, 0x12, 0x40, 0x00, 0x7F, 0x00, 0x41, 0xF7] : nil, # SysEx
|
56
|
+
[0x90, 100, 100], # note on
|
57
|
+
[0x90, 43, 100], # note on
|
58
|
+
[0x90, 76, 100], # note on
|
59
|
+
[0x90, 60, 100], # note on
|
60
|
+
[0x80, 100, 100] # note off
|
61
|
+
].compact
|
62
|
+
|
63
|
+
# some MIDI messages
|
64
|
+
VariousMIDIByteStrMessages = [
|
65
|
+
TestSysex ? "F04110421240007F0041F7" : nil, # SysEx
|
66
|
+
"906440", # note on
|
67
|
+
"804340" # note off
|
68
|
+
].compact
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
require File.dirname(__FILE__) + '/config'
|
@@ -0,0 +1,44 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'helper'
|
4
|
+
|
5
|
+
class InputBufferTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
include UniMIDI
|
8
|
+
include TestHelper
|
9
|
+
include TestHelper::Config # before running these tests, adjust the constants in config.rb to suit your hardware setup
|
10
|
+
|
11
|
+
def test_input_buffer
|
12
|
+
sleep(1)
|
13
|
+
|
14
|
+
messages = VariousMIDIMessages
|
15
|
+
bytes = []
|
16
|
+
|
17
|
+
TestOutput.open do |output|
|
18
|
+
TestInput.open do |input|
|
19
|
+
|
20
|
+
messages.each do |msg|
|
21
|
+
|
22
|
+
$>.puts "sending: " + msg.inspect
|
23
|
+
|
24
|
+
output.puts(msg)
|
25
|
+
|
26
|
+
bytes += msg
|
27
|
+
|
28
|
+
sleep(0.5)
|
29
|
+
|
30
|
+
buffer = input.buffer.map { |m| m[:data] }.flatten
|
31
|
+
|
32
|
+
$>.puts "received: " + buffer.to_s
|
33
|
+
|
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
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
data/test/test_io.rb
ADDED
@@ -0,0 +1,117 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'helper'
|
4
|
+
|
5
|
+
class IoTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
include UniMIDI
|
8
|
+
include TestHelper
|
9
|
+
include TestHelper::Config # before running these tests, adjust the constants in config.rb to suit your hardware setup
|
10
|
+
|
11
|
+
# ** this test assumes that TestOutput is connected to TestInput
|
12
|
+
def test_full_io
|
13
|
+
sleep(1)
|
14
|
+
messages = VariousMIDIMessages
|
15
|
+
messages_arr = messages.inject { |a,b| a+b }.flatten
|
16
|
+
received_arr = []
|
17
|
+
pointer = 0
|
18
|
+
TestOutput.open do |output|
|
19
|
+
TestInput.open do |input|
|
20
|
+
|
21
|
+
messages.each do |msg|
|
22
|
+
|
23
|
+
$>.puts "sending: " + msg.inspect
|
24
|
+
|
25
|
+
output.puts(msg)
|
26
|
+
sleep(1)
|
27
|
+
received = input.gets.map { |m| m[:data] }.flatten
|
28
|
+
|
29
|
+
|
30
|
+
$>.puts "received: " + received.inspect
|
31
|
+
|
32
|
+
assert_equal(messages_arr.slice(pointer, received.length), received)
|
33
|
+
|
34
|
+
pointer += received.length
|
35
|
+
|
36
|
+
received_arr += received
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
assert_equal(messages_arr.length, received_arr.length)
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# ** this test assumes that TestOutput is connected to TestInput
|
47
|
+
def test_full_io_bytestr
|
48
|
+
sleep(1) # pause between tests
|
49
|
+
|
50
|
+
messages = VariousMIDIByteStrMessages
|
51
|
+
messages_str = messages.join
|
52
|
+
received_str = ""
|
53
|
+
pointer = 0
|
54
|
+
|
55
|
+
TestOutput.open do |output|
|
56
|
+
TestInput.open do |input|
|
57
|
+
|
58
|
+
messages.each do |msg|
|
59
|
+
|
60
|
+
$>.puts "sending: " + msg.inspect
|
61
|
+
|
62
|
+
output.puts(msg)
|
63
|
+
sleep(1)
|
64
|
+
received = input.gets_bytestr.map { |m| m[:data] }.flatten.join
|
65
|
+
$>.puts "received: " + received.inspect
|
66
|
+
|
67
|
+
assert_equal(messages_str.slice(pointer, received.length), received)
|
68
|
+
|
69
|
+
pointer += received.length
|
70
|
+
|
71
|
+
received_str += received
|
72
|
+
|
73
|
+
end
|
74
|
+
|
75
|
+
assert_equal(messages_str, received_str)
|
76
|
+
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
|
82
|
+
# ** this test assumes that TestOutput is connected to TestInput
|
83
|
+
def test_full_io_objects
|
84
|
+
sleep(1)
|
85
|
+
messages = VariousMIDIObjects
|
86
|
+
messages_arr = messages.map { |m| m.to_bytes }.flatten
|
87
|
+
received_arr = []
|
88
|
+
pointer = 0
|
89
|
+
TestOutput.open do |output|
|
90
|
+
TestInput.open do |input|
|
91
|
+
|
92
|
+
messages.each do |msg|
|
93
|
+
|
94
|
+
$>.puts "sending: " + msg.inspect
|
95
|
+
|
96
|
+
output.puts(msg)
|
97
|
+
sleep(1)
|
98
|
+
received = input.gets.map { |m| m[:data] }.flatten
|
99
|
+
|
100
|
+
|
101
|
+
$>.puts "received: " + received.inspect
|
102
|
+
|
103
|
+
assert_equal(messages_arr.slice(pointer, received.length), received)
|
104
|
+
|
105
|
+
pointer += received.length
|
106
|
+
|
107
|
+
received_arr += received
|
108
|
+
|
109
|
+
end
|
110
|
+
|
111
|
+
assert_equal(messages_arr.length, received_arr.length)
|
112
|
+
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'helper'
|
4
|
+
|
5
|
+
class PlatformTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
include UniMIDI
|
8
|
+
include TestHelper
|
9
|
+
include TestHelper::Config
|
10
|
+
|
11
|
+
def test_jruby
|
12
|
+
if RUBY_PLATFORM.include?("java")
|
13
|
+
platform_test(MIDIJRubyAdapter, MIDIJRuby)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_linux
|
18
|
+
if RUBY_PLATFORM.include?("linux")
|
19
|
+
platform_test(AlsaRawMIDIAdapter, AlsaRawMIDI)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_osx
|
24
|
+
if RUBY_PLATFORM.include?("darwin")
|
25
|
+
platform_test(CoreMIDIAdapter, CoreMIDI)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_windows
|
30
|
+
if RUBY_PLATFORM.include?("mingw")
|
31
|
+
platform_test(MIDIWinMMAdapter, MIDIWinMM)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
metadata
CHANGED
@@ -1,70 +1,82 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: unimidi
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.14
|
3
|
+
version: !ruby/object:Gem::Version
|
5
4
|
prerelease:
|
5
|
+
version: 0.2.0
|
6
6
|
platform: i386-mingw32
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Ari Russo
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
12
|
+
|
13
|
+
date: 2011-07-07 00:00:00 -04:00
|
13
14
|
default_executable: unimidi
|
14
|
-
dependencies:
|
15
|
-
- !ruby/object:Gem::Dependency
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
16
17
|
name: midi-winmm
|
17
|
-
|
18
|
+
prerelease: false
|
19
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
18
20
|
none: false
|
19
|
-
requirements:
|
20
|
-
- -
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version:
|
21
|
+
requirements:
|
22
|
+
- - ">="
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: "0"
|
23
25
|
type: :runtime
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
email:
|
26
|
+
version_requirements: *id001
|
27
|
+
description: Platform Independent, realtime MIDI input and output for Ruby
|
28
|
+
email:
|
28
29
|
- ari.russo@gmail.com
|
29
|
-
executables:
|
30
|
+
executables:
|
30
31
|
- unimidi
|
31
32
|
extensions: []
|
33
|
+
|
32
34
|
extra_rdoc_files: []
|
33
|
-
|
35
|
+
|
36
|
+
files:
|
34
37
|
- bin/unimidi
|
35
|
-
- lib/unimidi
|
38
|
+
- lib/unimidi.rb
|
36
39
|
- lib/unimidi/adapter/ffi-coremidi.rb
|
37
|
-
- lib/unimidi/adapter/midi-jruby.rb
|
38
40
|
- lib/unimidi/adapter/midi-winmm.rb
|
41
|
+
- lib/unimidi/adapter/alsa-rawmidi.rb
|
42
|
+
- lib/unimidi/adapter/midi-jruby.rb
|
39
43
|
- lib/unimidi/congruous_api_adapter.rb
|
40
44
|
- lib/unimidi/platform.rb
|
41
45
|
- lib/unimidi/type_conversion.rb
|
42
|
-
-
|
46
|
+
- test/helper.rb
|
47
|
+
- test/config.rb
|
48
|
+
- test/test_io.rb
|
49
|
+
- test/test_input_buffer.rb
|
50
|
+
- test/test_platform.rb
|
43
51
|
- LICENSE
|
44
52
|
- README.rdoc
|
45
53
|
has_rdoc: true
|
46
54
|
homepage: http://github.com/arirusso/unimidi
|
47
55
|
licenses: []
|
56
|
+
|
48
57
|
post_install_message:
|
49
58
|
rdoc_options: []
|
50
|
-
|
59
|
+
|
60
|
+
require_paths:
|
51
61
|
- lib
|
52
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
62
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
53
63
|
none: false
|
54
|
-
requirements:
|
55
|
-
- -
|
56
|
-
- !ruby/object:Gem::Version
|
57
|
-
version:
|
58
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: "0"
|
68
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
59
69
|
none: false
|
60
|
-
requirements:
|
61
|
-
- -
|
62
|
-
- !ruby/object:Gem::Version
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
63
73
|
version: 1.3.6
|
64
74
|
requirements: []
|
75
|
+
|
65
76
|
rubyforge_project: unimidi
|
66
|
-
rubygems_version: 1.
|
77
|
+
rubygems_version: 1.6.2
|
67
78
|
signing_key:
|
68
79
|
specification_version: 3
|
69
|
-
summary: Realtime MIDI input and output for Ruby
|
80
|
+
summary: Realtime MIDI input and output for Ruby
|
70
81
|
test_files: []
|
82
|
+
|