Class: ShlispTools::Ratio

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/shlisp_tools/ratio.rb

Overview

A Shlisp-oriented representation of a pitch in just/rational intonation. Numerators are “numes” and denoninators are “denos” as is customary for Shlisp. All terms 0 < n < 256 (“arab” mode in Shlisp).

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(nume, deno, _mul = nil) ⇒ Ratio

Returns a new instance of Ratio.



31
32
33
34
35
36
# File 'lib/shlisp_tools/ratio.rb', line 31

def initialize(nume, deno, _mul=nil)
  @nume = nume
  @deno = deno
  _set_rat
  mul(_mul)
end

Instance Attribute Details

#denoObject (readonly)

denominator



12
13
14
# File 'lib/shlisp_tools/ratio.rb', line 12

def deno
  @deno
end

#numeObject (readonly)

numerator



10
11
12
# File 'lib/shlisp_tools/ratio.rb', line 10

def nume
  @nume
end

#ratObject (readonly)

rational form



14
15
16
# File 'lib/shlisp_tools/ratio.rb', line 14

def rat
  @rat
end

Class Method Details

.parse_new(txt) ⇒ Object



26
27
28
29
# File 'lib/shlisp_tools/ratio.rb', line 26

def self.parse_new(txt)
  r = parse_ratio(txt)
  Ratio.new(r[:nume], r[:deno])
end

.parse_ratio(txt) ⇒ Object



16
17
18
19
20
21
22
23
24
# File 'lib/shlisp_tools/ratio.rb', line 16

def self.parse_ratio(txt)
  parsed = {}
  matches = /(\d+)[\/\:](\d+)/.match(txt)
  if matches && matches.captures.length >= 2
    parsed[:nume] = matches[1].to_i
    parsed[:deno] = matches[2].to_i
  end
  parsed
end

Instance Method Details

#<=>(other) ⇒ Object

Comparator, for sorting



98
99
100
# File 'lib/shlisp_tools/ratio.rb', line 98

def <=>(other) #:nodoc:
  @rat <=> other.rat
end

#dObject

Get the deno(minator).



51
52
53
# File 'lib/shlisp_tools/ratio.rb', line 51

def d
  @deno
end

#d=(deno) ⇒ Object

Set the deno(minator).



56
57
58
59
60
# File 'lib/shlisp_tools/ratio.rb', line 56

def d=(deno)
  @deno = deno
  _set_rat
  d
end

#each {|@rat| ... } ⇒ Object

Iterator

Yields:



93
94
95
# File 'lib/shlisp_tools/ratio.rb', line 93

def each #:nodoc:
  yield @rat
end

#mul(factor) ⇒ Object

Multiply both nume and deno by same factor for Shnth amplitude scaling.



63
64
65
66
67
68
69
70
# File 'lib/shlisp_tools/ratio.rb', line 63

def mul(factor)
  if factor
    factor = factor.abs
    @nume = (@nume * factor) % LIMIT
    @deno = (@deno * factor) % LIMIT
  end
  self
end

#nObject

Get the nume(rator).



39
40
41
# File 'lib/shlisp_tools/ratio.rb', line 39

def n
  @nume
end

#n=(nume) ⇒ Object

Set the nume(rator).



44
45
46
47
48
# File 'lib/shlisp_tools/ratio.rb', line 44

def n=(nume)
  @nume = nume
  _set_rat
  n
end

#reset!Object

Return to the canonical (reduced) value.



77
78
79
80
# File 'lib/shlisp_tools/ratio.rb', line 77

def reset!
  @nume = @rat.numerator
  @deno = @rat.denominator
end

#scale(factor) ⇒ Object

:nodoc:



72
73
74
# File 'lib/shlisp_tools/ratio.rb', line 72

def scale(factor) #:nodoc:
  mul(factor)
end

#to_rObject

Rational representation



88
89
90
# File 'lib/shlisp_tools/ratio.rb', line 88

def to_r
  @rat
end

#to_sObject

String representation



83
84
85
# File 'lib/shlisp_tools/ratio.rb', line 83

def to_s
  "#{@nume}/#{@deno}"
end