(Teletype) 2.1 Release


huge thanks to @sliderule for this massive update! and @sam for the new cheatsheet!

get it here: https://github.com/monome/teletype/releases/tag/v2.1.0

What’s New

Teletype version 2.1 introduces new operators that mature the syntax and capability of the Teletype, as well as several bug fixes and enhancement features.

Major new features

Tracker Data Entry Improvements

Data entry in the tracker screen is now buffered, requiring an ENTER keystroke to commit changes, or SHIFT-ENTER to insert the value. All other navigation keystrokes will abandon data entry. The increment / decrement keystrokes (] and [), as well as the negate keystroke (-) function immediately if not in data entry mode, but modify the currently buffered value in edit mode (again, requiring a commit).

Turtle Operator

The Turtle operator allows 2-dimensional access to the patterns as portrayed out in Tracker mode. It uses new operators with the @ prefix. You can @MOVE X Y the turtle relative to its current position, or set its direction in degrees with @DIR and its speed with @SPEED and then execute a @STEP.

To access the value that the turtle operator points to, use @, which can also set the value with an argument.

The turtle can be constrained on the tracker grid by setting its fence with @FX1, @FY1, @FX2, and @FY2, or by using the shortcut operator @F x1 y1 x2 y2. When the turtle reaches the fence, its behaviour is governed by its fence mode, where the turtle can simply stop (@BUMP), wrap around to the other edge (@WRAP), or bounce off the fence and change direction (@BOUNCE). Each of these can be set to 1 to enable that mode.

Setting @SCRIPT N will cause script N to execute whenever the turtle crosses the boundary to another cell. This is different from simply calling @STEP; @SCRIPT N because the turtle is not guaranteed to change cells on every step if it is moving slowly enough.

Finally, the turtle can be displayed on the tracker screen with @SHOW 1, where it will indicate the current cell by pointing to it from the right side with the < symbol.

New Mods: EVERY, SKIP, and OTHER, plus SYNC

These mods allow rhythmic division of control flow. EVERY X: executes the post-command once per X at the Xth time the script is called. SKIP X: executes it every time but the Xth. OTHER: will execute when the previous EVERY/SKIP command did not.

Finally, SYNC X will set each EVERY and SKIP counter to X without modifying its divisor value. Using a negative number will set it to that number of steps before the step. Using SYNC -1 will cause each EVERY to execute on its next call, and each SKIP will not execute.

Script Line “Commenting”

Individual lines in scripts can now be disabled from execution by highlighting the line and pressing ALT-/. Disabled lines will appear dim. This status will persist through save/load from flash, but will not carry over to scenes saved to USB drive.

New Operators

W [condition]: is a new mod that operates as a while loop.
The BREAK operator stops executing the current script
BPM [bpm] returns the number of milliseconds per beat in a given BPM, great for setting M.
LAST [script] returns the number of milliseconds since script was last called.

New Operator Behaviour

SCRIPT with no argument now returns the current script number.
I is now local to its corresponding L statement.
IF/ELSE is now local to its script.

New keybindings

CTRL-1 through CTRL-8 toggle the mute status for scripts 1 to 8 respectively.
CTRL-9 toggles the METRO script.
SHIFT-ENTER now inserts a line in Scene Write mode.

Bug fixes

Temporal recursion now possible by fixing delay allocation issue, e.g.: DEL 250: SCRIPT SCRIPT
KILL now clears TR outputs and stops METRO.
SCENE will no longer execute from the INIT script on initial scene load.
AVG and Q.AVG now round up from offsets of 0.5 and greater.

Breaking Changes

As I is now local to L loops, it is no longer usable across scripts or as a general-purpose variable.
As IF/ELSE is now local to a script, scenes that relied on IF in one script and ELSE in another will be functionally broken.


https://monome.org/docs/modular/teletype/manual/ is updated.

if someone can run the pdf build i’ll update the release zip to include it.

also the cheetsheet can be rebuilt and i’ll get that linked on the docs site.

anyone see anything i missed?

edit: we missed EVERY/SKIP/OTHER/SYNC in the what’s new… hold on a minute while i update (DONE)


Re-reading the what’s new, I noticed that I made no mention of @SCRIPT!

Setting @SCRIPT N will cause script N to execute whenever the turtle crosses the boundary to another cell. This is different from simply calling @STEP; @SCRIPT N because the turtle is not guaranteed to change cells on every step if it is moving slowly enough.


@sliderule update coming on this one, thanks for spotting it


Great to see it finished - thanks a lot for all the work you put into it and the commitment and patience brought up in the discussion of the new operators and modes!

I just wondered if @QUANT now did not make into it?


I’ve rebuilt the zip file from commit ad358cd, and uploaded it to the release page.

Cheat sheet PR has been opened, there are still a few tweaks that me and @jlmitch5 need to make before it’s ready. Once it’s done we can either reupload the zip for 2.1.0 (which the OCD in me hates) or release 2.1.1.

@sliderule well done on this release. It makes me really happy to see such a big contribution from another community member. I’m looking forward to lots more!

I’d also like to say thank you for putting in so much effort to engage with all of us, and answering all of our questions.


@QUANT did not meet the deadline, but I could easily put it together for the next release.


You’re doing a great work :-D.
I think our beloved Teletype is the most powerful and musical module of all!!

Just a little question/suggestion:
what if we can add a swing function for pulses? for example TR.SWING A X for adding X% swinging to the A output.


Is there an easy link to the discussion for @QUANT? My searches are coming up blank.


Starts here:


4 posts were split to a new topic: (Teletype) Monitoring Live Variables


Quoting this so this so that it doesn’t get lost. This would actually be related to the R (Repeat) function, I think, and swing was something I hadn’t considered. I’ll make sure it gets included in the discussion when we’re hammering out the details of that feature.


As there are new firmware versions spreading with variable monitoring and screen graphics I wondered if @QUANT will meat the deadline this time?


Features are being developed independent of releases. Those are not “new” firmware versions, they’re test builds for the feature.

@QUANT will be in the next release, along with the live variable display.