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