Method: Musicality::CounterpointGenerator#initialize

Defined in:
lib/musicality/composition/generation/counterpoint_generator.rb

#initialize(rhythm, palette, max_fact = 5) ⇒ CounterpointGenerator

Returns a new instance of CounterpointGenerator.

Raises:

  • (ArgumentError)


5
6
7
8
9
10
11
12
13
14
15
16
# File 'lib/musicality/composition/generation/counterpoint_generator.rb', line 5

def initialize rhythm, palette, max_fact = 5
  raise ArgumentError, "max_fact must be >= palette size" if max_fact < palette.size
  
  @rhythm = rhythm
  @palette = palette
  @total_dur = rhythm.map {|dur| dur.abs }.inject(0,:+)
  @solution_classes = self.class.solution_classes(@total_dur, @palette)
  @solution_classes.keep_if do |sc|
    sc.map {|k,v| k*v}.inject(0,:+) == @total_dur
  end
  @solutions = figure_solutions(max_fact)
end