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