unimidi 0.1.14-i386-mingw32 → 0.2.0-i386-mingw32
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.
- 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
data/LICENSE
CHANGED
@@ -1,13 +1,13 @@
|
|
1
|
-
Copyright 2010-2011 Ari Russo
|
2
|
-
|
3
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
-
you may not use this file except in compliance with the License.
|
5
|
-
You may obtain a copy of the License at
|
6
|
-
|
7
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
8
|
-
|
9
|
-
Unless required by applicable law or agreed to in writing, software
|
10
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
-
See the License for the specific language governing permissions and
|
1
|
+
Copyright 2010-2011 Ari Russo
|
2
|
+
|
3
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
you may not use this file except in compliance with the License.
|
5
|
+
You may obtain a copy of the License at
|
6
|
+
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
|
9
|
+
Unless required by applicable law or agreed to in writing, software
|
10
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
See the License for the specific language governing permissions and
|
13
13
|
limitations under the License.
|
data/README.rdoc
CHANGED
@@ -1,63 +1,82 @@
|
|
1
|
-
= UniMIDI
|
2
|
-
|
3
|
-
== Summary
|
4
|
-
|
5
|
-
Platform independent realtime MIDI input and output for Ruby.
|
6
|
-
|
7
|
-
== Features
|
8
|
-
|
9
|
-
* Supports Linux, JRuby, OSX, Windows and Cygwin
|
10
|
-
*
|
11
|
-
*
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
*
|
24
|
-
*
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
==
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
*
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
1
|
+
= UniMIDI
|
2
|
+
|
3
|
+
== Summary
|
4
|
+
|
5
|
+
Platform independent realtime MIDI input and output for Ruby.
|
6
|
+
|
7
|
+
== Features
|
8
|
+
|
9
|
+
* Supports Linux, JRuby, OSX, Windows and Cygwin
|
10
|
+
* No compilation required
|
11
|
+
* Both input and output to and from multiple devices concurrently
|
12
|
+
* Agnostically handle different MIDI and SysEx Message types
|
13
|
+
* (OSX Only) Internally patch to other programs using IAC and {MIDI Patch Bay}[http://www.apple.com/downloads/macosx/audio/midipatchbay.html]
|
14
|
+
|
15
|
+
== Requirements
|
16
|
+
|
17
|
+
Ruby 1.9.2 or JRuby 1.6.1 are strongly recommended
|
18
|
+
|
19
|
+
One of the following libraries is required based on what platform you're using. It should install automatically with the unimidi gem. In some uncommon cases, they will all install
|
20
|
+
|
21
|
+
Platform
|
22
|
+
|
23
|
+
* JRuby: {midi-jruby}[http://github.com/arirusso/midi-jruby]
|
24
|
+
* Linux: {alsa-rawmidi}[http://github.com/arirusso/alsa-rawmidi]
|
25
|
+
* OSX: {ffi-coremidi}[http://github.com/arirusso/ffi-coremidi]
|
26
|
+
* Windows/Cygwin: {midi-winmm}[http://github.com/arirusso/midi-winmm]
|
27
|
+
|
28
|
+
== Install
|
29
|
+
|
30
|
+
gem install unimidi
|
31
|
+
|
32
|
+
== Usage
|
33
|
+
|
34
|
+
Here's a {blog post}[http://tx81z.blogspot.com/2011/06/unimidi-platform-independent-realtime.html] with a quick tutorial to {get started}[http://tx81z.blogspot.com/2011/06/unimidi-platform-independent-realtime.html].
|
35
|
+
|
36
|
+
Here's another {blog post}[http://tx81z.blogspot.com/2011/06/high-level-midi-io-with-ruby.html] that {explains how to do high-level messaging}[http://tx81z.blogspot.com/2011/06/high-level-midi-io-with-ruby.html]
|
37
|
+
|
38
|
+
In addition, some examples are included with the library
|
39
|
+
|
40
|
+
* {selecting a device}[http://github.com/arirusso/unimidi/blob/master/examples/select_a_device.rb]
|
41
|
+
* {input}[http://github.com/arirusso/unimidi/blob/master/examples/input.rb]
|
42
|
+
* {output}[http://github.com/arirusso/unimidi/blob/master/examples/output.rb]
|
43
|
+
|
44
|
+
{more examples}[http://github.com/arirusso/unimidi/blob/master/examples]
|
45
|
+
|
46
|
+
Here's another {blog post}[http://tx81z.blogspot.com/2011/06/osx-unimidi-and-midi-patch-bay.html] about {using unimidi with MIDI Patch Bay on OSX}[http://tx81z.blogspot.com/2011/06/osx-unimidi-and-midi-patch-bay.html]
|
47
|
+
|
48
|
+
== Tests
|
49
|
+
|
50
|
+
There are a set of generic tests which assume that an output is connected to an input. If you wish to run these tests, first edit {test/config.rb}[http://github.com/arirusso/unimidi/blob/master/test/config.rb] to configure it to your setup.
|
51
|
+
|
52
|
+
The tests can be run using
|
53
|
+
|
54
|
+
rake test
|
55
|
+
|
56
|
+
See below for additional notes on testing with JRuby
|
57
|
+
|
58
|
+
== Documentation
|
59
|
+
|
60
|
+
* {rdoc}[http://rdoc.info/gems/unimidi]
|
61
|
+
|
62
|
+
== Platform Specific Notes
|
63
|
+
|
64
|
+
==== JRuby
|
65
|
+
|
66
|
+
* You must be in 1.9 mode. This is normally accomplished by passing --1.9 to JRuby at the command line. For testing in 1.9 mode, use
|
67
|
+
jruby --1.9 -S rake test
|
68
|
+
* javax.sound has some documented issues with SysEx messages in some versions OSX Snow Leopard which do affect this library.
|
69
|
+
|
70
|
+
==== Linux
|
71
|
+
|
72
|
+
* libasound and libasound-dev packages are required
|
73
|
+
|
74
|
+
== Author
|
75
|
+
|
76
|
+
{Ari Russo}[http://github.com/arirusso] <ari.russo at gmail.com>
|
77
|
+
|
78
|
+
== License
|
79
|
+
|
80
|
+
Apache 2.0, See the file LICENSE
|
81
|
+
|
82
|
+
Copyright (c) 2010-2011 Ari Russo
|
data/bin/unimidi
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
3
|
-
|
4
|
-
require 'unimidi'
|
5
|
-
|
6
|
-
opts = ARGV.length > 1 ? ARGV.slice(1, ARGV.length-1) : {}
|
7
|
-
|
8
|
-
raise "No command specified" if ARGV.first.nil?
|
9
|
-
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
3
|
+
|
4
|
+
require 'unimidi'
|
5
|
+
|
6
|
+
opts = ARGV.length > 1 ? ARGV.slice(1, ARGV.length-1) : {}
|
7
|
+
|
8
|
+
raise "No command specified" if ARGV.first.nil?
|
9
|
+
|
10
10
|
UniMIDI.command(ARGV.first.to_sym, opts)
|
data/lib/unimidi.rb
CHANGED
@@ -1,31 +1,31 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
#
|
3
|
-
# A realtime MIDI interface for Ruby
|
4
|
-
# (c)2010-2011 Ari Russo and licensed under the Apache 2.0 License
|
5
|
-
#
|
6
|
-
|
7
|
-
module UniMIDI
|
8
|
-
|
9
|
-
VERSION = "0.
|
10
|
-
|
11
|
-
end
|
12
|
-
|
13
|
-
require 'forwardable'
|
14
|
-
|
15
|
-
require 'unimidi/congruous_api_adapter'
|
16
|
-
require 'unimidi/platform'
|
17
|
-
require 'unimidi/type_conversion'
|
18
|
-
|
19
|
-
module UniMIDI
|
20
|
-
extend(Platform.instance.interface)
|
21
|
-
include(Platform.instance.interface)
|
22
|
-
|
23
|
-
def self.command(command, options = {})
|
24
|
-
if [:l, :list, :list_devices].include?(command)
|
25
|
-
require 'pp'
|
26
|
-
pp Device::all
|
27
|
-
else
|
28
|
-
raise "Command #{command.to_s} not found"
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# A realtime MIDI interface for Ruby
|
4
|
+
# (c)2010-2011 Ari Russo and licensed under the Apache 2.0 License
|
5
|
+
#
|
6
|
+
|
7
|
+
module UniMIDI
|
8
|
+
|
9
|
+
VERSION = "0.2.0"
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
require 'forwardable'
|
14
|
+
|
15
|
+
require 'unimidi/congruous_api_adapter'
|
16
|
+
require 'unimidi/platform'
|
17
|
+
require 'unimidi/type_conversion'
|
18
|
+
|
19
|
+
module UniMIDI
|
20
|
+
extend(Platform.instance.interface)
|
21
|
+
include(Platform.instance.interface)
|
22
|
+
|
23
|
+
def self.command(command, options = {})
|
24
|
+
if [:l, :list, :list_devices].include?(command)
|
25
|
+
require 'pp'
|
26
|
+
pp Device::all
|
27
|
+
else
|
28
|
+
raise "Command #{command.to_s} not found"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -1,26 +1,26 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
#
|
3
|
-
|
4
|
-
require 'alsa-rawmidi'
|
5
|
-
|
6
|
-
module UniMIDI
|
7
|
-
|
8
|
-
module AlsaRawMIDIAdapter
|
9
|
-
|
10
|
-
class Input < CongruousApiInput
|
11
|
-
defer_to AlsaRawMIDI::Input
|
12
|
-
end
|
13
|
-
|
14
|
-
class Output < CongruousApiOutput
|
15
|
-
defer_to AlsaRawMIDI::Output
|
16
|
-
end
|
17
|
-
|
18
|
-
class Device < CongruousApiDevice
|
19
|
-
defer_to AlsaRawMIDI::Device
|
20
|
-
input_class Input
|
21
|
-
output_class Output
|
22
|
-
end
|
23
|
-
|
24
|
-
end
|
25
|
-
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
|
4
|
+
require 'alsa-rawmidi'
|
5
|
+
|
6
|
+
module UniMIDI
|
7
|
+
|
8
|
+
module AlsaRawMIDIAdapter
|
9
|
+
|
10
|
+
class Input < CongruousApiInput
|
11
|
+
defer_to AlsaRawMIDI::Input
|
12
|
+
end
|
13
|
+
|
14
|
+
class Output < CongruousApiOutput
|
15
|
+
defer_to AlsaRawMIDI::Output
|
16
|
+
end
|
17
|
+
|
18
|
+
class Device < CongruousApiDevice
|
19
|
+
defer_to AlsaRawMIDI::Device
|
20
|
+
input_class Input
|
21
|
+
output_class Output
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
26
|
end
|
@@ -1,26 +1,26 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
#
|
3
|
-
|
4
|
-
require 'coremidi'
|
5
|
-
|
6
|
-
module UniMIDI
|
7
|
-
|
8
|
-
module CoreMIDIAdapter
|
9
|
-
|
10
|
-
class Input < CongruousApiInput
|
11
|
-
defer_to CoreMIDI::Input
|
12
|
-
end
|
13
|
-
|
14
|
-
class Output < CongruousApiOutput
|
15
|
-
defer_to CoreMIDI::Output
|
16
|
-
end
|
17
|
-
|
18
|
-
class Device < CongruousApiDevice
|
19
|
-
defer_to CoreMIDI::Entity
|
20
|
-
input_class Input
|
21
|
-
output_class Output
|
22
|
-
end
|
23
|
-
|
24
|
-
end
|
25
|
-
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
|
4
|
+
require 'coremidi'
|
5
|
+
|
6
|
+
module UniMIDI
|
7
|
+
|
8
|
+
module CoreMIDIAdapter
|
9
|
+
|
10
|
+
class Input < CongruousApiInput
|
11
|
+
defer_to CoreMIDI::Input
|
12
|
+
end
|
13
|
+
|
14
|
+
class Output < CongruousApiOutput
|
15
|
+
defer_to CoreMIDI::Output
|
16
|
+
end
|
17
|
+
|
18
|
+
class Device < CongruousApiDevice
|
19
|
+
defer_to CoreMIDI::Entity
|
20
|
+
input_class Input
|
21
|
+
output_class Output
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
26
|
end
|
@@ -1,26 +1,26 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
#
|
3
|
-
|
4
|
-
require 'midi-jruby'
|
5
|
-
|
6
|
-
module UniMIDI
|
7
|
-
|
8
|
-
module MIDIJRubyAdapter
|
9
|
-
|
10
|
-
class Input < CongruousApiInput
|
11
|
-
defer_to MIDIJRuby::Input
|
12
|
-
end
|
13
|
-
|
14
|
-
class Output < CongruousApiOutput
|
15
|
-
defer_to MIDIJRuby::Output
|
16
|
-
end
|
17
|
-
|
18
|
-
class Device < CongruousApiDevice
|
19
|
-
defer_to MIDIJRuby::Device
|
20
|
-
input_class Input
|
21
|
-
output_class Output
|
22
|
-
end
|
23
|
-
|
24
|
-
end
|
25
|
-
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
|
4
|
+
require 'midi-jruby'
|
5
|
+
|
6
|
+
module UniMIDI
|
7
|
+
|
8
|
+
module MIDIJRubyAdapter
|
9
|
+
|
10
|
+
class Input < CongruousApiInput
|
11
|
+
defer_to MIDIJRuby::Input
|
12
|
+
end
|
13
|
+
|
14
|
+
class Output < CongruousApiOutput
|
15
|
+
defer_to MIDIJRuby::Output
|
16
|
+
end
|
17
|
+
|
18
|
+
class Device < CongruousApiDevice
|
19
|
+
defer_to MIDIJRuby::Device
|
20
|
+
input_class Input
|
21
|
+
output_class Output
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
26
|
end
|
@@ -1,26 +1,26 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
#
|
3
|
-
|
4
|
-
require 'midi-winmm'
|
5
|
-
|
6
|
-
module UniMIDI
|
7
|
-
|
8
|
-
module MIDIWinMMAdapter
|
9
|
-
|
10
|
-
class Input < CongruousApiInput
|
11
|
-
defer_to MIDIWinMM::Input
|
12
|
-
end
|
13
|
-
|
14
|
-
class Output < CongruousApiOutput
|
15
|
-
defer_to MIDIWinMM::Output
|
16
|
-
end
|
17
|
-
|
18
|
-
class Device < CongruousApiDevice
|
19
|
-
defer_to MIDIWinMM::Device
|
20
|
-
input_class Input
|
21
|
-
output_class Output
|
22
|
-
end
|
23
|
-
|
24
|
-
end
|
25
|
-
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
|
4
|
+
require 'midi-winmm'
|
5
|
+
|
6
|
+
module UniMIDI
|
7
|
+
|
8
|
+
module MIDIWinMMAdapter
|
9
|
+
|
10
|
+
class Input < CongruousApiInput
|
11
|
+
defer_to MIDIWinMM::Input
|
12
|
+
end
|
13
|
+
|
14
|
+
class Output < CongruousApiOutput
|
15
|
+
defer_to MIDIWinMM::Output
|
16
|
+
end
|
17
|
+
|
18
|
+
class Device < CongruousApiDevice
|
19
|
+
defer_to MIDIWinMM::Device
|
20
|
+
input_class Input
|
21
|
+
output_class Output
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
26
|
end
|