class Musicality::Change::Gradual

Constants

LINEAR
SIGMOID
TRANSITIONS

Attributes

duration[R]
start_value[R]
transition[R]

Public Class Methods

linear(end_value, duration, start_value: nil) click to toggle source
# File lib/musicality/notation/model/change.rb, line 34
def self.linear end_value, duration, start_value: nil
  Gradual.new(end_value, duration, LINEAR, start_value: start_value)
end
new(end_value, duration, transition, start_value: nil) click to toggle source
Calls superclass method Musicality::Change::new
# File lib/musicality/notation/model/change.rb, line 43
def initialize end_value, duration, transition, start_value: nil
  if duration <= 0
    raise NonPositiveError, "duration (#{duration}) is <= 0"
  end
  
  unless TRANSITIONS.include?(transition)
    raise ArgumentError, "transition (#{transition}) is not supported"
  end
  
  @duration = duration
  @transition = transition
  @start_value = start_value
  super(end_value)
end
sigmoid(end_value, duration, start_value: nil) click to toggle source
# File lib/musicality/notation/model/change.rb, line 38
def self.sigmoid end_value, duration, start_value: nil
  Gradual.new(end_value, duration, SIGMOID, start_value: start_value)
end

Public Instance Methods

==(other) click to toggle source
Calls superclass method Musicality::Change#==
# File lib/musicality/notation/model/change.rb, line 58
def ==(other)
  super(other) && @duration == other.duration &&
  @transition == other.transition &&
  @start_value == other.start_value
end
absolute?() click to toggle source
# File lib/musicality/notation/model/change.rb, line 71
def absolute?; !@start_value.nil?; end
clone() { |end_value| ... } click to toggle source
# File lib/musicality/notation/model/change.rb, line 64
def clone
  ev = block_given? ? yield(@end_value) : @end_value
  sv = (block_given? && !@start_value.nil?) ? yield(@start_value) : @start_value
  Gradual.new(ev, @duration, @transition, start_value: sv)
end
offsets(base_offset) click to toggle source
# File lib/musicality/notation/conversion/change_conversion.rb, line 19
def offsets base_offset
  [ base_offset, base_offset + @duration ]
end
relative?() click to toggle source
# File lib/musicality/notation/model/change.rb, line 70
def relative?; @start_value.nil?; end
remap(base_offset, map) click to toggle source
# File lib/musicality/notation/conversion/change_conversion.rb, line 23
def remap base_offset, map
  newdur = map[base_offset + @duration] - map[base_offset]
  Gradual.new(@end_value, newdur, @transition)
end
to_transition(offset, value) click to toggle source
# File lib/musicality/notation/conversion/change_conversion.rb, line 28
def to_transition offset, value
  p1 = [ offset, @start_value || value ]
  p2 = [ offset + @duration, @end_value ]
  func = case @transition
  when LINEAR then Function::Linear.new(p1, p2)
  when SIGMOID then Function::Sigmoid.new(p1, p2)
  end
  Transition.new(func, p1[0]..p2[0])
end
to_trimmed(preceding, remaining) click to toggle source
# File lib/musicality/notation/model/change.rb, line 134
def to_trimmed(preceding, remaining)
  Trimmed.new(@end_value, @duration, @transition, start_value: @start_value,
              preceding: preceding, remaining: remaining)
end
trim(ltrim, rtrim) click to toggle source
# File lib/musicality/notation/model/change.rb, line 129
def trim(ltrim, rtrim)
  Trimmed.new(@end_value, @duration, @transition, start_value: @start_value,
              preceding: ltrim, remaining: (@duration - ltrim - rtrim))
end
trim_left(amount) click to toggle source
# File lib/musicality/notation/model/change.rb, line 119
def trim_left(amount)
  Trimmed.new(@end_value, @duration, @transition, start_value: @start_value,
              preceding: amount, remaining: (@duration - amount))
end
trim_right(amount) click to toggle source
# File lib/musicality/notation/model/change.rb, line 124
def trim_right(amount)
  Trimmed.new(@end_value, @duration, @transition, start_value: @start_value,
              preceding: 0, remaining: (@duration - amount))
end