Teletype workflow, basics, and questions



yeah. mine did that too when I first got it.
hit ESC, then turn the knob on teletype to an empty scene and ENTER to load it, to start fresh.

or you can just type ‘m.act 0’ to turn off for now. If the light is still on. ‘tr.tog a’


Thank you both! I see what’s going on now. Just cleared all scripts so I can start from the ground up and slowly make my way through the studies and manual. Literally just racked it for the first time a few minutes ago so I have quite a ways to go.



Is this the proper functionality of the Ternary IF (?):

DEL 3 100: $ 2

J 1
K ? % J 2 PN.NEXT 1 PN.PREV 1

The pattern does not go next or prev but if i rewrite the script to this (at the cost of a line), it functions as intended:

J 1
IF % J 2: K PN.NEXT 1

edit: Thanks scanner!


the reason for this is with IF it first checks the condition and then executes one or the other. with a ternary if it selects one of 2 values, so it will evaluate both values before choosing between them. so what happens is - both PN.NEXT 1 and PN.PREV 1 get evaluated, so it moves forth and then it moves back.

another way to illustrate this would be doing something like A ? 1 O O - if you do this it will increment O twice.

a workaround would be doing something like this: PN.I 1 + PN.I 1 ? % J 2 1 -1; K PN.HERE 1


There was a discussion a while back about ways to do gate/trigger sequencing, and I suggested ways to encode rhythm in hex, etc.

At the time I was completely unaware that grid ops can work without a Grid, and there’s a grid visualizer mode that’s sort of “a taste of Grid” that you can use for display and control.

So if you’re comfortable with Teletype in general but haven’t gone through Grid Studies yet, you’ll find some useful techniques, especially for gate sequencing. It’s also another set of places you can store data if you’re hurting for variables :laughing:

Honestly I was never really interested in a Grid before, but I kind of want one now :blush:


Yeah! I’ve been using some grid button as temp variables. A related question for @scanner_darkly: is there a way to retrieve (get) button value (brightness)? So we can use a button as 0-15 value instead of binary? I may have missed how to do this.


yep, you can get a button’s background brightness level with G.BTN.L x where x is the button id (to set it do G.BTN.L x y where y is the brightness level). the acceptable range is 0…15, it’ll clip anything outside of that range.

this is just the background brightness level though, so you can’t use it to detect whether a button is pressed, for that you’d still want to use G.BTN.V (which is either 1 for pressed or 0 for not released).

now, of course you can set and read a button’s brightness level even if that button is not visible, which means you have a sneaky way of being able to store up to 256 values (as long as they’re within the 0…15 range). the only downside to this hack is that these values are not stored in flash/usb (as brightness is typically expected to be set with something like G.BTN).


Is it possible to easily create a script that works effectively as a burst generator to a single trigger output, where I’d be able to define the amount of repetitions and speed (delay)? I see how it could be done with multiple outputs, where each sequential output fires off a longer delay, but is this possible from one tr input to one tr output?


The default scenes ( include one called RANDOMS. TR 3 does something pretty close to what you’re describing, where the param knob sets the burst rate:

DEL ADD 40 Y : TR B 0


there’s also a new pair of ops, DEL.X and DEL.R, which allow you to set a user-defined number of delays at once. I’m not sure if they’ve made it into an “official” firmware or if it’s technically a beta.


DEL.R and DEL.X are in official 3.0 firmware (Edit: I was sure they were but I don’t see them in the 3.0 manual. The latest beta is very stable though.)

DEL.R 5 100: TR.P 1 will fire trigger 1 5 times with each pulse 100ms apart. With the first trigger occurring without a delay.

DEL.X works in a similar way but the first trigger is delayed by the delay time.


Beautiful! Thanks @rikrak @alanza. Can’t wait to try this one.


Oh and don’t forget to set TR.TIME to a suitably short gate length.


Yeah, this is very useful @rikrak !

@b_w - preceed that script with a line reading the param knob and you’ll be able to set the rate on the fly. The param knob range could also be set in the init script with your min and max ms values.


I’m constantly forgetting TR.TIME default is 100ms and often run into that issue. I kind of wish the default was 15.


the easy way to check whether something is in the official release is finding the latest official release version number either on the official firmware release page or the firmware guide thread and then checking the changelog.

as of today the latest official teletype release is 3.0, so anything listed as added after that is in beta right now (for detailed info and links to relevant threads including where to find the latest beta see the firmware guide above).


Would like to ask, how does one use ‘Break’ in the scripts and in what scenarios?


Here’s an example where BREAK is a bit more elegant than the alternative:

L 1 4: $ 1

PROB 75: $ 2



L 1 4: $ 1


(Actually, without being in front of a Teletype I’m not sure it’s necessary to transfer I to A in the first example or if it would still pass through in the second script call. Even so, I find the second version a little cleaner.)


Just in case it’s helpful: BREAK halts the execution of the rest of the script (if you write BREAK; ... even the rest of the line will not be executed). So often you “hide” it behind PROB or IF PREs to do what @Starthief illustrates—control whether part of a script happens or not.


I think I get it, but will need to try to put it into a script to see how it works for me. Thanks @alanza and @Starthief