lib/xi/pattern/generators.rb in xi-lang-0.1.3 vs lib/xi/pattern/generators.rb in xi-lang-0.1.4
- old
+ new
@@ -49,16 +49,21 @@
i *= grow
end
end
end
- # Choose items from the list randomly
+ # Choose items from the +list+ randomly, +repeats+ number of times
#
+ # +list+ can be a *finite* enumerable or Pattern.
+ #
+ # @see Pattern::Transforms#rand
+ #
# @example
- # peek [1, 2, 3].p.rand #=> [2]
- # peek [1, 2, 3, 4].p.rand(6) #=> [1, 3, 2, 2, 4, 3]
+ # peek P.rand([1, 2, 3]) #=> [2]
+ # peek P.rand([1, 2, 3, 4], 6) #=> [1, 3, 2, 2, 4, 3]
#
+ # @param list [#each] list of values
# @param repeats [Fixnum, Symbol] number or inf (default: 1)
# @return [Pattern]
#
def rand(list, repeats=1)
Pattern.new(size: repeats) do |y|
@@ -68,14 +73,19 @@
end
# Choose randomly, but only allow repeating the same item after yielding
# all items from the list.
#
+ # +list+ can be a *finite* enumerable or Pattern.
+ #
+ # @see Pattern::Transforms#xrand
+ #
# @example
- # peek [1, 2, 3, 4, 5].p.xrand #=> [4]
- # peek [1, 2, 3].p.xrand(8) #=> [1, 3, 2, 3, 1, 2, 3, 2]
+ # peek P.xrand([1, 2, 3, 4, 5]) #=> [4]
+ # peek P.xrand([1, 2, 3], 8) #=> [1, 3, 2, 3, 1, 2, 3, 2]
#
+ # @param list [#each] list of values
# @param repeats [Fixnum, Symbol] number or inf (default: 1)
# @return [Pattern]
#
def xrand(list, repeats=1)
Pattern.new(size: repeats) do |y|
@@ -89,14 +99,19 @@
end
# Shuffle the list in random order, and use the same random order
# +repeats+ times
#
+ # +list+ can be a *finite* enumerable or Pattern.
+ #
+ # @see Pattern::Transforms#shuf
+ #
# @example
- # peek [1, 2, 3, 4, 5].p.xrand #=> [4]
- # peek [1, 2, 3].p.xrand(8) #=> [1, 3, 2, 3, 1, 2, 3, 2]
+ # peek P.shuf([1, 2, 3, 4, 5]) #=> [5, 3, 4, 1, 2]
+ # peek P.shuf([1, 2, 3], 3) #=> [2, 3, 1, 2, 3, 1, 2, 3, 1]
#
+ # @param list [#each] list of values
# @param repeats [Fixnum, Symbol] number or inf (default: 1)
# @return [Pattern]
#
def shuf(list, repeats=1)
Pattern.new(size: list.size * repeats) do |y|
@@ -105,19 +120,52 @@
xs.each { |x| y << x }
end
end
end
- # TODO Document
+ # Generates values from a sinewave discretized to +quant+ events
+ # for the duration of +dur+ cycles.
+ #
+ # Values range from -1 to 1
+ #
+ # @see #sin1 for the same function but constrained on 0 to 1 values
+ #
+ # @example
+ # P.sin(8).map { |i| i.round(2) }
+ # #=> [0.0, 0.71, 1.0, 0.71, 0.0, -0.71, -1.0, -0.71]
+ #
+ # @example +quant+ determines the size, +dur+ the total duration
+ # P.sin(8).size #=> 8
+ # P.sin(22).total_duration #=> (1/1)
+ # P.sin(19, 2).total_duration #=> (2/1)
+ #
+ # @param quant [Fixnum]
+ # @param dur [Fixnum] (default: 1)
+ # @return [Pattern]
+ #
def sin(quant, dur=1)
Pattern.new(size: quant, dur: dur / quant) do |y|
quant.times do |i|
y << Math.sin(i / quant * 2 * Math::PI)
end
end
end
- # TODO Document
+ # Generates values from a sinewave discretized to +quant+ events
+ # for the duration of +dur+ cycles.
+ #
+ # Values range from 0 to 1
+ #
+ # @see #sin
+ #
+ # @example
+ # P.sin1(8).map { |i| i.round(2) }
+ # #=> [0.5, 0.85, 1.0, 0.85, 0.5, 0.15, 0.0, 0.15]
+ #
+ # @param quant [Fixnum]
+ # @param dur [Fixnum] (default: 1)
+ # @return [Pattern]
+ #
def sin1(quant, dur=1)
sin(quant, dur).scale(-1, 1, 0, 1)
end
private