class Musicality::RandomRhythmGenerator

Attributes

durations[R]
probabilities[R]

Public Class Methods

new(palette_with_probs) click to toggle source
# File lib/musicality/composition/generation/random_rhythm_generator.rb, line 6
def initialize palette_with_probs
  @durations, @probabilities = palette_with_probs.entries.transpose
  @dur_sampler = RandomSampler.new(@durations,@probabilities)
end

Public Instance Methods

random_dur() click to toggle source
# File lib/musicality/composition/generation/random_rhythm_generator.rb, line 11
def random_dur
  @dur_sampler.sample
end
random_rhythm(target_dur, end_retries = 5) click to toggle source
# File lib/musicality/composition/generation/random_rhythm_generator.rb, line 15
def random_rhythm target_dur, end_retries = 5
  rhythm = []
  total_dur = 0
  retries = 0
  
  while(total_dur < target_dur && retries < end_retries)
    dur = random_dur
    
    if (dur + total_dur) <= target_dur
      total_dur += dur
      rhythm.push(dur)
    else
      retries += 1
    end
  end
  
  if total_dur < target_dur
    rhythm.push(target_dur - total_dur)
  end
  
  return rhythm
end