Class: Musicality::Function
- Inherits:
-
Object
- Object
- Musicality::Function
- Defined in:
- lib/musicality/notation/util/function.rb,
lib/musicality/notation/util/piecewise_function.rb
Defined Under Namespace
Classes: Constant, Linear, Piecewise, Sigmoid
Instance Attribute Summary collapse
-
#domain ⇒ Object
readonly
Returns the value of attribute domain.
Class Method Summary collapse
-
.transform_domains(start_domain, end_domain, x) ⇒ Object
x in start domain, transformed to x in end domain.
Instance Method Summary collapse
- #==(other) ⇒ Object
- #at(x) ⇒ Object
-
#initialize(domain = (DOMAIN_MIN...DOMAIN_MAX), memoize: true, &at_block) ⇒ Function
constructor
A new instance of Function.
- #sample(xrange, srate) ⇒ Object
Constructor Details
#initialize(domain = (DOMAIN_MIN...DOMAIN_MAX), memoize: true, &at_block) ⇒ Function
Returns a new instance of Function.
17 18 19 20 21 22 23 24 25 26 |
# File 'lib/musicality/notation/util/function.rb', line 17 def initialize domain = (DOMAIN_MIN...DOMAIN_MAX), memoize: true, &at_block raise ArgumentError unless domain.last > domain.first @domain = domain raise ArgumentError unless block_given? raise ArgumentError unless at_block.arity == 1 @at_block = at_block @memoize = memoize @memoized = {} end |
Instance Attribute Details
#domain ⇒ Object (readonly)
Returns the value of attribute domain.
16 17 18 |
# File 'lib/musicality/notation/util/function.rb', line 16 def domain @domain end |
Class Method Details
.transform_domains(start_domain, end_domain, x) ⇒ Object
x in start domain, transformed to x in end domain
11 12 13 14 |
# File 'lib/musicality/notation/util/function.rb', line 11 def self.transform_domains start_domain, end_domain, x perc = (x - start_domain.first) / (start_domain.last - start_domain.first).to_f return perc * (end_domain.last - end_domain.first) + end_domain.first end |
Instance Method Details
#==(other) ⇒ Object
41 42 43 |
# File 'lib/musicality/notation/util/function.rb', line 41 def ==(other) @domain == other.domain end |
#at(x) ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/musicality/notation/util/function.rb', line 28 def at(x) raise DomainError unless @domain.include?(x) if @memoize if @memoized.has_key? x @memoized[x] else @memoized[x] = @at_block.call(x) end else @at_block.call(x) end end |
#sample(xrange, srate) ⇒ Object
6 7 8 |
# File 'lib/musicality/notation/util/function.rb', line 6 def sample xrange, srate xrange.step(Rational(1,srate)).map { |x| at(x) } end |