Class: HeadMusic::Rudiment::Tuning::Pythagorean
- Inherits:
-
HeadMusic::Rudiment::Tuning
- Object
- Base
- HeadMusic::Rudiment::Tuning
- HeadMusic::Rudiment::Tuning::Pythagorean
- Defined in:
- lib/head_music/rudiment/tuning/pythagorean.rb
Overview
Pythagorean tuning system based on stacking perfect fifths (3:2 ratio)
Constant Summary collapse
- INTERVAL_RATIOS =
Frequency ratios for intervals in Pythagorean tuning (relative to tonic) Generated by stacking perfect fifths and reducing to within one octave
{ unison: Rational(1, 1), minor_second: Rational(256, 243), # Pythagorean minor second major_second: Rational(9, 8), # Pythagorean major second minor_third: Rational(32, 27), # Pythagorean minor third major_third: Rational(81, 64), # Pythagorean major third (ditone) perfect_fourth: Rational(4, 3), # Perfect fourth tritone: Rational(729, 512), # Pythagorean tritone (augmented fourth) perfect_fifth: Rational(3, 2), # Perfect fifth minor_sixth: Rational(128, 81), # Pythagorean minor sixth major_sixth: Rational(27, 16), # Pythagorean major sixth minor_seventh: Rational(16, 9), # Pythagorean minor seventh major_seventh: Rational(243, 128), # Pythagorean major seventh octave: Rational(2, 1) # Octave }.freeze
- CHROMATIC_RATIOS =
Additional chromatic intervals for enharmonic equivalents
{ augmented_unison: Rational(2187, 2048), # Pythagorean augmented unison (sharp) diminished_second: Rational(256, 243) # Same as minor second in Pythagorean }.freeze
Instance Attribute Summary collapse
-
#tonal_center ⇒ Object
readonly
Returns the value of attribute tonal_center.
Instance Method Summary collapse
-
#frequency_for(pitch) ⇒ Object
-
#initialize(reference_pitch: :a440, tonal_center: nil) ⇒ Pythagorean
constructor
A new instance of Pythagorean.
Constructor Details
#initialize(reference_pitch: :a440, tonal_center: nil) ⇒ Pythagorean
Returns a new instance of Pythagorean.
32 33 34 35 |
# File 'lib/head_music/rudiment/tuning/pythagorean.rb', line 32 def initialize(reference_pitch: :a440, tonal_center: nil) super @tonal_center = HeadMusic::Rudiment::Pitch.get(tonal_center || "C4") end |
Instance Attribute Details
#tonal_center ⇒ Object (readonly)
Returns the value of attribute tonal_center.
30 31 32 |
# File 'lib/head_music/rudiment/tuning/pythagorean.rb', line 30 def tonal_center @tonal_center end |
Instance Method Details
#frequency_for(pitch) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/head_music/rudiment/tuning/pythagorean.rb', line 37 def frequency_for(pitch) pitch = HeadMusic::Rudiment::Pitch.get(pitch) # Calculate the frequency of the tonal center using equal temperament from reference pitch tonal_center_frequency = calculate_tonal_center_frequency # Calculate the interval from the tonal center to the requested pitch interval_from_tonal_center = (pitch - tonal_center).semitones # Get the Pythagorean ratio for this interval ratio = ratio_for_interval(interval_from_tonal_center) # Calculate the frequency tonal_center_frequency * ratio end |