Teletype workflow, basics, and questions



The result is MOVE LEFT: BREAK
It doesn’t seem to work with BREAK but I could use this ternary “if” operator on many other occasions, it’s good to have it.

Edit: it seems I posted in the wrong thread, I thought it was a bug, my bad. The ? operator can be used in the middle of a line and that’s really cool, ie:

PN 3 K ? X RRND 1 3 RRND 6 9


I know this has probably been asked before but it’s really hard to search the letter “O” variable.

Is “O” global or per script?


O is global. I, J and K are the only variables that are local per script.


According to Google, “O” has

About 25,270,000,000 results. Surely one of those must contain the answer. :stuck_out_tongue:


Oh wow. Super useful. I missed the talk on this.


Is T not still per-script?


T has always been global, not per script


Next you’re gonna tell me it’s Berenstain


Are I, J and K in 3.0? or after? Seems I’ve been missing my threads lately!


I has been here a while; J and K were recently added post 3.0


J and K haven’t been officially released yet, you can find beta here: Teletype 3.+ feature requests and discussion


Is tomorrow the day for Pre-order on the Teletype? Must get my grubby hands on it.


I have a patch which relies heavily on pitch out of Marbles.

I’m looking to do this Supervoice thing :pleading_face:

How might I use Teletype (v.3) for sequencing a pad sound?

  • I would like to feed Teletype clock + Marbles CV
  • I could trig Teletype scripts with some Maths EOC/EOR
  • I would like Teletype to send CV + gates for envelopes or maybe strike DPO

As I type this out I amazingly feel incentivised to figure it out on my own! I’m just five studies in and keep getting distracted with learning the rest of my modular :grimacing:

Thank you! :heart:

Mutable Instruments Marbles

If you find yourself running out of trigger outputs and don’t have a TXO:

CV.SET 4 V 10
CV.SLEW 4 20
CV 4 0

I used a variation of this, reading the slew times from a pattern, to ping and modulate a filter to create varying kick drums :slight_smile:


I’m wondering if the following can be done with a teletype:

I’d like to visualize live loops of different lengths on a grid.

The idea is to map a button of the grid to a pedal looper unit of an ER-301. When pressed (1) it records, when released (0) it plays the loop.

I can count the time elapsed between the two states of the button (record and play) using LAST, store the value in ms in a variable and then divide this value by the width of a fader but the second part is more complicated: incrementing the value of this « dot » fader at regular intervals. I tried to use DEL.X and DEL.R to do that but I can’t make it work. I don’t know much about the internal timer of the Teletype. Can it be done without an external module, without external triggers ? Edit: There’s no easy way to re-trigger the DEL.X when it reaches the last command, so I guess my question doesn’t really make sense…


I would probably just use the script that the grid ops button calls do update the display. I may not be understanding your question. If you need to do something at regular intervals the Metro script seems well suited.


Thanks for your reply :slight_smile: Yes I could use LAST to set the tempo of the internal metronome and then update the value of a fader but (correct me if I’m wrong) there’s only one metro. The idea was to reflect the position of different/ asynchronous playheads on a grid, I should have exposed the goal like that in my previous post sorry, something like MLR. I don’t own Norns so I was looking for a similar solution using Teletype and ER-301 :smiley:


Oh, I see now. You could set metro to run very fast, say 50ms though you could go faster if needed down to M! 2. When the record button is released, set some pattern variable (say in P.N 1) to the total loop length in msec. And also set some corresponding pattern step (say in P.N 2) to 0.

Then each time metro is called, increment that value in P.N 2 by LAST. These value pairs in P.N 1 and P.N 2 should then be the ratio/percentage of how far the loop has progressed and you could update the fader(s) to display that percentage.

Then the only other tricky bit would be that if the values in P.N 2 are exceeding the loop length in P.N 1, reset them to 0 plus the difference - basically wrap them around the loop length in P.N 1.

That’s what I’d try, anyway.


Thanks ! I’m trying the solution you provided, it seems to work. Here’s what I have so far, script 5 writes the length of the recorded loop in PN 0 then PN 1 is the current position in ms (it starts playing, looping as soon as the button is released) and PN 2 is the position of the fader It’s not fully optimized but each fader moves/loops from 0 to 15 at its own speed.


G.FDR 0 0 0 16 1 2 0 3
G.FDR 1 0 1 16 1 2 0 4
G.BTX 0 0 2 1 1 1 0 5 2 1

J PN 1 0; K PN 0 0
PN 1 0 WRP + J LAST $ 0 K
PN 2 0 / PN 1 0 / K 16
G.FDR.N 0 PN 2 0

J PN 1 1; K PN 0 1
PN 1 1 WRP + J LAST $ 0 K
PN 2 1 / PN 1 1 / K 16
G.FDR.N 1 PN 2 1


// (not connected to ER-301 yet)

Edit: I’ve added the code for two asynchronous faders and two (latch) buttons for recording/playing. I’m not sure what I’m going to do now : reverse or speed change, I’ll try. At least the first goal (visualizing two asynchronous loops on a grid) is reached :slight_smile: / video for info.

Another version with speed control and reverse (work in progress^^)

J PN 1 0; K / PN 0 0 A
PN 1 0 WRP + J LAST $ 0 K
PN 2 0 / PN 1 0 / K 16
G.FDR.N 0 PN 2 0

J PN 1 1; K / PN 0 1 B
PN 1 1 WRP + J LAST $ 0 K
PN 2 1 / PN 1 1 / K 16
G.FDR.N 1 PN 2 1








G.GFX 0 0 0 0 16 1 2 0 3 1 2
G.BTX 0 0 2 1 1 1 0 5 2 1
G.GFX 1 2 4 2 5 1 2 0 7 2 1
M! 2; INIT.P.ALL; G.GFDR.N 1 2
G.GFDR.RN 1 -2 2; G.FDR.PR 2 4
G.FDR.PR 3 4


I had a similar requirement (independent speeds) when I was writing a Scene a few months back.

I did it by storing separate speeds in the table as ‘timers’. Each timer value decreased by 1 every cycle. When a timer reached zero, the lit cell (or ‘ball’) moved right and the timer was reset.

I needed to have multiple balls per grid line and the balls accelerated as they proceeded. So not quite the same, but I did write comprehensive notes that may help.