basic-sequencer 0.0.9 → 0.0.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: 1fee1fb5787628ee5fd6fe422239e040e37d7309
4
- data.tar.gz: 24ca6dca2aad4d6dad6cb9221f2d0b61f7870adb
3
+ metadata.gz: 722856e8bef08a89038e702c392acc46669073da
4
+ data.tar.gz: 2b46f59d3783cce98365db2f86bf6dddfa555fdf
5
5
  SHA512:
6
- metadata.gz: cb36e4d709eb8b179f84a91c132c85cc0efa6c2c94449ab90387ec05c7807dd273278afd1404944b878d8fb6e76c7444c97c44edfdf60cb42de241404c5dddfe
7
- data.tar.gz: ad16382fa3c2a3922277e964ef849b304dedc92910e38a1856f063378cd8f660be720734dd3b2ab516c3589e2e4ddd6835467a964d29b29ba3ff6ead9962f2af
6
+ metadata.gz: c3cc680925ca28a6271df0e2940d386ac8e373ff7680ada22a703b298512cc16cdeda0011116b426e41686769e10960b543faa3bea9d35b486407000de22c6bd
7
+ data.tar.gz: 15461e615f8c311657104dd77d504db9f277443c0a2ee6132bc48078ea2d7dc5e249f826fb3b288e991b7eab2181cb063a8a240f92c6478853a27d7c435f30d3
data/lib/sequencer.rb CHANGED
@@ -19,6 +19,6 @@ require "sequencer/loop"
19
19
 
20
20
  module Sequencer
21
21
 
22
- VERSION = "0.0.9"
22
+ VERSION = "0.0.10"
23
23
 
24
24
  end
@@ -1,103 +1,6 @@
1
1
  module Sequencer
2
2
 
3
- # A light wrapper for Topaz::Tempo that adds some event handling
4
- class Clock
3
+ # Alias
4
+ Clock = Topaz::Clock
5
5
 
6
- extend Forwardable
7
-
8
- attr_reader :event
9
- def_delegators :@clock, :pause, :stop, :tempo, :tempo=, :unpause
10
-
11
- # @param [Fixnum, UniMIDI::Input] tempo_or_input
12
- # @param [Hash] options
13
- # @option options [Array<UniMIDI::Output>, UniMIDI::Output] :output (also: :outputs) MIDI output device(s)
14
- def initialize(tempo_or_input, options = {})
15
- @event = Event.new
16
- outputs = options[:output] || options[:outputs]
17
- resolution = options.fetch(:resolution, 128)
18
- initialize_clock(tempo_or_input, resolution, :output => outputs)
19
- end
20
-
21
- # Start the clock
22
- # @param [Hash] options
23
- # @option options [Boolean] :background Whether to run in the background
24
- # @option options [Boolean] :blocking Whether to run in the foreground (also :focus, :foreground)
25
- # @option options [Boolean] :suppress_clock Whether this clock is a sync-slave
26
- # @return [Boolean]
27
- def start(options = {})
28
- clock_options = {}
29
- clock_options[:background] = !!options[:background]
30
- clock_options[:background] ||= ![:blocking, :focus, :foreground].any? { |key| !!options[key] }
31
- @clock.start(clock_options) unless !!options[:suppress_clock]
32
- Thread.abort_on_exception = true
33
- end
34
-
35
- # Add a MIDI clock output
36
- # @param [Array<UniMIDI::Output>, UniMIDI::Output] output
37
- # @return [Array<UniMIDI::Output>]
38
- def add_midi_output(output)
39
- outputs = [output].flatten
40
- @clock.add_destination(outputs)
41
- midi_outputs
42
- end
43
-
44
- # Remove a MIDI clock output
45
- # @param [Array<UniMIDI::Output>, UniMIDI::Output] output
46
- # @return [Array<UniMIDI::Output>]
47
- def remove_midi_output(output)
48
- outputs = [output].flatten
49
- @clock.remove_destination(outputs)
50
- midi_outputs
51
- end
52
-
53
- # The MIDI outputs
54
- # @return [Array<UniMIDI::Output>]
55
- def midi_outputs
56
- @clock.destinations.map(&:output)
57
- end
58
-
59
- private
60
-
61
- # Action taken by the clock on a tick. Fires the tick event
62
- def on_tick
63
- @event.do_tick
64
- end
65
-
66
- # Instantiate the underlying clock object
67
- # @param [Fixnum, UniMIDI::Input] tempo_or_input
68
- # @param [Fixnum] resolution
69
- # @param [Hash] options
70
- # @option options [Array<UniMIDI::Output>, UniMIDI::Output] :output MIDI output device(s)
71
- def initialize_clock(tempo_or_input, resolution, options = {})
72
- @clock = Topaz::Tempo.new(tempo_or_input, :midi => options[:output])
73
- @clock.interval = @clock.interval * (resolution / @clock.interval)
74
- @clock.on_tick { on_tick }
75
- end
76
-
77
- # Clock event callbacks
78
- class Event
79
-
80
- def initialize
81
- @tick = []
82
- end
83
-
84
- # Access the tick event callback
85
- # @param [Proc] block
86
- # @return [Proc]
87
- def tick(&block)
88
- if block_given?
89
- @tick.clear
90
- @tick << block
91
- end
92
- @tick
93
- end
94
-
95
- # Fire the tick event callback
96
- # @return [Boolean]
97
- def do_tick
98
- !@tick.empty? && @tick.map(&:call)
99
- end
100
-
101
- end
102
- end
103
6
  end
data/test/clock_test.rb CHANGED
@@ -8,42 +8,36 @@ class Sequencer::ClockTest < Test::Unit::TestCase
8
8
  @clock = Sequencer::Clock.new(120)
9
9
  end
10
10
 
11
- context "Clock#initialize" do
11
+ context "Clock#midi_output" do
12
12
 
13
13
  should "get MIDI output" do
14
14
  output = Object.new
15
- @clock = Sequencer::Clock.new(120, :output => output)
16
- assert_not_nil @clock.midi_outputs
17
- assert_not_empty @clock.midi_outputs
18
- assert @clock.midi_outputs.include?(output)
15
+ @clock = Sequencer::Clock.new(120, :midi => output)
16
+ assert_not_nil @clock.midi_output.devices
17
+ assert_not_empty @clock.midi_output.devices
18
+ assert @clock.midi_output.devices.include?(output)
19
19
  end
20
20
 
21
- end
22
-
23
- context "Clock#add_midi_output" do
24
-
25
21
  should "add MIDI output" do
26
22
  output = Object.new
27
- refute @clock.midi_outputs.include?(output)
28
- @clock.add_midi_output(output)
29
- assert_not_nil @clock.midi_outputs
30
- assert_not_empty @clock.midi_outputs
31
- assert @clock.midi_outputs.include?(output)
23
+ refute @clock.midi_output.devices.include?(output)
24
+ @clock.midi_output.devices << output
25
+ assert_not_nil @clock.midi_output.devices
26
+ assert_not_empty @clock.midi_output.devices
27
+ assert @clock.midi_output.devices.include?(output)
32
28
  end
33
29
 
34
- end
35
-
36
- context "Clock#remove_midi_output" do
37
-
38
30
  should "remove MIDI output" do
39
31
  output = Object.new
40
- refute @clock.midi_outputs.include?(output)
41
- @clock.add_midi_output(output)
42
- assert_not_nil @clock.midi_outputs
43
- assert_not_empty @clock.midi_outputs
44
- assert @clock.midi_outputs.include?(output)
45
- @clock.remove_midi_output(output)
46
- refute @clock.midi_outputs.include?(output)
32
+ refute @clock.midi_output.devices.include?(output)
33
+ @clock.midi_output.devices << output
34
+
35
+ assert_not_nil @clock.midi_output.devices
36
+ assert_not_empty @clock.midi_output.devices
37
+ assert @clock.midi_output.devices.include?(output)
38
+
39
+ @clock.midi_output.devices.delete(output)
40
+ refute @clock.midi_output.devices.include?(output)
47
41
  end
48
42
 
49
43
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: basic-sequencer
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: 2014-09-19 00:00:00.000000000 Z
11
+ date: 2014-09-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: midi-topaz