Class: ShlispTools::Ratio
- Inherits:
-
Object
- Object
- ShlispTools::Ratio
- 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
-
#deno ⇒ Object
readonly
denominator.
-
#nume ⇒ Object
readonly
numerator.
-
#rat ⇒ Object
readonly
rational form.
Class Method Summary collapse
Instance Method Summary collapse
-
#<=>(other) ⇒ Object
Comparator, for sorting.
-
#d ⇒ Object
Get the deno(minator).
-
#d=(deno) ⇒ Object
Set the deno(minator).
-
#each {|@rat| ... } ⇒ Object
Iterator.
-
#initialize(nume, deno, _mul = nil) ⇒ Ratio
constructor
A new instance of Ratio.
-
#mul(factor) ⇒ Object
Multiply both nume and deno by same factor for Shnth amplitude scaling.
-
#n ⇒ Object
Get the nume(rator).
-
#n=(nume) ⇒ Object
Set the nume(rator).
-
#reset! ⇒ Object
Return to the canonical (reduced) value.
-
#scale(factor) ⇒ Object
:nodoc:.
-
#to_r ⇒ Object
Rational representation.
-
#to_s ⇒ Object
String representation.
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
#deno ⇒ Object (readonly)
denominator
12 13 14 |
# File 'lib/shlisp_tools/ratio.rb', line 12 def deno @deno end |
#nume ⇒ Object (readonly)
numerator
10 11 12 |
# File 'lib/shlisp_tools/ratio.rb', line 10 def nume @nume end |
#rat ⇒ Object (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 |
#d ⇒ Object
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
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 |
#n ⇒ Object
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_r ⇒ Object
Rational representation
88 89 90 |
# File 'lib/shlisp_tools/ratio.rb', line 88 def to_r @rat end |
#to_s ⇒ Object
String representation
83 84 85 |
# File 'lib/shlisp_tools/ratio.rb', line 83 def to_s "#{@nume}/#{@deno}" end |