class Musicality::RandomSampler

Attributes

probabilities[R]
values[R]

Public Class Methods

new(vals, probs) click to toggle source
# File lib/musicality/composition/util/random_sampler.rb, line 5
def initialize vals, probs
  @values, @probabilities = vals, probs
  total_prob = probs.inject(0,:+)
  raise ArgumentError, "Total probability is not 1" if total_prob != 1
  
  offsets = AddingSequence.new(probs).over(1...probs.size).to_a
  changes = vals[1..-1].map{|val| Change::Immediate.new(val) }
  
  value_changes = Hash[ [offsets, changes].transpose ]
  @val_comp = ValueComputer.new(vals.first, value_changes)
end

Public Instance Methods

sample(n=nil) click to toggle source
# File lib/musicality/composition/util/random_sampler.rb, line 17
def sample n=nil
  if n.nil?
    return @val_comp.at(rand)
  else
    return Array.new(n){ @val_comp.at(rand) }
  end
end