Sha256: a51a17179ab307a9fc3db511dbf9171629705b49713f5570dab6db070b13327c

Contents?: true

Size: 557 Bytes

Versions: 9

Compression:

Stored size: 557 Bytes

Contents

# Module for style guidelines.
module HeadMusic::Style::Guidelines; end

# A voice shouldn't expend the range of a 10th.
class HeadMusic::Style::Guidelines::SingableRange < HeadMusic::Style::Annotation
  MAXIMUM_RANGE = 10

  MESSAGE = "Limit melodic range to a 10th."

  def marks
    HeadMusic::Style::Mark.for_each(extremes, fitness: HeadMusic::PENALTY_FACTOR**overage) if overage.positive?
  end

  private

  def overage
    notes.any? ? [range.number - MAXIMUM_RANGE, 0].max : 0
  end

  def extremes
    (highest_notes + lowest_notes).sort
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
head_music-7.0.5 lib/head_music/style/guidelines/singable_range.rb
head_music-7.0.4 lib/head_music/style/guidelines/singable_range.rb
head_music-7.0.3 lib/head_music/style/guidelines/singable_range.rb
head_music-7.0.2 lib/head_music/style/guidelines/singable_range.rb
head_music-7.0.1 lib/head_music/style/guidelines/singable_range.rb
head_music-7.0.0 lib/head_music/style/guidelines/singable_range.rb
head_music-6.0.1 lib/head_music/style/guidelines/singable_range.rb
head_music-6.0.0 lib/head_music/style/guidelines/singable_range.rb
head_music-5.0.0 lib/head_music/style/guidelines/singable_range.rb