Class: HeadMusic::Analysis::DiatonicInterval::Size

Inherits:
Object
  • Object
show all
Defined in:
lib/head_music/analysis/diatonic_interval/size.rb

Overview

Encapsulate the distance methods of the interval

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(pitch1, pitch2) ⇒ Size

Returns a new instance of Size.



5
6
7
# File 'lib/head_music/analysis/diatonic_interval/size.rb', line 5

def initialize(pitch1, pitch2)
  @low_pitch, @high_pitch = *[pitch1, pitch2].sort
end

Instance Attribute Details

#high_pitchObject (readonly)

Returns the value of attribute high_pitch.



3
4
5
# File 'lib/head_music/analysis/diatonic_interval/size.rb', line 3

def high_pitch
  @high_pitch
end

#low_pitchObject (readonly)

Returns the value of attribute low_pitch.



3
4
5
# File 'lib/head_music/analysis/diatonic_interval/size.rb', line 3

def low_pitch
  @low_pitch
end

Instance Method Details

#compound?Boolean

Returns:

  • (Boolean)


25
26
27
# File 'lib/head_music/analysis/diatonic_interval/size.rb', line 25

def compound?
  !simple?
end

#numberObject



9
10
11
# File 'lib/head_music/analysis/diatonic_interval/size.rb', line 9

def number
  @number ||= @low_pitch.steps_to(@high_pitch) + 1
end

#octave_equivalent?Boolean (private)

Returns:

  • (Boolean)


47
48
49
# File 'lib/head_music/analysis/diatonic_interval/size.rb', line 47

def octave_equivalent?
  number > 1 && ((number - 1) % 7).zero?
end

#octavesObject



17
18
19
# File 'lib/head_music/analysis/diatonic_interval/size.rb', line 17

def octaves
  @octaves ||= number / 8
end

#semitonesObject



33
34
35
# File 'lib/head_music/analysis/diatonic_interval/size.rb', line 33

def semitones
  (high_pitch - low_pitch).to_i
end

#simple?Boolean

Returns:

  • (Boolean)


21
22
23
# File 'lib/head_music/analysis/diatonic_interval/size.rb', line 21

def simple?
  number <= 8
end

#simple_numberObject



13
14
15
# File 'lib/head_music/analysis/diatonic_interval/size.rb', line 13

def simple_number
  @simple_number ||= octave_equivalent? ? 8 : (number - 1) % 7 + 1
end

#simple_semitonesObject



29
30
31
# File 'lib/head_music/analysis/diatonic_interval/size.rb', line 29

def simple_semitones
  @simple_semitones ||= semitones % 12
end

#simple_stepsObject



41
42
43
# File 'lib/head_music/analysis/diatonic_interval/size.rb', line 41

def simple_steps
  steps % 7
end

#stepsObject



37
38
39
# File 'lib/head_music/analysis/diatonic_interval/size.rb', line 37

def steps
  number - 1
end