midi-eye 0.3.9 → 0.3.10

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2897d59e2db3e4f1cbe6c485d2e0e8ea0d75aee5
4
- data.tar.gz: 9337eef0af176b3e749bcd12aecf536872b5a7ea
3
+ metadata.gz: df1b8c5bbb797b25f58dfe308f5a30b97d3d7897
4
+ data.tar.gz: 6bdc24368840613721fc897b1e64d3892042c8d7
5
5
  SHA512:
6
- metadata.gz: a02acd381abb2e9e92aa0049508d90f1052969974ada2fae9ca815e0a186af4d9445f4cf39800fcf4f2fc95559bc41d533d536b217aeb6e69beb90396b81e44f
7
- data.tar.gz: 19116b5b9d606a59541411936aa4d35afac2ffa9f49986748d2c4d594ddd6c4fbb1ecde347e5e3122834fd4ee64d5d63da91de866a7103818edc4fda34dcb1c8
6
+ metadata.gz: fba1db63b3c1d8399eb9f6443a976e8be5ef9e75959d8ec693c4206f8b28d0ffc9b7c7146db2755367cbdfcf2d2477e755b2e685fe7d30db85a1c595c2eee6e1
7
+ data.tar.gz: 8d23fb30ed11046561b6bf3b6833e78a49042e6ae0c4aaf27b362070a3e46ba7faf8cc37427ef52212273e0663dc9e85ba8f728b394f549378582f2b1f7f30bf
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright 2011-2014 Ari Russo
1
+ Copyright 2011-2017 Ari Russo
2
2
 
3
3
  Licensed under the Apache License, Version 2.0 (the "License");
4
4
  you may not use this file except in compliance with the License.
data/README.md CHANGED
@@ -1,15 +1,15 @@
1
1
  # MIDI EYE
2
2
 
3
- MIDI input event listener for Ruby
3
+ MIDI input event listener for Ruby
4
4
 
5
5
  ## Install
6
6
 
7
7
  `gem install midi-eye`
8
-
8
+
9
9
  or using Bundler, add this to your Gemfile
10
10
 
11
11
  `gem "midi-eye"`
12
-
12
+
13
13
  ## Usage
14
14
 
15
15
  ```ruby
@@ -17,17 +17,17 @@ require 'midi-eye'
17
17
  ```
18
18
 
19
19
  The following is an example that takes any note messages received from a unimidi input, transposes them up one octave and then sends them to an output
20
-
20
+
21
21
  First, pick some MIDI IO ports
22
22
 
23
- ```ruby
23
+ ```ruby
24
24
  @input = UniMIDI::Input.gets
25
25
  @output = UniMIDI::Output.gets
26
26
  ```
27
27
 
28
28
  Then create a listener for the input port
29
29
 
30
- ```ruby
30
+ ```ruby
31
31
  transpose = MIDIEye::Listener.new(@input)
32
32
  ```
33
33
 
@@ -39,23 +39,23 @@ In this example, we specify that the listener listens for note on/off messages,
39
39
 
40
40
  ```ruby
41
41
  transpose.listen_for(:class => [MIDIMessage::NoteOn, MIDIMessage::NoteOff]) do |event|
42
-
42
+
43
43
  # raise the note value by an octave
44
44
  event[:message].note += 12
45
-
46
- # send the altered note message to the output you chose earlier
45
+
46
+ # send the altered note message to the output you chose earlier
47
47
  @output.puts(event[:message])
48
-
48
+
49
49
  end
50
50
  ```
51
51
 
52
52
  There is also the option of leaving out the parameters altogether and including using conditional if/unless/case/etc statements in the callback.
53
-
53
+
54
54
  You can bind as many events to a listener as you wish by repeatedly calling `Listener#listen_for`
55
55
 
56
56
  Once all the events are bound, start the listener
57
57
 
58
- ```ruby
58
+ ```ruby
59
59
  transpose.run
60
60
  ```
61
61
 
@@ -63,7 +63,7 @@ A listener can also be run in a background thread by passing in `:background =>
63
63
 
64
64
  ```ruby
65
65
  transpose.run(:background => true)
66
-
66
+
67
67
  transpose.join # join the background thread later
68
68
  ```
69
69
 
@@ -71,7 +71,7 @@ transpose.join # join the background thread later
71
71
 
72
72
  * [examples](http://github.com/arirusso/midi-eye/tree/master/examples)
73
73
  * [rdoc](http://rdoc.info/gems/midi-eye)
74
-
74
+
75
75
  ## Author
76
76
 
77
77
  * [Ari Russo](http://github.com/arirusso) <ari.russo at gmail.com>
@@ -80,4 +80,4 @@ transpose.join # join the background thread later
80
80
 
81
81
  Apache 2.0, See the file LICENSE
82
82
 
83
- Copyright (c) 2011-2014 Ari Russo
83
+ Copyright (c) 2011-2017 [Ari Russo](http://arirusso.com)
@@ -1,12 +1,14 @@
1
1
  #
2
2
  # midi-eye
3
- #
4
3
  # MIDI input event listener for Ruby
5
- # (c)2011-2014 Ari Russo
4
+ # https://github.com/arirusso/midi-eye
5
+ #
6
+ # (c)2011-2017 Ari Russo
6
7
  # Apache 2.0 License
7
8
  #
8
9
 
9
10
  # libs
11
+ require "forwardable"
10
12
  require "midi-message"
11
13
  require "nibbler"
12
14
  require "unimidi"
@@ -18,6 +20,6 @@ require "midi-eye/source"
18
20
 
19
21
  module MIDIEye
20
22
 
21
- VERSION = "0.3.9"
23
+ VERSION = "0.3.10"
22
24
 
23
25
  end
@@ -1,11 +1,15 @@
1
1
  module MIDIEye
2
-
2
+
3
3
  # User defined callbacks for input events
4
4
  class Event
5
5
 
6
+ extend Forwardable
7
+
8
+ def_delegators :@event, :count
9
+
6
10
  def initialize
7
11
  @event = []
8
- @queue = []
12
+ @queue = Queue.new
9
13
  end
10
14
 
11
15
  # Delete an event by name
@@ -29,10 +33,10 @@ module MIDIEye
29
33
  def add(options = {}, &callback)
30
34
  name = options[:listener_name]
31
35
  options.delete(:listener_name)
32
- event = {
33
- :conditions => options,
34
- :proc => callback,
35
- :listener_name => name
36
+ event = {
37
+ :conditions => options,
38
+ :proc => callback,
39
+ :listener_name => name
36
40
  }
37
41
  @event << event
38
42
  event
@@ -57,21 +61,15 @@ module MIDIEye
57
61
 
58
62
  # Add an event to the trigger queue
59
63
  # @return [Hash]
60
- def enqueue(action, message)
61
- event = {
62
- :action => action,
63
- :message => message
64
+ def enqueue(action, message)
65
+ event = {
66
+ :action => action,
67
+ :message => message
64
68
  }
65
69
  @queue << event
66
70
  event
67
71
  end
68
72
 
69
- # The number of events
70
- # @return [Fixnum]
71
- def count
72
- @event.count
73
- end
74
-
75
73
  private
76
74
 
77
75
  # Does the given message meet the given conditions?
@@ -98,11 +96,11 @@ module MIDIEye
98
96
  begin
99
97
  action[:proc].call(event[:message])
100
98
  rescue Exception => exception
101
- Thread.main.raise exception
99
+ Thread.main.raise(exception)
102
100
  end
103
101
  end
104
102
  end
105
-
103
+
106
104
  end
107
105
 
108
106
  end
@@ -2,6 +2,8 @@ module MIDIEye
2
2
 
3
3
  class Listener
4
4
 
5
+ LISTEN_INTERVAL = 1.0 / 1000
6
+
5
7
  attr_reader :event
6
8
  attr_accessor :sources
7
9
 
@@ -25,10 +27,8 @@ module MIDIEye
25
27
  # @return [Array<MIDIEye::Source>] The updated list of sources for this listener
26
28
  def add_input(inputs)
27
29
  inputs = [inputs].flatten.compact
28
- new_sources = inputs.map do |input|
29
- Source.new(input) unless uses_input?(input)
30
- end
31
- @sources += new_sources.compact
30
+ input_sources = inputs.reject { |input| uses_input?(input) }
31
+ @sources += input_sources.map { |input| Source.new(input) }
32
32
  @sources
33
33
  end
34
34
  alias_method :add_inputs, :add_input
@@ -100,7 +100,6 @@ module MIDIEye
100
100
  self
101
101
  end
102
102
  alias_method :on_message, :listen_for
103
- alias_method :listen, :listen_for
104
103
 
105
104
  # Poll the input source for new input. This will normally be done by the background thread
106
105
  def poll
@@ -109,10 +108,11 @@ module MIDIEye
109
108
  objs.each do |batch|
110
109
  messages = [batch[:messages]].flatten.compact
111
110
  messages.each do |message|
112
- unless message.nil?
113
- data = { :message => message, :timestamp => batch[:timestamp] }
114
- @event.enqueue_all(data)
115
- end
111
+ data = {
112
+ :message => message,
113
+ :timestamp => batch[:timestamp]
114
+ }
115
+ @event.enqueue_all(data)
116
116
  end
117
117
  end
118
118
  end
@@ -123,11 +123,10 @@ module MIDIEye
123
123
 
124
124
  # A loop that runs while the listener is active
125
125
  def listen_loop
126
- interval = 1.0/1000
127
126
  loop do
128
127
  poll
129
128
  @event.trigger_enqueued
130
- sleep(interval)
129
+ sleep(LISTEN_INTERVAL)
131
130
  end
132
131
  end
133
132
 
@@ -1,44 +1,46 @@
1
1
  module MIDIEye
2
-
2
+
3
3
  # Retrieves new messages from a unimidi input buffer
4
4
  class Source
5
-
5
+
6
6
  attr_reader :device, :pointer
7
-
7
+
8
+ # Whether the given object is a UniMIDI input
9
+ # @param [Object] input
10
+ # @return [Boolean]
11
+ def self.compatible?(input)
12
+ input.respond_to?(:gets) && input.respond_to?(:buffer)
13
+ end
14
+
8
15
  # @param [UniMIDI::Input] input
9
- def initialize(input)
16
+ def initialize(input)
10
17
  @parser = Nibbler.new
11
18
  @pointer = 0
12
19
  @device = input
13
20
  end
14
-
21
+
15
22
  # Grabs new messages from the input buffer
16
23
  def poll(&block)
17
24
  messages = @device.buffer.slice(@pointer, @device.buffer.length - @pointer)
18
25
  @pointer = @device.buffer.length
19
- messages.each do |raw_message|
20
- unless raw_message.nil?
21
- parsed_messages = @parser.parse(raw_message[:data], :timestamp => raw_message[:timestamp]) rescue nil
22
- objects = [parsed_messages].flatten.compact
23
- yield(objects)
26
+ messages.compact.each do |raw_message|
27
+ parsed_messages = begin
28
+ @parser.parse(raw_message[:data], :timestamp => raw_message[:timestamp])
29
+ rescue
30
+ nil
24
31
  end
25
- end
26
- end
27
-
28
- # Whether the given object is a UniMIDI input
29
- # @param [Object] input
30
- # @return [Boolean]
31
- def self.compatible?(input)
32
- input.respond_to?(:gets) && input.respond_to?(:buffer)
32
+ objects = [parsed_messages].flatten.compact
33
+ yield(objects)
34
+ end
33
35
  end
34
-
36
+
35
37
  # If this source was created from the given input
36
38
  # @param [UniMIDI::Input] input
37
39
  # @return [Boolean]
38
40
  def uses?(input)
39
41
  @device == input
40
42
  end
41
-
43
+
42
44
  end
43
-
45
+
44
46
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: midi-eye
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.9
4
+ version: 0.3.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ari Russo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-31 00:00:00.000000000 Z
11
+ date: 2017-07-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -167,7 +167,7 @@ files:
167
167
  - test/listener_test.rb
168
168
  homepage: http://github.com/arirusso/midi-eye
169
169
  licenses:
170
- - Apache 2.0
170
+ - Apache-2.0
171
171
  metadata: {}
172
172
  post_install_message:
173
173
  rdoc_options: []
@@ -185,7 +185,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
185
185
  version: 1.3.6
186
186
  requirements: []
187
187
  rubyforge_project: midi-eye
188
- rubygems_version: 2.2.2
188
+ rubygems_version: 2.6.12
189
189
  signing_key:
190
190
  specification_version: 4
191
191
  summary: MIDI event listener for Ruby