Class: Musicality::Change::Gradual
- Inherits:
-
Musicality::Change
show all
- Defined in:
- lib/musicality/notation/model/change.rb,
lib/musicality/notation/conversion/change_conversion.rb
Defined Under Namespace
Classes: Trimmed
Constant Summary
collapse
- LINEAR =
:linear
- SIGMOID =
:sigmoid
- TRANSITIONS =
[LINEAR,SIGMOID]
Constants included
from Packable
Packable::PACKED_CLASS_KEY
Instance Attribute Summary collapse
#end_value
Class Method Summary
collapse
Instance Method Summary
collapse
Methods included from Packable
#class_str, included, #init_params, #pack, pack_val, recover_class, unpack_val
Constructor Details
#initialize(end_value, duration, transition, start_value: nil) ⇒ Gradual
Returns a new instance of Gradual.
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
# 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
|
Instance Attribute Details
#duration ⇒ Object
Returns the value of attribute duration.
42
43
44
|
# File 'lib/musicality/notation/model/change.rb', line 42
def duration
@duration
end
|
#start_value ⇒ Object
Returns the value of attribute start_value.
42
43
44
|
# File 'lib/musicality/notation/model/change.rb', line 42
def start_value
@start_value
end
|
#transition ⇒ Object
Returns the value of attribute transition.
42
43
44
|
# File 'lib/musicality/notation/model/change.rb', line 42
def transition
@transition
end
|
Class Method Details
.linear(end_value, duration, start_value: nil) ⇒ Object
34
35
36
|
# 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
|
.sigmoid(end_value, duration, start_value: nil) ⇒ Object
38
39
40
|
# 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
|
Instance Method Details
#==(other) ⇒ Object
58
59
60
61
62
|
# 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? ⇒ Boolean
71
|
# File 'lib/musicality/notation/model/change.rb', line 71
def absolute?; !@start_value.nil?; end
|
#clone ⇒ Object
64
65
66
67
68
|
# 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) ⇒ Object
19
20
21
|
# File 'lib/musicality/notation/conversion/change_conversion.rb', line 19
def offsets base_offset
[ base_offset, base_offset + @duration ]
end
|
#relative? ⇒ Boolean
70
|
# File 'lib/musicality/notation/model/change.rb', line 70
def relative?; @start_value.nil?; end
|
#remap(base_offset, map) ⇒ Object
23
24
25
26
|
# 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) ⇒ Object
28
29
30
31
32
33
34
35
36
|
# 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) ⇒ Object
134
135
136
137
|
# 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) ⇒ Object
129
130
131
132
|
# 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) ⇒ Object
119
120
121
122
|
# 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) ⇒ Object
124
125
126
127
|
# 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
|