class Musicality::Change::Gradual::Trimmed
Attributes
preceding[R]
remaining[R]
Public Class Methods
linear(end_value, duration, start_value: nil, preceding: 0, remaining: 0)
click to toggle source
# File lib/musicality/notation/model/change.rb, line 76 def self.linear end_value, duration, start_value: nil, preceding: 0, remaining: 0 Trimmed.new(end_value, duration, LINEAR, start_value: start_value, preceding: preceding, remaining: remaining) end
new(end_value, duration, transition, start_value: nil, preceding: 0, remaining: 0)
click to toggle source
Calls superclass method
Musicality::Change::Gradual::new
# File lib/musicality/notation/model/change.rb, line 86 def initialize end_value, duration, transition, start_value: nil, preceding: 0, remaining: 0 if preceding < 0 raise NegativeError, "preceding (#{preceding}) is < 0" end if remaining <= 0 raise NonPositiveError, "remaining (#{remaining}) is <= 0" end @preceding, @remaining = preceding, remaining super(end_value, duration, transition, start_value: start_value) end
sigmoid(end_value, duration, start_value: nil, preceding: 0, remaining: 0)
click to toggle source
# File lib/musicality/notation/model/change.rb, line 81 def self.sigmoid end_value, duration, start_value: nil, preceding: 0, remaining: 0 Trimmed.new(end_value, duration, SIGMOID, start_value: start_value, preceding: preceding, remaining: remaining) end
Public Instance Methods
==(other)
click to toggle source
Calls superclass method
Musicality::Change::Gradual#==
# File lib/musicality/notation/model/change.rb, line 107 def ==(other) super(other) && @preceding == other.preceding && @remaining == other.remaining end
clone() { |end_value| ... }
click to toggle source
# File lib/musicality/notation/model/change.rb, line 111 def clone ev = block_given? ? yield(@end_value) : @end_value sv = (block_given? && !@start_value.nil?) ? yield(@start_value) : @start_value Trimmed.new(ev, @duration, @transition, start_value: sv, preceding: @preceding, remaining: @remaining) end
offsets(base_offset)
click to toggle source
# File lib/musicality/notation/conversion/change_conversion.rb, line 39 def offsets base_offset origin = base_offset - @preceding [ origin, base_offset, base_offset + @remaining, origin + @duration ] end
remap(base_offset, map)
click to toggle source
# File lib/musicality/notation/conversion/change_conversion.rb, line 44 def remap base_offset, map x0 = base_offset - @preceding y0 = map[x0] new_dur = map[x0 + @duration] - y0 x1 = base_offset y1 = map[x1] Trimmed.new(@end_value, new_dur, @transition, preceding: y1 - y0, remaining: map[x1 + @remaining] - y1) end
to_transition(offset, value)
click to toggle source
# File lib/musicality/notation/conversion/change_conversion.rb, line 54 def to_transition offset, value x1,x2,x3 = offset - @preceding, offset, offset + @remaining x4 = x1 + @duration func = case @transition when LINEAR Function::Linear.new(@start_value.nil? ? [x2,value] : [x1,@start_value],[x4, @end_value]) when SIGMOID y1 = @start_value || Function::Sigmoid.find_y0(x1..x4, [x2, value], @end_value) Function::Sigmoid.new([x1,y1],[x4, @end_value]) end Transition.new(func, x2..x3) end
trailing()
click to toggle source
# File lib/musicality/notation/model/change.rb, line 99 def trailing @duration - @preceding - @remaining end
untrim()
click to toggle source
# File lib/musicality/notation/model/change.rb, line 103 def untrim Gradual.new(@end_value, @duration, @transition, start_value: @start_value) end
Private Instance Methods
inv_sigm(start_domain, x)
click to toggle source
# File lib/musicality/notation/conversion/change_conversion.rb, line 69 def inv_sigm start_domain, x sigm_domain = Function::Sigmoid::SIGM_DOMAIN x_ = Function.transform_domains(start_domain, sigm_domain, x) dy = Function::Sigmoid::sigm(sigm_domain.last) - Function::Sigmoid::sigm(sigm_domain.first) (Function::Sigmoid::sigm(x_) - Function::Sigmoid::sigm(sigm_domain.first)) / dy end