Module: Tonal::ExtendableRatio

Extended by:
Forwardable
Includes:
Comparable
Included in:
ExtendedRatio, SubharmonicExtendedRatio
Defined in:
lib/tonal/extended_ratio.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#partialsObject (readonly)

Returns the value of attribute partials.



6
7
8
# File 'lib/tonal/extended_ratio.rb', line 6

def partials
  @partials
end

Instance Method Details

#initialize(partials: nil, ratios: nil) ⇒ Tonal::ExtendedRatio, Tonal::SubharmonicExtendedRatio

Examples:

Tonal::ExtendedRatio.new(partials: [1, 2, 3])
Tonal::SubharmonicExtendedRatio.new(ratios: [Rational(1,1), Rational(1,2), Rational(1,3)])

Parameters:

  • partials (Array<Numeric>) (defaults to: nil)

    the partials to initialize the extended ratio

  • ratios (Array<Rational>) (defaults to: nil)

    the ratios to initialize the extended ratio

Returns:

Raises:

  • (ArgumentError)


15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/tonal/extended_ratio.rb', line 15

def initialize(partials: nil, ratios: nil)
  raise(ArgumentError, "Provide either partials or ratios, not both", caller[0]) if !partials.nil? && !ratios.nil?
  raise(ArgumentError, "Provide either partials or ratios", caller[0]) if partials.nil? && ratios.nil?

  if partials
    during_initialize(*partials)
  elsif ratios
    first = ratios.first
    partials = ratios.map{|r| r * first}
    during_initialize(*partials)
  end
end

#inspectObject



41
42
43
# File 'lib/tonal/extended_ratio.rb', line 41

def inspect
  display.join(":")
end

#interval_between(index1, index2, reduced: true) ⇒ Tonal::Interval

Returns the interval between two partials.

Examples:

er = Tonal::ExtendedRatio.new(partials: [1, 2, 3, 4])
er.interval_between(0, 2) => Tonal::Interval representing 3/2

Returns:



33
34
35
36
37
38
39
# File 'lib/tonal/extended_ratio.rb', line 33

def interval_between(index1, index2, reduced: true)
  return nil if self[index1].nil? || self[index2].nil?
  first = partials.first
  r1 = reduced ? Tonal::ReducedRatio.new(self[index1], first) : Tonal::Ratio.new(self[index1], first)
  r2 = reduced ? Tonal::ReducedRatio.new(self[index2], first) : Tonal::Ratio.new(self[index2], first)
  Tonal::Interval.new(r1, r2, reduced:)
end