class SMF::Groove

Public Class Methods

new(div, pat) click to toggle source
# File lib/smf/toy/groove.rb, line 10
def initialize(div, pat)
  @unit = pat[-1] * div * 4
  x = []; y = []
  pat.each_with_index do |p, i|
    x << @unit / (pat.size - 1) * i
    y << p * div * 4
  end
  x2 = GSL::Vector.alloc(x)
  y2 = GSL::Vector.alloc(y)
  @spline = GSL::Spline.alloc('linear', x2, y2)
  self.amount = 0.5
end

Public Instance Methods

amount=(v) click to toggle source
# File lib/smf/toy/groove.rb, line 23
def amount=(v) @amount = v end
groove(ev) click to toggle source
# File lib/smf/toy/groove.rb, line 25
def groove(ev)
  q, r = ev.offset.divmod(@unit)
  r2 = @spline.eval(r)
  r3 = r + (r2 - r) * @amount
  ev.offset = (q * @unit + r3).round
end