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