Class: HeadMusic::Analysis::DiatonicInterval::Parser
- Inherits:
-
Object
- Object
- HeadMusic::Analysis::DiatonicInterval::Parser
- Defined in:
- lib/head_music/analysis/diatonic_interval/parser.rb
Constant Summary collapse
- NUMBER_NAMES =
HeadMusic::Analysis::DiatonicInterval::NUMBER_NAMES
Instance Attribute Summary collapse
-
#identifier ⇒ Object
readonly
Returns the value of attribute identifier.
Instance Method Summary collapse
-
#degree_name ⇒ Object
-
#expand(identifier) ⇒ Object
-
#higher_letter ⇒ Object
-
#higher_pitch ⇒ Object
-
#initialize(identifier) ⇒ Parser
constructor
A new instance of Parser.
-
#interval ⇒ Object
The interval the identifier names, voiced from middle C upward.
-
#middle_c ⇒ Object
-
#quality_abbreviations ⇒ Object
-
#quality_for(abbreviation) ⇒ Object
-
#quality_name ⇒ Object
-
#semitones ⇒ Object
-
#steps ⇒ Object
-
#words ⇒ Object
Constructor Details
#initialize(identifier) ⇒ Parser
Returns a new instance of Parser.
6 7 8 |
# File 'lib/head_music/analysis/diatonic_interval/parser.rb', line 6 def initialize(identifier) @identifier = (identifier) end |
Instance Attribute Details
#identifier ⇒ Object (readonly)
Returns the value of attribute identifier.
4 5 6 |
# File 'lib/head_music/analysis/diatonic_interval/parser.rb', line 4 def identifier @identifier end |
Instance Method Details
#degree_name ⇒ Object
33 34 35 |
# File 'lib/head_music/analysis/diatonic_interval/parser.rb', line 33 def degree_name words.last end |
#expand(identifier) ⇒ Object
49 50 51 52 53 54 55 |
# File 'lib/head_music/analysis/diatonic_interval/parser.rb', line 49 def (identifier) if /[A-Z]\d{1,2}/i.match?(identifier) number = NUMBER_NAMES[identifier.gsub(/[A-Z]/i, "").to_i - 1] return [quality_for(identifier[0]), number].join("_").to_sym end identifier end |
#higher_letter ⇒ Object
41 42 43 |
# File 'lib/head_music/analysis/diatonic_interval/parser.rb', line 41 def higher_letter middle_c.letter_name.steps_up(steps) end |
#higher_pitch ⇒ Object
17 18 19 |
# File 'lib/head_music/analysis/diatonic_interval/parser.rb', line 17 def higher_pitch HeadMusic::Rudiment::Pitch.from_number_and_letter(middle_c + semitones, higher_letter) end |
#interval ⇒ Object
The interval the identifier names, voiced from middle C upward. Every interval of a given name is the same interval, so where it sits is arbitrary; middle C is simply a place to put it.
13 14 15 |
# File 'lib/head_music/analysis/diatonic_interval/parser.rb', line 13 def interval HeadMusic::Analysis::DiatonicInterval.new(middle_c, higher_pitch) end |
#middle_c ⇒ Object
45 46 47 |
# File 'lib/head_music/analysis/diatonic_interval/parser.rb', line 45 def middle_c HeadMusic::Rudiment::Pitch.middle_c end |
#quality_abbreviations ⇒ Object
57 58 59 |
# File 'lib/head_music/analysis/diatonic_interval/parser.rb', line 57 def quality_abbreviations HeadMusic::Analysis::DiatonicInterval::QUALITY_ABBREVIATIONS end |
#quality_for(abbreviation) ⇒ Object
61 62 63 64 65 |
# File 'lib/head_music/analysis/diatonic_interval/parser.rb', line 61 def quality_for(abbreviation) quality_abbreviations[abbreviation.to_sym] || quality_abbreviations[abbreviation.upcase.to_sym] || quality_abbreviations[abbreviation.downcase.to_sym] end |
#quality_name ⇒ Object
29 30 31 |
# File 'lib/head_music/analysis/diatonic_interval/parser.rb', line 29 def quality_name words[0..-2].join(" ").to_sym end |
#semitones ⇒ Object
21 22 23 |
# File 'lib/head_music/analysis/diatonic_interval/parser.rb', line 21 def semitones HeadMusic::Analysis::DiatonicInterval::Semitones.new(degree_name.to_sym, quality_name).count end |
#steps ⇒ Object
37 38 39 |
# File 'lib/head_music/analysis/diatonic_interval/parser.rb', line 37 def steps NUMBER_NAMES.index(degree_name) end |
#words ⇒ Object
25 26 27 |
# File 'lib/head_music/analysis/diatonic_interval/parser.rb', line 25 def words identifier.to_s.split(/[_ ]+/) end |