Class: Deftones::Core::Clock
Instance Attribute Summary collapse
-
#context ⇒ Object
readonly
Returns the value of attribute context.
-
#frequency ⇒ Object
readonly
Returns the value of attribute frequency.
-
#state ⇒ Object
readonly
Returns the value of attribute state.
Instance Method Summary collapse
- #current_frequency ⇒ Object private
- #emit_ticks_until(time) ⇒ Object
- #get_ticks_at_time(time) ⇒ Object (also: #getTicksAtTime)
-
#initialize(frequency: 1.0, context: Deftones.context, &block) ⇒ Clock
constructor
A new instance of Clock.
- #next_tick_time(time = context.current_time) ⇒ Object (also: #nextTickTime)
- #pause(time = nil) ⇒ Object
- #resolve_time(value) ⇒ Object private
- #seconds(time = context.current_time) ⇒ Object
- #start(time = nil, offset: nil) ⇒ Object
- #stop(time = nil) ⇒ Object
- #ticks(time = context.current_time) ⇒ Object
- #ticks_at(time) ⇒ Object private
Constructor Details
#initialize(frequency: 1.0, context: Deftones.context, &block) ⇒ Clock
Returns a new instance of Clock.
8 9 10 11 12 13 14 15 16 |
# File 'lib/deftones/core/clock.rb', line 8 def initialize(frequency: 1.0, context: Deftones.context, &block) super() @context = context @frequency = Signal.new(value: frequency, units: :frequency, context: context) @state = :stopped @start_time = 0.0 @offset_ticks = 0.0 on(:tick, &block) if block end |
Instance Attribute Details
#context ⇒ Object (readonly)
Returns the value of attribute context.
6 7 8 |
# File 'lib/deftones/core/clock.rb', line 6 def context @context end |
#frequency ⇒ Object (readonly)
Returns the value of attribute frequency.
6 7 8 |
# File 'lib/deftones/core/clock.rb', line 6 def frequency @frequency end |
#state ⇒ Object (readonly)
Returns the value of attribute state.
6 7 8 |
# File 'lib/deftones/core/clock.rb', line 6 def state @state end |
Instance Method Details
#current_frequency ⇒ Object (private)
86 87 88 |
# File 'lib/deftones/core/clock.rb', line 86 def current_frequency [frequency.value.to_f, 1.0e-6].max end |
#emit_ticks_until(time) ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/deftones/core/clock.rb', line 58 def emit_ticks_until(time) return self unless state == :started current_time = resolve_time(time) emitted_ticks = (@last_emitted_tick || @offset_ticks.floor) + 1 while emitted_ticks <= ticks_at(current_time).floor emit(:tick, emitted_ticks) emitted_ticks += 1 end @last_emitted_tick = emitted_ticks - 1 self end |
#get_ticks_at_time(time) ⇒ Object Also known as: getTicksAtTime
54 55 56 |
# File 'lib/deftones/core/clock.rb', line 54 def get_ticks_at_time(time) ticks(time) end |
#next_tick_time(time = context.current_time) ⇒ Object Also known as: nextTickTime
47 48 49 50 51 52 |
# File 'lib/deftones/core/clock.rb', line 47 def next_tick_time(time = context.current_time) tick_duration = 1.0 / current_frequency current_ticks = ticks(time) next_tick = current_ticks.floor + 1 resolve_time(time) + ((next_tick - current_ticks) * tick_duration) end |
#pause(time = nil) ⇒ Object
32 33 34 35 36 37 |
# File 'lib/deftones/core/clock.rb', line 32 def pause(time = nil) @offset_ticks = ticks_at(resolve_time(time)) @start_time = resolve_time(time) @state = :paused self end |
#resolve_time(value) ⇒ Object (private)
76 77 78 |
# File 'lib/deftones/core/clock.rb', line 76 def resolve_time(value) value.nil? ? context.current_time : Deftones::Music::Time.parse(value) end |
#seconds(time = context.current_time) ⇒ Object
43 44 45 |
# File 'lib/deftones/core/clock.rb', line 43 def seconds(time = context.current_time) ticks(time) / current_frequency end |
#start(time = nil, offset: nil) ⇒ Object
18 19 20 21 22 23 |
# File 'lib/deftones/core/clock.rb', line 18 def start(time = nil, offset: nil) @start_time = resolve_time(time) @offset_ticks = offset.to_f if offset @state = :started self end |
#stop(time = nil) ⇒ Object
25 26 27 28 29 30 |
# File 'lib/deftones/core/clock.rb', line 25 def stop(time = nil) @offset_ticks = ticks_at(resolve_time(time)) @start_time = resolve_time(time) @state = :stopped self end |
#ticks(time = context.current_time) ⇒ Object
39 40 41 |
# File 'lib/deftones/core/clock.rb', line 39 def ticks(time = context.current_time) ticks_at(resolve_time(time)) end |
#ticks_at(time) ⇒ Object (private)
80 81 82 83 84 |
# File 'lib/deftones/core/clock.rb', line 80 def ticks_at(time) return @offset_ticks unless state == :started @offset_ticks + ([time - @start_time, 0.0].max * current_frequency) end |