Module: Xi::Pattern::Generators
- Included in:
- Xi::Pattern
- Defined in:
- lib/xi/pattern/generators.rb
Instance Method Summary collapse
-
#geom(start = 0, grow = 1, length = inf) ⇒ Pattern
Create a geometric series pattern of
length
values, beingstart
the starting value andstep
the multiplication factor. -
#isaw(*args) ⇒ Pattern
Generates an inverse sawtooth waveform, discretized to
quant
events for the duration ofdelta
cycles. -
#rand(list, repeats = 1) ⇒ Pattern
Choose items from the
list
randomly,repeats
number of times. -
#saw(quant, delta = 1) ⇒ Pattern
Generates values from a sawtooth waveform, discretized to
quant
events for the duration ofdelta
cycles. -
#series(start = 0, step = 1, length = inf) ⇒ Pattern
Create an arithmetic series pattern of
length
values, beingstart
the starting value andstep
the addition factor. -
#shuf(list, repeats = 1) ⇒ Pattern
Shuffle the list in random order, and use the same random order
repeats
times. -
#sin(quant, delta = 1) ⇒ Pattern
Generates values from a sinewave discretized to
quant
events for the duration ofdelta
cycles. -
#tri(quant, delta = 1) ⇒ Pattern
Generates a triangle waveform, discretized to
quant
events for the duration ofdelta
cycles. -
#xrand(list, repeats = 1) ⇒ Pattern
Choose randomly, but only allow repeating the same item after yielding all items from the list.
Instance Method Details
#geom(start = 0, grow = 1, length = inf) ⇒ Pattern
Create a geometric series pattern of length
values, being start
the starting value and step
the multiplication factor.
43 44 45 46 47 48 49 50 51 |
# File 'lib/xi/pattern/generators.rb', line 43 def geom(start=0, grow=1, length=inf) Pattern.new(size: length) do |y| i = start loop_n(length) do y << i i *= grow end end end |
#isaw(*args) ⇒ Pattern
Generates an inverse sawtooth waveform, discretized to quant
events for the duration of delta
cycles
Values range from 0 to 1
191 192 193 |
# File 'lib/xi/pattern/generators.rb', line 191 def isaw(*args) -P.saw(*args) + 1 end |
#rand(list, repeats = 1) ⇒ Pattern
Choose items from the list
randomly, repeats
number of times
list
can be a finite enumerable or Pattern.
67 68 69 70 71 72 |
# File 'lib/xi/pattern/generators.rb', line 67 def rand(list, repeats=1) Pattern.new(list, size: repeats) do |y| ls = list.to_a loop_n(repeats) { y << ls.sample } end end |
#saw(quant, delta = 1) ⇒ Pattern
Generates values from a sawtooth waveform, discretized to quant
events for the duration of delta
cycles
Values range from 0 to 1
168 169 170 171 172 173 174 |
# File 'lib/xi/pattern/generators.rb', line 168 def saw(quant, delta=1) Pattern.new(size: quant, delta: delta / quant) do |y| quant.times do |i| y << i / quant end end end |
#series(start = 0, step = 1, length = inf) ⇒ Pattern
Create an arithmetic series pattern of length
values, being start
the starting value and step
the addition factor.
18 19 20 21 22 23 24 25 26 |
# File 'lib/xi/pattern/generators.rb', line 18 def series(start=0, step=1, length=inf) Pattern.new(size: length) do |y| i = start loop_n(length) do y << i i += step end end end |
#shuf(list, repeats = 1) ⇒ Pattern
Shuffle the list in random order, and use the same random order repeats
times
list
can be a finite enumerable or Pattern.
115 116 117 118 119 120 121 122 |
# File 'lib/xi/pattern/generators.rb', line 115 def shuf(list, repeats=1) Pattern.new(list, size: list.size * repeats) do |y| xs = list.to_a.shuffle loop_n(repeats) do |i| xs.each { |x| y << x } end end end |
#sin(quant, delta = 1) ⇒ Pattern
Generates values from a sinewave discretized to quant
events for the duration of delta
cycles.
Values range from 0 to 1
142 143 144 145 146 147 148 |
# File 'lib/xi/pattern/generators.rb', line 142 def sin(quant, delta=1) Pattern.new(size: quant, delta: delta / quant) do |y| quant.times do |i| y << (Math.sin(i / quant * 2 * Math::PI) + 1) / 2 end end end |
#tri(quant, delta = 1) ⇒ Pattern
Generates a triangle waveform, discretized to quant
events for the duration of delta
cycles
Values range from 0 to 1
208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 |
# File 'lib/xi/pattern/generators.rb', line 208 def tri(quant, delta=1) Pattern.new(size: quant, delta: delta / quant) do |y| half_quant = quant / 2 up_half = half_quant.to_f.ceil down_half = quant - up_half up_half.times do |i| y << i / half_quant end down_half.times do |i| j = down_half - i y << j / half_quant end end end |
#xrand(list, repeats = 1) ⇒ Pattern
Choose randomly, but only allow repeating the same item after yielding all items from the list.
list
can be a finite enumerable or Pattern.
89 90 91 92 93 94 95 96 97 98 |
# File 'lib/xi/pattern/generators.rb', line 89 def xrand(list, repeats=1) Pattern.new(list, size: repeats) do |y| ls = list.to_a xs = nil loop_n(repeats) do |i| xs = ls.shuffle if i % ls.size == 0 y << xs[i % ls.size] end end end |