Here are the scripts i’ve used for this
1: // drum patterns generation
P.N 0 // this selects the first pattern
P.L 16 // sets pattern length to 16
L 0 15 : P I RAND 4 // fills each step with 0,1,2,3 or 4
2: // generate 4 different triggers from the pattern generated in script 1
P.N 0
P.NEXT // reads the next pattern step each time the script is triggered
IF EQ P.HERE 1 : TR.PULSE A // if the current value is 1, trig out of output A
IF EQ P.HERE 2 : TR.PULSE B // if the current value is 2, trig out of output B
IF EQ P.HERE 3 : TR.PULSE C // etc…
IF EQ P.HERE 4 : TR.PULSE D
3 : // triggers rolls (generated by the M script)
X RRAND 200 450 // variable X takes a value between 200 and 450
MUTE 2 // mutes script 2 (so kills the normal pattern as long it’s muted)
M RRAND 5 50 // gives the Metro (M) script a rate between 5 and 50 milliseconds. Used to ‘retrigger’ the current hit in a loop.
M.ACT 1 // activates the Metro script
DEL X : M.ACT 0 // after X milliseconds, shuts up the M script. So X is in fact the length of the roll
DEL X : UNMUTE 2 // after the roll, go back to the normal pattern play.
4 : // Mutate the pitch CV for the melodies. The Pitch CV, generated elsewhere, goes into the IN of Teletype.
P.N 1 // selects pattern 2 (already filled with the values 0,5,7,9)
P.L 4 // sets the pattern length to 4
CV 1 IN // mirrors the CV coming to the IN to the CV 1, going out output 1
PROB 1 : CV.OFF 1 N P RAND 4 // one time out of 100, adds an offset to the pitch CV (transposition) which is a value in semi-tones (thus the ‘N’) randomly chosen between 0,5,7 and 9.
PROB 10 : CV 2 VV RAND 1000 // 1 time out of 10, CV 2 takes a random value between 0 an 10V. This moves the ‘big knob’ of Frames, controlling several sound parameters. Note that in the Init script, this CV is slewed a lot (takes 16 seconds to reach the new position).
M : // generate rolls (when it’s activated by script 3)
IF EQ P.HERE 1 : TR.PULSE A // triggers out A (at a rate between 5 and 50 ms, see script 3)
IF EQ P.HERE 2 : TR.PULSE B // etc…
IF EQ P.HERE 3 : TR.PULSE C
IF EQ P.HERE 4 : TR.PULSE D
I : // initial values
TR.TIME A 1 // triggers out of A will be 1 ms long
TR.TIME B 1
TR.TIME C 1
TR.TIME D 1
CV.SLEW 1 0 // no slew for CV 1 (pitch output)
CV.SLEW 2 16000 // 16 second slew for CV 2 (slow sound morphing)