class GlimmerMetronome::Model::Rhythm
Attributes
beat_count[R]
beats[RW]
tempo[RW]
Public Class Methods
new(beat_count)
click to toggle source
# File app/glimmer_metronome/model/rhythm.rb, line 32 def initialize(beat_count) self.beat_count = beat_count @tempo = 120 end
Public Instance Methods
beat_count=(value)
click to toggle source
# File app/glimmer_metronome/model/rhythm.rb, line 37 def beat_count=(value) @beat_count = value reset_beats! end
off!()
click to toggle source
# File app/glimmer_metronome/model/rhythm.rb, line 47 def off! beats.select(&:on).each(&:off!) end
on_beat!(beat_index)
click to toggle source
# File app/glimmer_metronome/model/rhythm.rb, line 42 def on_beat!(beat_index) off! beats[beat_index].on! end
reset_beats!()
click to toggle source
# File app/glimmer_metronome/model/rhythm.rb, line 51 def reset_beats! if @beats off! if beat_count > @beats.count @beats += (beat_count - @beats.count).times.map {Beat.new(false)} elsif beat_count < @beats.count @beats = @beats[0, @beats.count] end else @beats = beat_count.times.map {|i| Beat.new(i == 0)} end on_beat!(0) end
tap!()
click to toggle source
# File app/glimmer_metronome/model/rhythm.rb, line 65 def tap! new_tap_time = Time.now @tap_time ||= [] time_difference = nil if @tap_time.any? if @tap_time[-2] time_difference1 = new_tap_time - @tap_time[-1] time_difference2 = @tap_time[-1] - @tap_time[-2] time_difference = BigDecimal((time_difference1 + time_difference2).to_s) / 2.0 else time_difference = BigDecimal((new_tap_time - @tap_time[-1]).to_s) end end if time_difference if time_difference < 2 self.tempo = (BigDecimal('60.0') / time_difference) else @tap_time = [] end end @tap_time << Time.now end