unimidi 0.0.7-java → 0.0.8-java

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -6,7 +6,7 @@ Platform independent realtime MIDI input and output for Ruby.
6
6
 
7
7
  == Features
8
8
 
9
- * Platform independent. Currently Linux, JRuby, Windows and Cygwin are supported. More platforms will follow (see "to-do")
9
+ * Currently Linux, JRuby, Windows and Cygwin are supported. More platforms will follow (see "to-do")
10
10
  * Both input and output to and from multiple devices concurrently
11
11
  * Agnostically handle different MIDI Message types (including SysEx)
12
12
 
@@ -18,7 +18,10 @@ Platform
18
18
  * Linux: {alsa-rawmidi}[http://github.com/arirusso/alsa-rawmidi]
19
19
  * Windows/Cygwin: {midi-winmm}[http://github.com/arirusso/midi-winmm]
20
20
 
21
- Note that if you are using JRuby you must be in 1.9 mode. This is normally accomplished by passing --1.9 to JRuby at the command line.
21
+ A couple of notes about JRuby only:
22
+
23
+ * You must be in 1.9 mode. This is normally accomplished by passing --1.9 to JRuby at the command line.
24
+ * javax.sound has some documented issues with SysEx messages in some versions OSX Snow Leopard which do affect this library.
22
25
 
23
26
  == Install
24
27
 
@@ -39,7 +42,7 @@ Note that if you are using JRuby you must be in 1.9 mode. This is normally acco
39
42
 
40
43
  == To-do
41
44
 
42
- * OSX (coremidirb?) implementation
45
+ * OSX {coremidi}[http://github.com/arirusso/coremidi] implementation once that lib is done
43
46
 
44
47
  == Author
45
48
 
@@ -49,4 +52,4 @@ Note that if you are using JRuby you must be in 1.9 mode. This is normally acco
49
52
 
50
53
  Apache 2.0, See the file LICENSE
51
54
 
52
- Copyright (c) 2010-2011 Ari Russo
55
+ Copyright (c) 2010-2011 Ari Russo
data/lib/unimidi.rb CHANGED
@@ -4,7 +4,7 @@
4
4
  #
5
5
  module UniMIDI
6
6
 
7
- VERSION = "0.0.7"
7
+ VERSION = "0.0.8"
8
8
 
9
9
  end
10
10
 
@@ -4,11 +4,6 @@ module UniMIDI
4
4
 
5
5
  module AlsaRawMIDIAdapter
6
6
 
7
- class Device
8
- extend CongruousApiAdapter::Device::ClassMethods
9
- defer_to AlsaRawMIDI::Device
10
- end
11
-
12
7
  class Input
13
8
  include CongruousApiAdapter::Device
14
9
  include CongruousApiAdapter::Input
@@ -20,7 +15,14 @@ module UniMIDI
20
15
  include CongruousApiAdapter::Output
21
16
  defer_to AlsaRawMIDI::Output
22
17
  end
23
-
18
+
19
+ class Device
20
+ extend CongruousApiAdapter::Device::ClassMethods
21
+ defer_to AlsaRawMIDI::Device
22
+ input_class Input
23
+ output_class Output
24
+ end
25
+
24
26
  end
25
27
 
26
28
  end
@@ -2,12 +2,7 @@ require 'midi-jruby'
2
2
 
3
3
  module UniMIDI
4
4
 
5
- module AlsaRawMIDIAdapter
6
-
7
- class Device
8
- extend CongruousApiAdapter::Device::ClassMethods
9
- defer_to MIDIJRuby::Device
10
- end
5
+ module MIDIJRubyAdapter
11
6
 
12
7
  class Input
13
8
  include CongruousApiAdapter::Device
@@ -20,6 +15,13 @@ module UniMIDI
20
15
  include CongruousApiAdapter::Output
21
16
  defer_to MIDIJRuby::Output
22
17
  end
18
+
19
+ class Device
20
+ extend CongruousApiAdapter::Device::ClassMethods
21
+ defer_to MIDIJRuby::Device
22
+ input_class Input
23
+ output_class Output
24
+ end
23
25
 
24
26
  end
25
27
 
@@ -4,11 +4,6 @@ module UniMIDI
4
4
 
5
5
  module MIDIWinMMAdapter
6
6
 
7
- class Device
8
- extend CongruousApiAdapter::Device::ClassMethods
9
- defer_to MIDIWinMM::Device
10
- end
11
-
12
7
  class Input
13
8
  include CongruousApiAdapter::Device
14
9
  include CongruousApiAdapter::Input
@@ -20,6 +15,13 @@ module UniMIDI
20
15
  include CongruousApiAdapter::Output
21
16
  defer_to MIDIWinMM::Output
22
17
  end
18
+
19
+ class Device
20
+ extend CongruousApiAdapter::Device::ClassMethods
21
+ defer_to MIDIWinMM::Device
22
+ input_class Input
23
+ output_class Output
24
+ end
23
25
 
24
26
  end
25
27
 
@@ -6,10 +6,12 @@ module UniMIDI
6
6
 
7
7
  def initialize(device_obj)
8
8
  @device = device_obj
9
+ @id = @device.id
10
+ @name = @device.name
9
11
  end
10
12
 
11
13
  def open(*a, &block)
12
- begin
14
+ begin
13
15
  @device.open(*a)
14
16
  block.call(self)
15
17
  ensure
@@ -22,7 +24,9 @@ module UniMIDI
22
24
  end
23
25
 
24
26
  def self.included(base)
25
- base.send(:attr_reader, :device)
27
+ #base.send(:attr_reader, :device)
28
+ base.send(:attr_reader, :name)
29
+ base.send(:attr_reader, :id)
26
30
  end
27
31
 
28
32
  module ClassMethods
@@ -36,20 +40,36 @@ module UniMIDI
36
40
  end
37
41
 
38
42
  def all
39
- device_class.all.map { |d| new(d) }
43
+ all_by_type.values.flatten
40
44
  end
41
45
 
42
46
  def all_by_type
43
47
  {
44
- :input => device_class.all_by_type[:input].map { |d| new(d) },
45
- :output => device_class.all_by_type[:output].map { |d| new(d) }
48
+ :input => device_class.all_by_type[:input].map { |d| get_input_class.new(d) },
49
+ :output => device_class.all_by_type[:output].map { |d| get_output_class.new(d) }
46
50
  }
47
51
  end
48
52
 
49
53
  def defer_to(klass)
50
54
  const_set("DeferToClass", klass)
51
55
  end
56
+
57
+ def get_input_class
58
+ const_get("InputClass")
59
+ end
60
+
61
+ def get_output_class
62
+ const_get("OutputClass")
63
+ end
52
64
 
65
+ def input_class(klass)
66
+ const_set("InputClass", klass)
67
+ end
68
+
69
+ def output_class(klass)
70
+ const_set("OutputClass", klass)
71
+ end
72
+
53
73
  def device_class
54
74
  const_get("DeferToClass")
55
75
  end
@@ -65,18 +85,53 @@ module UniMIDI
65
85
  base.extend(ClassMethods)
66
86
  end
67
87
 
88
+ #
89
+ # returns an array of MIDI event hashes as such:
90
+ # [
91
+ # { :data => [144, 60, 100], :timestamp => 1024 },
92
+ # { :data => [128, 60, 100], :timestamp => 1100 },
93
+ # { :data => [144, 40, 120], :timestamp => 1200 }
94
+ # ]
95
+ #
96
+ # the data is an array of Numeric bytes
97
+ # the timestamp is the number of millis since this input was enabled
98
+ #
68
99
  def gets(*a)
69
100
  @device.gets(*a)
70
101
  end
71
102
 
103
+ #
104
+ # same as gets but returns message data as string of hex digits as such:
105
+ # [
106
+ # { :data => "904060", :timestamp => 904 },
107
+ # { :data => "804060", :timestamp => 1150 },
108
+ # { :data => "90447F", :timestamp => 1300 }
109
+ # ]
110
+ #
72
111
  def gets_bytestr(*a)
73
112
  @device.gets_bytestr(*a)
74
113
  end
114
+
115
+ #
116
+ # returns an array of data bytes such as [144, 60, 100, 128, 60, 100, 144, 40, 120]
117
+ #
118
+ def gets_data(*a)
119
+ arr = gets
120
+ arr.map { |msg| msg[:data] }.inject { |a,b| a + b }
121
+ end
122
+
123
+ #
124
+ # returns a string of data such as "90406080406090447F"
125
+ #
126
+ def gets_data_bytestr(*a)
127
+ arr = gets_bytestr
128
+ arr.map { |msg| msg[:data] }.join
129
+ end
75
130
 
76
131
  module ClassMethods
77
-
78
- def self.all
79
- device_class.all_by_type[:input].map { |d| new(d) }
132
+
133
+ def all
134
+ device_class.all.map { |d| new(d) }
80
135
  end
81
136
 
82
137
  end
@@ -100,8 +155,8 @@ module UniMIDI
100
155
 
101
156
  module ClassMethods
102
157
 
103
- def self.all
104
- device_class.all_by_type[:output].map { |d| new(d) }
158
+ def all
159
+ device_class.all.map { |d| new(d) }
105
160
  end
106
161
 
107
162
  end
@@ -17,7 +17,7 @@ module UniMIDI
17
17
  end
18
18
  require("unimidi/adapter/#{lib}")
19
19
  @interface = case RUBY_PLATFORM
20
- when /java/ then MIDIJRuby
20
+ when /java/ then MIDIJRubyAdapter
21
21
  when /linux/ then AlsaRawMIDIAdapter
22
22
  when /mingw/ then MIDIWinMMAdapter #cygwin
23
23
  when /win/ then MIDIWinMMAdapter
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 7
9
- version: 0.0.7
8
+ - 8
9
+ version: 0.0.8
10
10
  platform: java
11
11
  authors:
12
12
  - Ari Russo
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-04-24 00:00:00 -04:00
17
+ date: 2011-04-30 00:00:00 -04:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency