Class: RBMusic::Interval
- Inherits:
-
Object
- Object
- RBMusic::Interval
- Defined in:
- lib/rb-music/interval.rb
Instance Attribute Summary collapse
-
#coord ⇒ Object
Returns the value of attribute coord.
Class Method Summary collapse
- .from_name(name) ⇒ Object
- .from_semitones(num) ⇒ Object
- .from_tones_semitones(tone_semitone) ⇒ Object
Instance Method Summary collapse
- #add(interval) ⇒ Object
-
#initialize(coord) ⇒ Interval
constructor
A new instance of Interval.
- #semitone ⇒ Object
- #subtract(interval) ⇒ Object
- #tone_semitone ⇒ Object
Constructor Details
#initialize(coord) ⇒ Interval
Returns a new instance of Interval.
6 7 8 |
# File 'lib/rb-music/interval.rb', line 6 def initialize(coord) self.coord = coord end |
Instance Attribute Details
#coord ⇒ Object
Returns the value of attribute coord.
4 5 6 |
# File 'lib/rb-music/interval.rb', line 4 def coord @coord end |
Class Method Details
.from_name(name) ⇒ Object
10 11 12 |
# File 'lib/rb-music/interval.rb', line 10 def self.from_name(name) Interval.new(INTERVALS[name.to_sym]) end |
.from_semitones(num) ⇒ Object
14 15 16 |
# File 'lib/rb-music/interval.rb', line 14 def self.from_semitones(num) Interval.new(INTERVALS_SEMITONES[num]) end |
.from_tones_semitones(tone_semitone) ⇒ Object
18 19 20 21 |
# File 'lib/rb-music/interval.rb', line 18 def self.from_tones_semitones(tone_semitone) # multiply [tones, semitones] vector with [-1 2;3 -5] to get coordinate from tones and semitones Interval.new([tone_semitone[0] * -1 + tone_semitone[1] * 3, tone_semitone[0] * 2 + tone_semitone[1] * -5]) end |
Instance Method Details
#add(interval) ⇒ Object
34 35 36 37 38 39 |
# File 'lib/rb-music/interval.rb', line 34 def add(interval) if interval.is_a?(String) interval = Interval.from_name(interval) end Interval.new([coord[0] + interval.coord[0], coord[1] + interval.coord[1]]) end |
#semitone ⇒ Object
29 30 31 32 |
# File 'lib/rb-music/interval.rb', line 29 def semitone # number of semitones of interval = tones * 2 + semitones tone_semitone[0] * 2 + tone_semitone[1] end |
#subtract(interval) ⇒ Object
41 42 43 44 45 46 |
# File 'lib/rb-music/interval.rb', line 41 def subtract(interval) if interval.is_a?(String) interval = Interval.from_name(interval) end Interval.new([coord[0] - interval.coord[0], coord[1] - interval.coord[1]]) end |
#tone_semitone ⇒ Object
23 24 25 26 27 |
# File 'lib/rb-music/interval.rb', line 23 def tone_semitone # multiply coord vector with [5 2;3 1] to get coordinate in tones and semitones # [5 2;3 1] is the inverse of [-1 2;3 -5], which is the coordinates of [tone; semitone] @tone_semitone ||= [coord[0] * 5 + coord[1] * 3, coord[0] * 2 + coord[1] * 1] end |