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.