Class: HeadMusic::Content::Voice::MelodicNotePair

Inherits:
Object
  • Object
show all
Defined in:
lib/head_music/content/voice.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(first_note, second_note) ⇒ MelodicNotePair

Returns a new instance of MelodicNotePair.



142
143
144
145
# File 'lib/head_music/content/voice.rb', line 142

def initialize(first_note, second_note)
  @first_note = first_note
  @second_note = second_note
end

Instance Attribute Details

#first_noteObject (readonly)

Returns the value of attribute first_note.



131
132
133
# File 'lib/head_music/content/voice.rb', line 131

def first_note
  @first_note
end

#second_noteObject (readonly)

Returns the value of attribute second_note.



131
132
133
# File 'lib/head_music/content/voice.rb', line 131

def second_note
  @second_note
end

Instance Method Details

#melodic_intervalObject



155
156
157
# File 'lib/head_music/content/voice.rb', line 155

def melodic_interval
  @melodic_interval ||= HeadMusic::Analysis::MelodicInterval.new(*notes)
end

#notesObject



147
148
149
# File 'lib/head_music/content/voice.rb', line 147

def notes
  @notes ||= [first_note, second_note]
end

#pitchesObject



151
152
153
# File 'lib/head_music/content/voice.rb', line 151

def pitches
  @pitches ||= notes.map(&:pitch)
end

#spells_consonant_triad_with?(other_note_pair) ⇒ Boolean

Returns:

  • (Boolean)


159
160
161
162
163
164
165
166
# File 'lib/head_music/content/voice.rb', line 159

def spells_consonant_triad_with?(other_note_pair)
  return false if step? || other_note_pair.step?

  combined_pitches = (pitches + other_note_pair.pitches).uniq
  return false if combined_pitches.length < 3

  HeadMusic::Analysis::PitchSet.new(combined_pitches).consonant_triad?
end