Class: Tonal::Ratio
- Inherits:
- 
      Object
      
        - Object
- Tonal::Ratio
 
- Extended by:
- Forwardable
- Includes:
- Comparable
- Defined in:
- lib/tonal/approximation.rb,
 lib/tonal/ratio.rb
Direct Known Subclasses
Defined Under Namespace
Classes: Approximation
Constant Summary collapse
- PRECISION =
- 2
Instance Attribute Summary collapse
- 
  
    
      #antecedent  ⇒ Object 
    
    
      (also: #numerator)
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    Returns the value of attribute antecedent. 
- 
  
    
      #consequent  ⇒ Object 
    
    
      (also: #denominator)
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    Returns the value of attribute consequent. 
- 
  
    
      #equave  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    Returns the value of attribute equave. 
- 
  
    
      #label  ⇒ String 
    
    
  
  
  
  
    
    
  
  
  
  
  
  
    Symbolic representation of Tonal::Ratio. 
- 
  
    
      #reduced_antecedent  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    Returns the value of attribute reduced_antecedent. 
- 
  
    
      #reduced_consequent  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    Returns the value of attribute reduced_consequent. 
Class Method Summary collapse
- 
  
    
      .ed(modulo, step, equave: 2)  ⇒ Tonal::Ratio 
    
    
  
  
  
  
  
  
  
  
  
    The ratio of step in the modulo. 
- 
  
    
      .random_ratio(number_of_factors = 2, within: 100, reduced: false)  ⇒ Tonal::Ratio 
    
    
  
  
  
  
  
  
  
  
  
    A randomly generated ratio. 
- 
  
    
      .superparticular(n, factor: 1, superpart: :upper)  ⇒ Tonal::Ratio 
    
    
  
  
  
  
  
  
  
  
  
    Ratio who’s numerator and denominator are seperated by a difference of 1. 
- 
  
    
      .superpartient(n, summand:, factor: 1, superpart: :upper)  ⇒ Tonal::Ratio 
    
    
  
  
  
  
  
  
  
  
  
    Ratio who’s numerator and denominator are separated by a summand difference. 
- 
  
    
      .within_cents?(cents1, cents2, within)  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    If pair of ratios are within the given cents limit. 
Instance Method Summary collapse
- #*(rhs) ⇒ Object
- #**(rhs) ⇒ Object
- #+(rhs) ⇒ Object
- #-(rhs) ⇒ Object
- #/(rhs) ⇒ Object
- #<=>(rhs) ⇒ Object
- 
  
    
      #approximate  ⇒ Tonal::Ratio::Approximation 
    
    
  
  
  
  
  
  
  
  
  
    Self’s approximation instance. 
- 
  
    
      #benedetti_height  ⇒ Integer 
    
    
      (also: #product_complexity)
    
  
  
  
  
  
  
  
  
  
    The product complexity of self. 
- 
  
    
      #cent_diff(other_ratio)  ⇒ Tonal::Cents 
    
    
  
  
  
  
  
  
  
  
  
    Cent difference between self and other ratio. 
- 
  
    
      #cents_difference_with(upper, lower = nil)  ⇒ Tonal::Cents 
    
    
  
  
  
  
  
  
  
  
  
    Difference between ratio (upper) and self (lower). 
- 
  
    
      #combination  ⇒ Integer 
    
    
      (also: #comb)
    
  
  
  
  
  
  
  
  
  
    The sum of antecedent and consequent. 
- 
  
    
      #difference  ⇒ Integer 
    
    
      (also: #diff)
    
  
  
  
  
  
  
  
  
  
    The difference between antecedent and consequent. 
- 
  
    
      #div_times(other_ratio)  ⇒ Array 
    
    
  
  
  
  
  
  
  
  
  
    The results of ratio dividing and multiplying self. 
- 
  
    
      #efficiency(modulo)  ⇒ Tonal::Cents 
    
    
  
  
  
  
  
  
  
  
  
    The cents difference between self and its step in the given modulo. 
- 
  
    
      #equave_reduce(equave = 2)  ⇒ Tonal::Ratio 
    
    
      (also: #reduce, #reduced)
    
  
  
  
  
  
  
  
  
  
    Copy of self reduced to the given equave. 
- 
  
    
      #equave_reduce!(equave = 2)  ⇒ Tonal::Ratio 
    
    
      (also: #reduce!, #reduced!)
    
  
  
  
  
  
  
  
  
  
    Self reduced to the given equave. 
- 
  
    
      #fraction_reduce  ⇒ Tonal::Ratio 
    
    
  
  
  
  
  
  
  
  
  
    Copy of self rationally reduced. 
- #initialize(antecedent, consequent = nil, label: nil, equave: 2) ⇒ Tonal::Ratio constructor
- 
  
    
      #inspect  ⇒ String 
    
    
      (also: #to_s)
    
  
  
  
  
  
  
  
  
  
    The string representation of Tonal::Ratio. 
- 
  
    
      #interval_with(upper, lower = nil)  ⇒ Tonal::Interval 
    
    
  
  
  
  
  
  
  
  
  
    Between ratio (upper) and self (lower). 
- 
  
    
      #invert  ⇒ Tonal::Ratio 
    
    
      (also: #reflect)
    
  
  
  
  
  
  
  
  
  
    Copy of self with the antecedent and precedent switched. 
- 
  
    
      #invert!  ⇒ Tonal::Ratio 
    
    
  
  
  
  
  
  
  
  
  
    With antecedent and precedent switched. 
- 
  
    
      #lcm(lhs)  ⇒ Integer 
    
    
  
  
  
  
  
  
  
  
  
    The least common multiple with self’s denominator and the given number’s denominator. 
- 
  
    
      #log_weil_height  ⇒ Tonal::Log2 
    
    
  
  
  
  
  
  
  
  
  
    The log of Weil height. 
- 
  
    
      #max_prime  ⇒ Integer 
    
    
  
  
  
  
  
  
  
  
  
    The maximum prime factor of self. 
- 
  
    
      #max_prime_within?(number)  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    Whether self’s max prime is within the given number. 
- 
  
    
      #mediant_sum(number)  ⇒ Tonal::Ratio 
    
    
      (also: #mediant, #farey_sum)
    
  
  
  
  
  
  
  
  
  
    The mediant (Farey) sum of self and another number. 
- 
  
    
      #min_prime  ⇒ Integer 
    
    
  
  
  
  
  
  
  
  
  
    The minimum prime factor of self. 
- 
  
    
      #mirror(axis = 1)  ⇒ Tonal::Ratio 
    
    
  
  
  
  
  
  
  
  
  
    The mirror of self along the axis (default 1/1). 
- 
  
    
      #negative  ⇒ Tonal::ReducedRatio 
    
    
  
  
  
  
  
  
  
  
  
    The Ernst Levy negative of self. 
- 
  
    
      #period_degrees(round: PRECISION)  ⇒ Float 
    
    
  
  
  
  
  
  
  
  
  
    Degrees. 
- 
  
    
      #period_radians(round: PRECISION)  ⇒ Float 
    
    
  
  
  
  
  
  
  
  
  
    Radians. 
- 
  
    
      #planar_degrees(round: PRECISION)  ⇒ Float 
    
    
  
  
  
  
  
  
  
  
  
    Degrees of antecedent (x) and consequent (y) on a 2D plane. 
- 
  
    
      #planar_radians(round: PRECISION)  ⇒ Float 
    
    
  
  
  
  
  
  
  
  
  
    Radians. 
- 
  
    
      #plus_minus(other_ratio)  ⇒ Array 
    
    
      (also: #min_plus)
    
  
  
  
  
  
  
  
  
  
    The results of ratio subtracted and added to self. 
- 
  
    
      #prime_divisions  ⇒ Array 
    
    
  
  
  
  
  
  
  
  
  
    , self decomposed into its prime factors. 
- 
  
    
      #prime_vector  ⇒ Vector 
    
    
      (also: #monzo, #prime_exponent_vector)
    
  
  
  
  
  
  
  
  
  
    , self represented as a prime vector. 
- 
  
    
      #ratio  ⇒ Tonal::Ratio 
    
    
      (also: #to_ratio)
    
  
  
  
  
  
  
  
  
  
    Convenience method returning self. 
- 
  
    
      #scale(a, b = a)  ⇒ Tonal::Ratio 
    
    
  
  
  
  
  
  
  
  
  
    Self scaled by given arguments. 
- 
  
    
      #shear(a, b = a)  ⇒ Tonal::Ratio 
    
    
  
  
  
  
  
  
  
  
  
    Self sheared by given arguments. 
- 
  
    
      #step(modulo = 12)  ⇒ Integer 
    
    
  
  
  
  
  
  
  
  
  
    The step of self in the given modulo. 
- 
  
    
      #tenney_height  ⇒ Tonal::Log2 
    
    
      (also: #log_product_complexity, #harmonic_distance)
    
  
  
  
  
  
  
  
  
  
    The log product complexity of self. 
- 
  
    
      #to_a  ⇒ Array 
    
    
  
  
  
  
  
  
  
  
  
    Antecedent and consequent as elements of Array. 
- 
  
    
      #to_cents  ⇒ Tonal::Cents 
    
    
      (also: #cents)
    
  
  
  
  
  
  
  
  
  
    Cents value of self. 
- 
  
    
      #to_f  ⇒ Float 
    
    
  
  
  
  
  
  
  
  
  
    Self as a Float. 
- 
  
    
      #to_log(base = 2)  ⇒ Tonal::Log 
    
    
      (also: #log)
    
  
  
  
  
  
  
  
  
  
    Math.log of self in given base. 
- 
  
    
      #to_log2  ⇒ Tonal::Log2 
    
    
      (also: #log2)
    
  
  
  
  
  
  
  
  
  
    Math.log2 of self. 
- 
  
    
      #to_r  ⇒ Rational 
    
    
  
  
  
  
  
  
  
  
  
    Self as a Rational. 
- 
  
    
      #to_reduced_ratio  ⇒ Tonal::ReducedRatio 
    
    
      (also: #reduced_ratio)
    
  
  
  
  
  
  
  
  
  
    Of self. 
- 
  
    
      #to_v  ⇒ Vector 
    
    
  
  
  
  
  
  
  
  
  
    Antecedent and consequent as elements of Vector. 
- 
  
    
      #translate(x = 1, y = 0)  ⇒ Tonal::Ratio 
    
    
  
  
  
  
  
  
  
  
  
    Ratio grid transformations numerator mapped on x-axis, denominator mapped on y-axis ==================================.
- 
  
    
      #weil_height  ⇒ Integer 
    
    
  
  
  
  
  
  
  
  
  
    The Weil height. 
- 
  
    
      #wilson_height(prime_rejects: [2])  ⇒ Integer 
    
    
  
  
  
  
  
  
  
  
  
    The Wilson height. 
Constructor Details
#initialize(antecedent, consequent = nil, label: nil, equave: 2) ⇒ Tonal::Ratio
| 19 20 21 22 23 24 | # File 'lib/tonal/ratio.rb', line 19 def initialize(antecedent, consequent=nil, label: nil, equave: 2/1r) raise ArgumentError, "Antecedent must be Numeric" unless antecedent.kind_of?(Numeric) raise ArgumentError, "Consequent must be Numeric or nil" unless (consequent.kind_of?(Numeric) || consequent.nil?) _initialize(antecedent, consequent, label:, equave:) end | 
Instance Attribute Details
#antecedent ⇒ Object (readonly) Also known as: numerator
Returns the value of attribute antecedent.
| 9 10 11 | # File 'lib/tonal/ratio.rb', line 9 def antecedent @antecedent end | 
#consequent ⇒ Object (readonly) Also known as: denominator
Returns the value of attribute consequent.
| 9 10 11 | # File 'lib/tonal/ratio.rb', line 9 def consequent @consequent end | 
#equave ⇒ Object (readonly)
Returns the value of attribute equave.
| 9 10 11 | # File 'lib/tonal/ratio.rb', line 9 def equave @equave end | 
#label ⇒ String
Returns symbolic representation of Tonal::Ratio.
| 474 475 476 | # File 'lib/tonal/ratio.rb', line 474 def label @label end | 
#reduced_antecedent ⇒ Object (readonly)
Returns the value of attribute reduced_antecedent.
| 9 10 11 | # File 'lib/tonal/ratio.rb', line 9 def reduced_antecedent @reduced_antecedent end | 
#reduced_consequent ⇒ Object (readonly)
Returns the value of attribute reduced_consequent.
| 9 10 11 | # File 'lib/tonal/ratio.rb', line 9 def reduced_consequent @reduced_consequent end | 
Class Method Details
.ed(modulo, step, equave: 2) ⇒ Tonal::Ratio
Returns the ratio of step in the modulo.
| 82 83 84 | # File 'lib/tonal/ratio.rb', line 82 def self.ed(modulo, step, equave: 2/1r) self.new(2**(step.to_f/modulo), equave: equave) end | 
.random_ratio(number_of_factors = 2, within: 100, reduced: false) ⇒ Tonal::Ratio
Returns a randomly generated ratio.
| 63 64 65 66 67 68 69 70 71 72 | # File 'lib/tonal/ratio.rb', line 63 def self.random_ratio(number_of_factors = 2, within: 100, reduced: false) primes = Prime.each(within).to_a nums = [] dens = [] 1.upto(number_of_factors) do nums << [primes[rand(10)], rand(3)] dens << [primes[rand(10)], rand(3)] end [nums, dens].ratio_from_prime_divisions(reduced:) end | 
.superparticular(n, factor: 1, superpart: :upper) ⇒ Tonal::Ratio
Returns ratio who’s numerator and denominator are seperated by a difference of 1.
| 36 37 38 | # File 'lib/tonal/ratio.rb', line 36 def self.superparticular(n, factor: 1/1r, superpart: :upper) superpartient(n, summand: 1, factor:, superpart:) end | 
.superpartient(n, summand:, factor: 1, superpart: :upper) ⇒ Tonal::Ratio
Returns ratio who’s numerator and denominator are separated by a summand difference.
| 48 49 50 51 52 53 54 55 | # File 'lib/tonal/ratio.rb', line 48 def self.superpartient(n, summand:, factor: 1/1r, superpart: :upper) case superpart.to_sym.downcase when :lower, :consequent, :denominator self.new(n*factor.numerator, (n+summand)*factor.denominator) else self.new((n+summand)*factor.numerator, n*factor.denominator) end end | 
.within_cents?(cents1, cents2, within) ⇒ Boolean
Returns if pair of ratios are within the given cents limit.
| 93 94 95 | # File 'lib/tonal/ratio.rb', line 93 def self.within_cents?(cents1, cents2, within) (cents1 - cents2).abs <= within end | 
Instance Method Details
#*(rhs) ⇒ Object
| 498 499 500 | # File 'lib/tonal/ratio.rb', line 498 def *(rhs) operate(rhs, :*) end | 
#**(rhs) ⇒ Object
| 506 507 508 | # File 'lib/tonal/ratio.rb', line 506 def **(rhs) operate(rhs, :**) end | 
#+(rhs) ⇒ Object
| 490 491 492 | # File 'lib/tonal/ratio.rb', line 490 def +(rhs) operate(rhs, :+) end | 
#-(rhs) ⇒ Object
| 494 495 496 | # File 'lib/tonal/ratio.rb', line 494 def -(rhs) operate(rhs, :-) end | 
#/(rhs) ⇒ Object
| 502 503 504 | # File 'lib/tonal/ratio.rb', line 502 def /(rhs) operate(rhs, :/) end | 
#<=>(rhs) ⇒ Object
| 575 576 577 578 579 | # File 'lib/tonal/ratio.rb', line 575 def <=>(rhs) left = consequent == 0 ? Float::INFINITY : Rational(antecedent, consequent) right = rhs.denominator == 0 ? Float::INFINITY : Rational(rhs.numerator, rhs.denominator) left <=> right end | 
#approximate ⇒ Tonal::Ratio::Approximation
Returns self’s approximation instance.
| 106 107 108 | # File 'lib/tonal/ratio.rb', line 106 def approximate @approximation end | 
#benedetti_height ⇒ Integer Also known as: product_complexity
Returns the product complexity of self.
| 391 392 393 | # File 'lib/tonal/ratio.rb', line 391 def benedetti_height reduced_antecedent * reduced_consequent end | 
#cent_diff(other_ratio) ⇒ Tonal::Cents
Returns cent difference between self and other ratio.
| 468 469 470 | # File 'lib/tonal/ratio.rb', line 468 def cent_diff(other_ratio) cents - other_ratio.ratio.cents end | 
#cents_difference_with(upper, lower = nil) ⇒ Tonal::Cents
Returns difference between ratio (upper) and self (lower).
| 553 554 555 | # File 'lib/tonal/ratio.rb', line 553 def cents_difference_with(upper, lower=nil) interval_with(upper, lower).to_cents end | 
#combination ⇒ Integer Also known as: comb
Returns the sum of antecedent and consequent.
| 570 571 572 | # File 'lib/tonal/ratio.rb', line 570 def combination antecedent + consequent end | 
#difference ⇒ Integer Also known as: diff
Returns the difference between antecedent and consequent.
| 561 562 563 | # File 'lib/tonal/ratio.rb', line 561 def difference antecedent - consequent end | 
#div_times(other_ratio) ⇒ Array
Returns the results of ratio dividing and multiplying self.
| 447 448 449 450 | # File 'lib/tonal/ratio.rb', line 447 def div_times(other_ratio) other_ratio = self.class.new(other_ratio) [self / other_ratio, self * other_ratio] end | 
#efficiency(modulo) ⇒ Tonal::Cents
Returns the cents difference between self and its step in the given modulo.
| 436 437 438 439 440 | # File 'lib/tonal/ratio.rb', line 436 def efficiency(modulo) # We want the efficiency from the ratio (self). # If the step efficiency is X cents, then the ratio efficiency is -X cents. step(modulo).efficiency * -1.0 end | 
#equave_reduce(equave = 2) ⇒ Tonal::Ratio Also known as: reduce, reduced
Returns copy of self reduced to the given equave.
| 215 216 217 | # File 'lib/tonal/ratio.rb', line 215 def equave_reduce(equave=2/1r) self.class.new(*_equave_reduce(equave)) end | 
#equave_reduce!(equave = 2) ⇒ Tonal::Ratio Also known as: reduce!, reduced!
Returns self reduced to the given equave.
| 226 227 228 229 | # File 'lib/tonal/ratio.rb', line 226 def equave_reduce!(equave=2/1r) @antecedent, @consequent = _equave_reduce(equave) self end | 
#fraction_reduce ⇒ Tonal::Ratio
Returns copy of self rationally reduced.
| 206 207 208 | # File 'lib/tonal/ratio.rb', line 206 def fraction_reduce self.class.new(to_r) end | 
#inspect ⇒ String Also known as: to_s
Returns the string representation of Tonal::Ratio.
| 485 486 487 | # File 'lib/tonal/ratio.rb', line 485 def inspect "(#{antecedent}/#{consequent})" end | 
#interval_with(upper, lower = nil) ⇒ Tonal::Interval
Returns between ratio (upper) and self (lower).
| 541 542 543 544 | # File 'lib/tonal/ratio.rb', line 541 def interval_with(upper, lower=nil) r = self.class.new(upper, lower) Tonal::Interval.new(self, r) end | 
#invert ⇒ Tonal::Ratio Also known as: reflect
Returns copy of self with the antecedent and precedent switched.
| 246 247 248 | # File 'lib/tonal/ratio.rb', line 246 def invert self.class.new(consequent, antecedent) end | 
#invert! ⇒ Tonal::Ratio
Returns with antecedent and precedent switched.
| 255 256 257 258 | # File 'lib/tonal/ratio.rb', line 255 def invert! _initialize(consequent, antecedent, label: label, equave: equave) self end | 
#lcm(lhs) ⇒ Integer
Returns the least common multiple with self’s denominator and the given number’s denominator.
| 530 531 532 | # File 'lib/tonal/ratio.rb', line 530 def lcm(lhs) [self.denominator, lhs.denominator].lcm end | 
#log_weil_height ⇒ Tonal::Log2
Returns the log of Weil height.
| 419 420 421 | # File 'lib/tonal/ratio.rb', line 419 def log_weil_height Tonal::Log2.new(logarithmand: weil_height) end | 
#max_prime ⇒ Integer
Returns the maximum prime factor of self.
| 366 367 368 | # File 'lib/tonal/ratio.rb', line 366 def max_prime prime_divisions.flatten(1).map(&:first).max end | 
#max_prime_within?(number) ⇒ Boolean
Returns whether self’s max prime is within the given number.
| 383 384 385 | # File 'lib/tonal/ratio.rb', line 383 def max_prime_within?(number) max_prime.nil? ? false : max_prime <= number end | 
#mediant_sum(number) ⇒ Tonal::Ratio Also known as: mediant, farey_sum
Returns the mediant (Farey) sum of self and another number.
| 515 516 517 | # File 'lib/tonal/ratio.rb', line 515 def mediant_sum(number) self.class.new(antecedent + number.numerator, consequent + number.denominator) end | 
#min_prime ⇒ Integer
Returns the minimum prime factor of self.
| 374 375 376 | # File 'lib/tonal/ratio.rb', line 374 def min_prime prime_divisions.flatten(1).map(&:first).min end | 
#mirror(axis = 1) ⇒ Tonal::Ratio
Returns the mirror of self along the axis (default 1/1).
| 265 266 267 | # File 'lib/tonal/ratio.rb', line 265 def mirror(axis=1/1r) (self.class.new(axis) ** 2) / self end | 
#negative ⇒ Tonal::ReducedRatio
Returns the Ernst Levy negative of self.
| 273 274 275 | # File 'lib/tonal/ratio.rb', line 273 def negative self.class.new(3/2r) / self end | 
#period_degrees(round: PRECISION) ⇒ Float
Returns degrees.
| 188 189 190 | # File 'lib/tonal/ratio.rb', line 188 def period_degrees(round: PRECISION) (360.0 * Math.log(to_f, equave)).round(round) end | 
#period_radians(round: PRECISION) ⇒ Float
Returns radians.
| 197 198 199 | # File 'lib/tonal/ratio.rb', line 197 def period_radians(round: PRECISION) (2 * Math::PI * Math.log(to_f, equave)).round(round) end | 
#planar_degrees(round: PRECISION) ⇒ Float
Returns degrees of antecedent (x) and consequent (y) on a 2D plane.
| 321 322 323 | # File 'lib/tonal/ratio.rb', line 321 def planar_degrees(round: PRECISION) (Math.atan2(consequent, antecedent) * 180/Math::PI).round(round) end | 
#planar_radians(round: PRECISION) ⇒ Float
Returns radians.
| 330 331 332 | # File 'lib/tonal/ratio.rb', line 330 def planar_radians(round: PRECISION) Math.atan2(consequent, antecedent).round(round) end | 
#plus_minus(other_ratio) ⇒ Array Also known as: min_plus
Returns the results of ratio subtracted and added to self.
| 457 458 459 460 | # File 'lib/tonal/ratio.rb', line 457 def plus_minus(other_ratio) other_ratio = self.class.new(other_ratio) [self - other_ratio, self + other_ratio] end | 
#prime_divisions ⇒ Array
Returns , self decomposed into its prime factors.
| 338 339 340 | # File 'lib/tonal/ratio.rb', line 338 def prime_divisions [antecedent.prime_division, consequent.prime_division] end | 
#prime_vector ⇒ Vector Also known as: monzo, prime_exponent_vector
Returns , self represented as a prime vector.
| 346 347 348 349 350 351 352 353 354 355 356 357 358 | # File 'lib/tonal/ratio.rb', line 346 def prime_vector pds = prime_divisions return nil if pds.all?(&:empty?) max = [pds.first.max{|p| p.first}, pds.last.max{|p| p.first}].compact.max.first pds.last.collect!{|i| [i.first, -i.last]} p_arr = Prime.each(max).to_a Array.new(p_arr.count, 0).tap do |arr| pds.flatten(1).each{|e| arr[p_arr.find_index(e.first)] = e.last} end.to_vector end | 
#ratio ⇒ Tonal::Ratio Also known as: to_ratio
Returns convenience method returning self.
| 99 100 101 | # File 'lib/tonal/ratio.rb', line 99 def ratio self end | 
#scale(a, b = a) ⇒ Tonal::Ratio
Returns self scaled by given arguments.
| 300 301 302 303 | # File 'lib/tonal/ratio.rb', line 300 def scale(a, b=a) raise_if_negative(a,b) self.class.new(*(Matrix[[a, 0],[0, b]] * Vector[antecedent, consequent])) end | 
#shear(a, b = a) ⇒ Tonal::Ratio
Returns self sheared by given arguments.
| 311 312 313 314 | # File 'lib/tonal/ratio.rb', line 311 def shear(a, b=a) raise_if_negative(a,b) self.class.new(*((Matrix[[1,a],[0,1]] * Matrix[[1,0], [b,1]]) * Vector[antecedent, consequent])) end | 
#step(modulo = 12) ⇒ Integer
Returns the step of self in the given modulo.
| 179 180 181 | # File 'lib/tonal/ratio.rb', line 179 def step(modulo=12) Tonal::Step.new(ratio: to_r, modulo: modulo) end | 
#tenney_height ⇒ Tonal::Log2 Also known as: log_product_complexity, harmonic_distance
Returns the log product complexity of self.
| 400 401 402 | # File 'lib/tonal/ratio.rb', line 400 def tenney_height Tonal::Log2.new(logarithmand: benedetti_height) end | 
#to_a ⇒ Array
Returns antecedent and consequent as elements of Array.
| 118 119 120 | # File 'lib/tonal/ratio.rb', line 118 def to_a [antecedent, consequent] end | 
#to_cents ⇒ Tonal::Cents Also known as: cents
Returns cents value of self.
| 170 171 172 | # File 'lib/tonal/ratio.rb', line 170 def to_cents Tonal::Cents.new(ratio: to_r) end | 
#to_f ⇒ Float
Returns self as a Float.
| 143 144 145 | # File 'lib/tonal/ratio.rb', line 143 def to_f antecedent.to_f / consequent.to_f end | 
#to_log(base = 2) ⇒ Tonal::Log Also known as: log
Returns Math.log of self in given base.
| 152 153 154 | # File 'lib/tonal/ratio.rb', line 152 def to_log(base=2) Tonal::Log.new(logarithmand: to_r, base: base) end | 
#to_log2 ⇒ Tonal::Log2 Also known as: log2
Returns Math.log2 of self.
| 161 162 163 | # File 'lib/tonal/ratio.rb', line 161 def to_log2 Tonal::Log2.new(logarithmand: to_r) end | 
#to_r ⇒ Rational
Returns self as a Rational.
| 134 135 136 137 | # File 'lib/tonal/ratio.rb', line 134 def to_r return Float::INFINITY if consequent.zero? || !antecedent.finite? Rational(antecedent, consequent) end | 
#to_reduced_ratio ⇒ Tonal::ReducedRatio Also known as: reduced_ratio
Returns of self.
| 237 238 239 | # File 'lib/tonal/ratio.rb', line 237 def to_reduced_ratio Tonal::ReducedRatio.new(reduced_antecedent, reduced_consequent, equave: equave) end | 
#to_v ⇒ Vector
Returns antecedent and consequent as elements of Vector.
| 126 127 128 | # File 'lib/tonal/ratio.rb', line 126 def to_v Vector[antecedent, consequent] end | 
#translate(x = 1, y = 0) ⇒ Tonal::Ratio
Ratio grid transformations numerator mapped on x-axis, denominator mapped on y-axis
| 289 290 291 292 | # File 'lib/tonal/ratio.rb', line 289 def translate(x=1, y=0) raise_if_negative(x,y) self.class.new(*(Vector[antecedent, consequent] + Vector[x, y])) end | 
#weil_height ⇒ Integer
Returns the Weil height.
| 410 411 412 | # File 'lib/tonal/ratio.rb', line 410 def weil_height [reduced_antecedent, reduced_consequent].max end | 
#wilson_height(prime_rejects: [2]) ⇒ Integer
Returns the Wilson height. The sum of self’s prime factors (greater than 2) times the absolute values of their exponents.
| 427 428 429 | # File 'lib/tonal/ratio.rb', line 427 def wilson_height(prime_rejects: [2]) benedetti_height.prime_division.reject{|p| prime_rejects.include?(p.first) }.sum{|p| p.first * p.last } end |