Class: HeadMusic::Style::Guidelines::DirectionalStepToFinalNote

Inherits:
Annotation
  • Object
show all
Defined in:
lib/head_music/style/guidelines/directional_step_to_final_note.rb

Overview

Base class for guidelines requiring a step in a specific direction to the final note.

Direct Known Subclasses

StepDownToFinalNote, StepUpToFinalNote

Instance Method Summary collapse

Constructor Details

This class inherits a constructor from HeadMusic::Style::Annotation

Instance Method Details

#expected_direction?Boolean (private)

Returns:

Raises:



17
18
19
# File 'lib/head_music/style/guidelines/directional_step_to_final_note.rb', line 17

def expected_direction?
  raise NotImplementedError
end

#last_melodic_intervalObject (private)



25
26
27
# File 'lib/head_music/style/guidelines/directional_step_to_final_note.rb', line 25

def last_melodic_interval
  @last_melodic_interval ||= melodic_intervals.last
end

#marksObject



6
7
8
9
10
11
12
13
# File 'lib/head_music/style/guidelines/directional_step_to_final_note.rb', line 6

def marks
  return if last_melodic_interval.nil?

  fitness = 1
  fitness *= HeadMusic::PENALTY_FACTOR unless step?
  fitness *= HeadMusic::PENALTY_FACTOR unless expected_direction?
  HeadMusic::Style::Mark.for_all(notes[-2..], fitness: fitness) if fitness < 1
end

#step?Boolean (private)

Returns:



21
22
23
# File 'lib/head_music/style/guidelines/directional_step_to_final_note.rb', line 21

def step?
  last_melodic_interval&.step?
end