class HeadMusic::Style::Analysis

An analysis of music according to a style guide.

Attributes

guide[R]
voice[R]

Public Class Methods

new(guide, voice) click to toggle source
# File lib/head_music/style/analysis.rb, line 10
def initialize(guide, voice)
  @guide = guide
  @voice = voice
end

Public Instance Methods

adherent?() click to toggle source
# File lib/head_music/style/analysis.rb, line 30
def adherent?
  fitness == 1
end
annotation_messages()
Alias for: messages
annotations() click to toggle source
# File lib/head_music/style/analysis.rb, line 20
def annotations
  @annotations ||= @guide.analyze(voice)
end
fitness() click to toggle source
# File lib/head_music/style/analysis.rb, line 24
def fitness
  return 1.0 if annotations.empty?

  @fitness ||= fitness_scores.inject(:+).to_f / fitness_scores.length
end
messages() click to toggle source
# File lib/head_music/style/analysis.rb, line 15
def messages
  annotations.reject(&:adherent?).map(&:message)
end
Also aliased as: annotation_messages

Private Instance Methods

fitness_scores() click to toggle source
# File lib/head_music/style/analysis.rb, line 36
def fitness_scores
  @fitness_scores ||= annotations.map(&:fitness)
end