i was asked if it’s possible to use teletype to create something similar to orca, which proved to be an interesting challenge but actually very doable. and with teletype it’s really easy to explore different variations of the idea.
the scripts do the following (more notes below):
I- resets the sequencer
M- increments the counter and updates triggers and CVs
1- randomizes track divisors
2- randomizes track phases
3- shifts scale up
4- shifts scale down
5- updates track state
6- calculates note
7- updates triggers and CVs
8- initializes “linear” sequencer
pattern data is used for scale notes and track parameters:
0: steps 0…15 is your scale notes
1: steps 0…3 are track divisors, steps 4…7 are track weights
2: steps 0…3 are track phases
3: steps 0…3 are selected tracks for CV 1, steps 4…7 are selected tracks for CV 2
in addition to the above parameters you can also use
B to set the sequence length, and
C to set the scale shift.
A is used as the counter.
pattern banks are also used to store some data used by the scripts:
2steps 4…7 show the track states
3steps 8…1 show the track weights for the tracks that are active
3step 12 is the currently selected note for CV 1
3step 13 is the currently selected note for CV 2
to start, make sure you have
M script enabled, set its rate, choose your scale notes and execute script 8 - it’ll make both CV outputs step linearly through the sequence. then try scripts 1&2 to randomize track parameters, and change track assignments for CVs in steps 0…7 in bank 3 (use 0 or 1 here but you can experiment with other values too!). for further variation use scripts 3&4 to shift the scale.
I A 0 C 0
this script resets
A (the counter) and
C (the scale shift). if you just want to use it as a clock reset you can remove
C 0. also if you want to make sure your sequence is stored exactly as is use this to set the values for
C (everything else will get stored with the pattern data but not these 2).
SCRIPT 1 L 0 3 : PN 1 I RRAND 1 8
this script randomizes track divisors
SCRIPT 2 L 0 3 : PN 2 I RRAND 0 7
this script randomizes track phases
SCRIPT 3 C WRAP SUB C 1 0 15
this script shifts the scale up (
C is the scale offset basically)
SCRIPT 4 C WRAP ADD C 1 0 15
this script shifts the scale down
SCRIPT 5 X ADD I 4 D DIV ADD A PN 2 I PN 1 I PN 2 X MOD D 2 D MUL PN 2 X PN 1 X PN 3 ADD I 8 D
this script updates the track state for track specified in
I variable (
M script will call this from a loop)
SCRIPT 6 O LSH SUB I 1 2 D MUL PN 3 O PN 3 8 D ADD D MUL PN 3 O PN 3 9 D ADD D MUL PN 3 O PN 3 10 D ADD D MUL PN 3 O PN 3 11 PN 3 ADD 11 I D
this script calculates the note for CV specified in variable
M will call this from a loop as well). probably not the most efficient implementation but i couldn’t come up with a more compact form…
SCRIPT 7 IF PN 2 4 : TR.PULSE 1 IF PN 2 5 : TR.PULSE 2 D MOD ADD C PN 3 12 16 CV 1 N PN 0 D D MOD ADD C PN 3 13 16 CV 2 N PN 0 D
this script updates trigger and CV outputs. this is where you can change how triggers are generated - in this implementation they are triggered on each clock if the corresponding track is on. you could just make it follow the track exactly (so it’ll be a gate that will reflect the track state) or you could add some logic and combine several tracks. you can also transpose one of the CVs here.
SCRIPT 8 B 16 P.N 1 L 0 3 : P I LSH 1 I L 0 3 : P ADD 4 I LSH 1 I L 0 3 : PN 2 I 0 L 0 7 : PN 3 I 1
this script initializes it with the values that turn it into a linear 16 steps long sequencer.
M A MOD ADD A 1 B L 0 3 : SCRIPT 5 L 1 2 : SCRIPT 6 SCRIPT 7
the main script - it increments the counter, updates the track states, calculates the notes and updates triggers and CVs. try adding
IF EZ A : SCRIPT 3 here!
tt00.txt (1.2 KB)