Been a while since I made anything in Sonic Pi so I just decided to try making a Euclidean rhythm generator. It’s working pretty well on my end, IMO.
# EUCLIDIAN SEQUENCER v0.1
# inspired by the code of computermusicdesign.com
define :euclid do |steps, pulses|
storedRhythm = []
bucket = 0
steps.times do
bucket += pulses
if bucket >= steps
bucket -= steps
storedRhythm.push(1)
else
storedRhythm.push(0)
end
end
return storedRhythm
end
define :rotateSeq do |seq, rotate|
l = seq.length()
output = Array.new(l)
i = 0
l.times do
output[i] = seq[((i+l-rotate)%l).abs()]
i += 1
end
return output
end
define :euclidSeq do |steps, pulses, rotate, seqSample, vol|
t = 0
seq = rotateSeq((euclid steps, pulses), rotate)
steps.times do
if seq[t] == 1
sample seqSample, amp: vol
end
sleep 1.0/steps
t += 1
end
end
steps = 8
in_thread do
loop do
euclidSeq(steps, 3, 1, :drum_bass_hard, 1)
end
end
in_thread do
loop do
euclidSeq(steps, 2, 3, :drum_cymbal_pedal, 0.6)
end
end
in_thread do
loop do
euclidSeq(steps, 5, 1, :drum_tom_lo_hard, 0.4)
end
end
in_thread do
loop do
euclidSeq(steps, 5, 4, :drum_tom_hi_hard, 0.3)
end
end