mmplayer 0.0.9 → 0.0.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3f14f476af4864cb82c33c1b2096380155d7cc66
4
- data.tar.gz: 72cadd99a43d83aa6d326b95e3f07ad40ac26066
3
+ metadata.gz: 7506ea91a4204c4c6a54de79d645e80315559b98
4
+ data.tar.gz: 531967ac3622fc501eab6162d1e63afae815cb69
5
5
  SHA512:
6
- metadata.gz: d07078cd8a53754fdbc07b82e0ee29966e86adfc14beadd2338e6a53470b770db656202111d320127a18c7003435fa4d4effba4f8da7542e6615e7a739b31de7
7
- data.tar.gz: 9ba11777b930ccfc08c0c189e6cf5dee7081f8cdfc7ac86bb4113a56b1c2a5961b154a636f7ad2fefcf75a844c1e71b275d27af3d5f35e1fa1968567705c3270
6
+ metadata.gz: 737adfeadb792fb1ea7643530635556dd12efe935a047701186c40b43bfdd608ad8b47124c742f1fc33dd4421117c3b506f13d69644499a770498452dad79569
7
+ data.tar.gz: b6d88d0809f7b443f136b07ba242f22368fdf14f37ed23ec4581f49d4b05c2c83124867201908c91161e7d003ec0a9f5adc99855f8f25849dbba8261c30df9ca
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright 2015 Ari Russo
1
+ Copyright 2015-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
@@ -63,4 +63,4 @@ All MPlayer runtime commands enabled by the [mplayer-ruby](https://rubygems.org/
63
63
 
64
64
  Apache 2.0, See LICENSE file
65
65
 
66
- Copyright (c) 2015 [Ari Russo](http://arirusso.com)
66
+ Copyright (c) 2015-2017 [Ari Russo](http://arirusso.com)
@@ -1,7 +1,7 @@
1
1
  # MMPlayer
2
2
  # Control MPlayer with MIDI
3
3
  #
4
- # (c)2015 Ari Russo
4
+ # (c)2015-2017 Ari Russo
5
5
  # Apache 2.0 License
6
6
 
7
7
  # libs
@@ -24,7 +24,7 @@ require "mmplayer/context"
24
24
 
25
25
  module MMPlayer
26
26
 
27
- VERSION = "0.0.9"
27
+ VERSION = "0.0.10"
28
28
 
29
29
  # Shortcut to Context constructor
30
30
  def self.new(*args, &block)
@@ -11,11 +11,16 @@ module MMPlayer
11
11
 
12
12
  # @param [UniMIDI::Input, Array<UniMIDI::Input>] midi_input
13
13
  # @param [Hash] options
14
+ # @option options [Fixnum] :midi_buffer_length Length of MIDI message buffer in seconds
14
15
  # @option options [String] :mplayer_flags The command-line flags to invoke MPlayer with
15
16
  # @option options [Fixnum] :receive_channel (also: :rx_channel) A MIDI channel to subscribe to. By default, responds to all
16
17
  # @yield
17
18
  def initialize(midi_input, options = {}, &block)
18
- @midi = MIDI.new(midi_input, :receive_channel => options[:receive_channel] || options[:rx_channel])
19
+ midi_options = {
20
+ :buffer_length => options[:midi_buffer_length],
21
+ :receive_channel => options[:receive_channel] || options[:rx_channel]
22
+ }
23
+ @midi = MIDI.new(midi_input, midi_options)
19
24
  @player = Player.new(:flags => options[:mplayer_flags])
20
25
  instance_eval(&block) if block_given?
21
26
  end
@@ -1,7 +1,7 @@
1
1
  module MMPlayer
2
2
 
3
3
  module MIDI
4
-
4
+
5
5
  # Wrapper for MIDI functionality
6
6
  class Wrapper
7
7
 
@@ -9,9 +9,12 @@ module MMPlayer
9
9
 
10
10
  # @param [UniMIDI::Input, Array<UniMIDI::Input>] input
11
11
  # @param [Hash] options
12
+ # @option options [Fixnum] :buffer_length Length of MIDI message buffer in seconds
12
13
  # @option options [Fixnum] :receive_channel A MIDI channel to subscribe to. By default, responds to all
13
14
  def initialize(input, options = {})
15
+ @buffer_length = options[:buffer_length]
14
16
  @channel = options[:receive_channel]
17
+
15
18
  @message_handler = MessageHandler.new
16
19
  @listener = MIDIEye::Listener.new(input)
17
20
  end
@@ -52,14 +55,14 @@ module MMPlayer
52
55
  def channel=(channel)
53
56
  @listener.event.clear
54
57
  @channel = channel
55
- populate_listener if @listener.running?
58
+ initialize_listener if @listener.running?
56
59
  @channel
57
60
  end
58
61
 
59
62
  # Start the MIDI listener
60
63
  # @return [Boolean]
61
64
  def start
62
- populate_listener
65
+ initialize_listener
63
66
  @listener.start(:background => true)
64
67
  true
65
68
  end
@@ -72,14 +75,24 @@ module MMPlayer
72
75
 
73
76
  private
74
77
 
75
- # Populate the MIDI listener callback
76
- def populate_listener
77
- @listener.on_message do |event|
78
+ # Handle a new MIDI event received
79
+ # @param [Hash] event
80
+ # @return [Hash]
81
+ def handle_new_event(event)
82
+ if @buffer_length.nil? || event[:timestamp].nil? || event[:timestamp] >= Time.now.to_i - @buffer_length
78
83
  message = event[:message]
79
84
  @message_handler.process(@channel, message)
85
+ event
80
86
  end
81
87
  end
82
88
 
89
+ # Populate the MIDI listener callback
90
+ # @return [MIDIEye::Listener]
91
+ def initialize_listener
92
+ @listener.on_message { |event| handle_new_event(event) }
93
+ @listener
94
+ end
95
+
83
96
  end
84
97
 
85
98
  end
@@ -9,6 +9,98 @@ class MMPlayer::MIDI::WrapperTest < Minitest::Test
9
9
  @midi = MMPlayer::MIDI::Wrapper.new(@input)
10
10
  end
11
11
 
12
+ context "#handle_new_event" do
13
+
14
+ context "with no buffer length" do
15
+
16
+ setup do
17
+ @midi.message_handler.expects(:process).once
18
+ @event = {
19
+ :message => MIDIMessage::NoteOn.new(0, 64, 120),
20
+ :timestamp=> 9266.395330429077
21
+ }
22
+ @result = @midi.send(:handle_new_event, @event)
23
+ end
24
+
25
+ teardown do
26
+ @midi.message_handler.unstub(:process)
27
+ end
28
+
29
+ should "return event" do
30
+ refute_nil @result
31
+ assert_equal @event, @result
32
+ end
33
+
34
+ end
35
+
36
+ context "with buffer length" do
37
+
38
+ context "recent message" do
39
+
40
+ setup do
41
+ @midi.message_handler.expects(:process).once
42
+ @event = {
43
+ :message => MIDIMessage::NoteOn.new(0, 64, 120),
44
+ :timestamp=> 9266.395330429077
45
+ }
46
+ @result = @midi.send(:handle_new_event, @event)
47
+ end
48
+
49
+ teardown do
50
+ @midi.message_handler.unstub(:process)
51
+ end
52
+
53
+ should "return event" do
54
+ refute_nil @result
55
+ assert_equal @event, @result
56
+ end
57
+
58
+ end
59
+
60
+ context "with too-old message" do
61
+
62
+ setup do
63
+ @midi.instance_variable_set("@buffer_length", 1)
64
+ @midi.message_handler.expects(:process).never
65
+ @event = {
66
+ :message => MIDIMessage::NoteOn.new(0, 64, 120),
67
+ :timestamp=> 4.395330429077
68
+ }
69
+ @result = @midi.send(:handle_new_event, @event)
70
+ end
71
+
72
+ teardown do
73
+ @midi.message_handler.unstub(:process)
74
+ end
75
+
76
+ should "not return event" do
77
+ assert_nil @result
78
+ end
79
+
80
+ end
81
+
82
+ end
83
+
84
+ end
85
+
86
+ context "#initialize_listener" do
87
+
88
+ setup do
89
+ @midi.listener.expects(:on_message).once
90
+ @result = @midi.send(:initialize_listener)
91
+ end
92
+
93
+ teardown do
94
+ @midi.listener.unstub(:on_message)
95
+ end
96
+
97
+ should "return listener" do
98
+ refute_nil @result
99
+ assert_equal MIDIEye::Listener, @result.class
100
+ end
101
+
102
+ end
103
+
12
104
  context "#start" do
13
105
 
14
106
  setup do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mmplayer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.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-11-14 00:00:00.000000000 Z
11
+ date: 2017-03-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest