Class: Deftones::Event::Part

Inherits:
Object
  • Object
show all
Includes:
CallbackBehavior
Defined in:
lib/deftones/event/part.rb

Instance Attribute Summary

Attributes included from CallbackBehavior

#humanize, #mute, #playback_rate, #probability, #state

Instance Method Summary collapse

Methods included from CallbackBehavior

#callback_interval, #callback_permitted?, #callback_time, #humanized_time, #initialize_callback_behavior, #mark_started, #mark_stopped, #mute?, #playbackRate=

Constructor Details

#initialize(events:, transport: Deftones.transport, probability: 1.0, humanize: false, mute: false, playback_rate: 1.0, seed: nil, rng: nil, &callback) ⇒ Part

Returns a new instance of Part.

Raises:

  • (ArgumentError)


8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/deftones/event/part.rb', line 8

def initialize(events:, transport: Deftones.transport,
               probability: 1.0, humanize: false, mute: false, playback_rate: 1.0,
               seed: nil, rng: nil, &callback)
  raise ArgumentError, "callback is required" unless callback

  @events = normalize_events(events)
  @transport = transport
  @callback = callback
  @event_ids = []
  initialize_callback_behavior(
    probability: probability,
    humanize: humanize,
    mute: mute,
    playback_rate: playback_rate,
    seed: seed,
    rng: rng
  )
end

Instance Method Details

#cancelObject



43
44
45
46
47
48
# File 'lib/deftones/event/part.rb', line 43

def cancel
  @event_ids.each { |event_id| @transport.cancel(event_id: event_id) }
  @event_ids.clear
  mark_stopped
  self
end

#disposeObject



50
51
52
53
# File 'lib/deftones/event/part.rb', line 50

def dispose
  cancel
  self
end

#normalize_events(events) ⇒ Object (private)



57
58
59
60
61
62
63
# File 'lib/deftones/event/part.rb', line 57

def normalize_events(events)
  Array(events).map do |event|
    next { time: event[0], value: event[1] } if event.is_a?(Array)

    event
  end
end

#start(time = 0) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
# File 'lib/deftones/event/part.rb', line 27

def start(time = 0)
  offset = callback_time(time)
  @event_ids = @events.map do |event|
    event_time = offset + callback_interval(event.fetch(:time, 0))
    @transport.schedule(event_time) do |scheduled_time|
      @callback.call(humanized_time(scheduled_time), event) if callback_permitted?
    end
  end
  mark_started
  self
end

#stop(_time = nil) ⇒ Object



39
40
41
# File 'lib/deftones/event/part.rb', line 39

def stop(_time = nil)
  cancel
end