Teletype is a dynamic, musical event triggering platform.
PDF command reference chart—PDF scene recall sheet—Default scenes
Current version:3.0.0—Firmware update procedure
some keyboards losing keystrokes
Grid integration allows you to use grid to visualize, control and execute teletype scripts. You can create your own UIs using grid ops, or control Teletype directly with the Grid Control mode. Built in Grid Visualizer allows designing and using grid scenes without a grid. For more information and examples of grid scenes please see theGrid Studies.
You can now select multiple lines when editing scripts by holdingshift. You can move the current selection up and down withalt-<up>andalt-<down>. You can copy/cut/paste a multiline selection as well. To delete selected lines without copying into the clipboard usealt-<delete>.
Three level undo is also now available withctrl-zshortcut.
You now can connect up to three ER-301s via i2c and address up to 100 virtual CV channels and 100 virtual TR channels per ER-301. (The outputs range 1-100, 101-200, and 201-300 respectively.) To function, this requires a slight mod to current in-market ER-301s and a specialized i2c cable that reorders two of the pins. Find more informationon the Orthogonal Devices ER-301 Wiki Teletype Integration Page.
The 16n Faderbank is an open-source sixteen fader controller with support for USB MIDI, standard MIDI, and i2c communication with the Teletype. It operates just like an IN or PARAM (or the TXi for that matter) in that you read values from the device. You use the operator FADER (or the alias FB) and the number of the slider you wish to poll (1-16). Know that longer cables may require that you use a powered bus board even if you only have one device on your Teletype’s i2c bus. (You will know that you have a problem if your Teletype randomly hangs on reads.)
The SSSR Labs SM010 Matrixarchate is a 16x8 IO Sequenceable Matrix Signal Router. Teletype integration allows you to switch programs and control connections. For a complete list of available ops refer to the manual. Information on how to connect the module can be foundin the SM010 manual.
Support for controlling Whimsical Raps W/ module via i2c. See the respective section for a complete list of available ops and refer to https://www.whimsicalraps.com/pages/w-type for more details.
? x y zis a ternary “if” operator, it will select betweenyandzbased on the conditionx.
P.MINPN.MINP.MAXPN.MAXreturn the position for the first smallest/largest value in a pattern between theSTARTandENDpoints.
P.RND/PN.RNDreturn a randomly selected value in a pattern between theSTARTandENDpoints.
P.+/PN.+/P.-/PN.-increment/decrement a pattern value by the specified amount.
P.+W/PN.+W/P.-W/PN.-Wsame as above and wrap to the specified range.
TO.CV.CALIBallows you to lock-in an offset across power cycles to calibrate your TELEX CV output (TO.CV.RESETremoves the calibration).
TO.ENVnow accepts gate values (1/0) to trigger the attack and decay.
KR.CV xget the current CV value for channelx
KR.MUTE xKR.MUTE x yget/set mute state for channelx
KR.TMUTE xtoggle mute state for channelx
KR.CLK xadvance the clock for channelx
Too many to list, please refer to their respective sections.
$forSCRIPT
RND/RRNDRAND/RRAND
WRPforWRAP
SCLforSCALE
Holdshiftwhile making line selection in script editing to select multiple lines. Usealt-<up>andalt-<down>to move selected lines up and down. Copy/cut/paste shortcuts work with multiline selection as well. To delete selected lines without copying into the clipboard usealt-<delete>.
While editing a line you can now usectrl-<left>/ctrl-<right>to move by words.
ctrl-zprovides three level undo in script editing.
AdditionalAlt-Hshortcut is available to view the Help screen.
Alt-Gin Live mode will turn on the Grid Visualizer, which has its own shortcuts. Refer to theKeyssection for a complete list.
The keybindings to insert a scaled knob value in the Tracker mode were changed fromctrltoctrl-altand fromshifttoctrl-shift.
i2c initialization delayed to account for ER-301 bootup
last screen saved to flash
knob jitter when loading/saving scenes reduced
duplicate commands not added to history
SCALEprecision improved
PARAMset properly when used in the init script
PARAMandINwon’t reset to 0 afterINIT.DATA
PN.HERE,P.POP,PN.POPwill update the tracker screen
P.RM/PN.RMwill not change pattern length if deleting outside of length range
TIMEandLASTare now 1ms accurate
RAND/RRANDwill properly work with large range values
Previously, when pasting the clipboard while in script editing the pasted line would replace the current line. It will now instead push the current line down. This might result in some lines being pushed beyond the script limits - if this happens, usectrl-zto undo the change, delete some lines and then paste again.
Iwould previously get initialized to 0 when executing a script. If you called a script from another script’s loop this meant you had to use a variable to pass the loop’s currentIvalue to the called script. This is not needed anymore - when a script is called from another script itsIvalue will be set to the currentIvalue of the calling script.
Teletype version 2.2 introduces Chaos and Bitwise operators, Live mode view of variables, INIT operator, ability to calibrate CV In and Param knob and set Min/Max scale values for both, a screensaver, Random Number Generator, and a number of fixes and improvements.
TheCHAOSoperator provides a new source of uncertainty to the Teletype via chaotic yet deterministic systems. This operator relies on various chaotic maps for the creation of randomized musical events. Chaotic maps are conducive to creating music because fractals contain a symmetry of repetition that diverges just enough to create beautiful visual structures that at times also apply to audio. In mathematics a map is considered an evolution function that uses polynomials to drive iterative procedures. The output from these functions can be assigned to control voltages. This works because chaotic maps tend to repeat with slight variations offering useful oscillations between uncertainty and predictability.
Bitwise operators have been added to compliment the logic functions and offer the ability to maximize the use of variables available on the Teletype.
Typically, when a variable is assigned a value it fully occupies that variable space; should you want to set another you’ll have to use the next available variable. In conditions where a state of on, off, or a bitwise mathematical operation can provide the data required, the inclusion of these operators give users far more choices. Each variable normally contains 16 bits and Bitwise allows you toBSET,BGET, andBCLRa value from a particular bit location among its 16 positions, thus supplying 16 potential flags in the same variable space.
The new op familyINITfeatures operator syntax for clearing various states from the unforgiving INIT with no parameters that clears ALL state data (be careful as there is no undo) to the ability to clear CV, variable data, patterns, scenes, scripts, time, ranges, and triggers.
This helps the user to quickly check and monitor variables across the Teletype. Instead of single command line parameter checks the user is now able to simply press the~ key(Tilde) and have a persistent display of eight system variables.
Screen saver engages after 90 minutes of inactivity
IN.SCALE min maxsets the min/max values of the CV Input jackPARAM.SCALE min maxset the min/max scale of the Parameter KnobIN.CAL.MINsets the zero point when calibrating the CV Input jackIN.CAL.MAXsets the max point (16383) when calibrating the CV Input jackPARAM.CAL.MINsets the zero point when calibrating the Parameter KobPARAM.CAL.MAXsets the max point (16383) when calibrating the Parameter KobRgenerate a random numberR.MINset the low end of the random number generatorR.MAXset the upper end of the random number generatorDELcommandsJI(Just Intonation) op for 1V/Oct tuningINopTeletype version 2.1 introduces new operators that mature the syntax and capability of the Teletype, as well as several bug fixes and enhancement features.
Data entry in the tracker screen is nowbuffered, requiring anENTERkeystroke to commit changes, orSHIFT-ENTERto 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).
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 Ythe turtle relative to its current position, or set its direction in degrees with@DIRand its speed with@SPEEDand 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 itsfence 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 to1to enable that mode.
Setting@SCRIPT Nwill cause scriptNto execute whenever the turtle crosses the boundary to another cell. This is different from simply calling@STEP; @SCRIPT Nbecause 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.
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.
Individual lines in scripts can now be disabled from execution by highlighting the line and pressingALT-/. 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.
W [condition]:is a new mod that operates as a while loop. TheBREAKoperator stops executing the current scriptBPM [bpm]returns the number of milliseconds per beat in a given BPM, great for settingM.LAST [script]returns the number of milliseconds sincescriptwas last called.
SCRIPTwith no argument now returns the current script number.Iis now local to its correspondingLstatement.IF/ELSEis now local to its script.
CTRL-1throughCTRL-8toggle the mute status for scripts 1 to 8 respectively.CTRL-9toggles the METRO script.SHIFT-ENTERnow inserts a line in Scene Write mode.
Temporal recursion now possible by fixing delay allocation issue, e.g.: DEL 250: SCRIPT SCRIPTKILLnow clearsTRoutputs and stops METRO.SCENEwill no longer execute from the INIT script on initial scene load.AVGandQ.AVGnow round up from offsets of 0.5 and greater.
AsIis now local toLloops, it is no longer usable across scripts or as a general-purpose variable. AsIF/ELSEis now local to a script, scenes that relied on IF in one script and ELSE in another will be functionally broken.
Teletype version 2.0 represents a large rewrite of the Teletype code base. There are many new language additions, some small breaking changes and a lot of under the hood enhancements.
Several commands on one line, separated by semicolons.
e.g.CV 1 N 60; TR.PULSE 1
See the section on “Sub commands” for more information.
For example, useTR.P 1instead ofTR.PULSE 1, and use+ 1 1, instead ofADD 1 1.
See the section on “Aliases” for more information.
PNversions of everyPOPThere are nowPNversions of everyPOP. For example, instead of:
P.I 0
P.START 0
P.I 1
P.START 10You can use:
PN.START 0 0
PN.START 1 10OPsLots ofOPs have been added for interacting with the wonderful TELEXi input expander and TELEXo output expander. See their respective sections in the documentation for more information.
The function keys can now directly trigger a script.
The<tab>key is now used to cycle between live, edit and pattern modes, and there are now easy access keys to directly jump to a mode.
Many new text editing keyboard shortcuts have been added.
See the “Modes” documentation for a listing of all the keybindings.
You can now save you scenes to USB memory stick at any time, and not just at boot up. Just insert a USB memory stick to start the save and load process. Your edit scene should not be effected.
It should also be significantly more reliable with a wider ranger of memory sticks.
WARNING:Please backup the contents of your USB stick before inserting it. Particularly with a freshly flashed Teletype as you will end up overwriting all the saved scenes with blank ones.
M!op to set it as low as 2ms (at your own risk), see “Metronome”OPsection for more.Removed the need for theIIOP.
For example,II MP.PRESET 1will become justMP.PRESET 1.
MergeMUTEandUNMUTEOPs toMUTE x/MUTE x y.
See the documentation forMUTEfor more information.
Remove unused MeadowphysicsOPs.
Removed:MP.SYNC,MP.MUTE,MP.UNMUTE,MP.FREEZE,MP.UNFREEZE.
Rename Ansible MeadowphysicsOPs to start withME.
This was done to avoid conflicts with the MeadowphysicsOPs.
WARNING: If you restore your scripts from a USB memory stick, please manually fix any changes first. Alternatively, incorrect commands (due to the above changes) will be skipped when imported, please re-add them.
The cause of these is well understood, and they are essentially harmless. Changing modes with the<tab>key will force the screen to redraw. A fix is coming in version 2.1.
The keyboard is attached to the front panel, for typing commands. The commands can be executed immediately inLIVE modeor assigned to one of the eight trigger inputs inEDIT mode. The knob and in jack can be used to set and replace values.
Teletype starts up in LIVE mode. You’ll see a friendly>prompt, where commands are entered. The command:
TR.TOG Awill toggle trigger A after pressing enter. Consider:
CV 1 V 5
CV 2 N 7
CV 1 0Here the first command sets CV 1 to 5 volts. The second command sets CV 2 to note 7 (which is 7 semitones up). The last command sets CV 1 back to 0.
Data flows from right to left, so it becomes possible to do this:
CV 1 N RAND 12Here a random note between 0 and 12 is set to CV 1.
We can change the behavior of a command with aPREsuch asDEL:
DEL 500 : TR.TOG ATR.TOG Awill be delayed by 500ms upon execution.
A helpful display line appears above the command line in dim font. Here any entered commands will return their numerical value if they have one.
SCRIPTS, or several lines of commands, can be assigned to trigger inputs. This is when things get musically interesting. To edit each script, we shift into EDIT mode.
Four small icons are displayed in LIVE mode to give some important feedback about the state of Teletype. These icons will be brightly lit when the above is true, else will remain dim. They are, from left to right:
Toggle between EDIT and LIVE modes by pushingTAB.
The prompt now indicates the script you’re currently editing:
1-8indicates the script associated with corresponding triggerMis for the internal metronomeIis the init script, which is executed upon scene recallScript 1 will be executed when trigger input 1 (top left jack on the panel) receives a low-to-high voltage transition (trigger, or front edge of a gate). Consider the following as script 1:
1:
TR.TOG ANow when input 1 receives a trigger,TR.TOG Ais executed, which toggles the state of output trigger A.
Scripts can have multiple lines:
1:
TR.TOG A
CV 1 V RAND 4Now each time input 1 receives a trigger, CV 1 is set to a random volt between 0 and 4, in addition to output trigger A being toggled.
TheMscript is driven by an internal metronome, so no external trigger is required. By default the metronome interval is 1000ms. You can change this readily (for example, in LIVE mode):
M 500The metronome interval is now 500ms. You can disable/enable the metronome entirely withM.ACT:
M.ACT 0Now the metronome is off, and theMscript will not be executed. SetM.ACTto 1 to re-enable.
Patterns facilitate musical data manipulation– lists of numbers that can be used as sequences, chord sets, rhythms, or whatever you choose. Pattern memory consists four banks of 64 steps. Functions are provided for a variety of pattern creation, transformation, and playback. The most basic method of creating a pattern is by directly adding numbers to the sequence:
P.PUSH 5
P.PUSH 11
P.PUSH 9
P.PUSH 3P.PUSHadds the provided value to the end of the list– patterns keep track of their length, which can be read or modified withP.L. Now the pattern length is 4, and the list looks something like:
5, 11, 9, 3Patterns also have an indexP.I, which could be considered a playhead.P.NEXTwill advance the index by one, and return the value stored at the new index. If the playhead hits the end of the list, it will either wrap to the beginning (ifP.WRAPis set to 1, which it is by default) or simply continue reading at the final position.
So, this script on input 1 would work well:
1:
CV 1 N P.NEXTEach time input 1 is triggered, the pattern moves forward one then CV 1 is set to the note value of the pattern at the new index. This is a basic looped sequence. We could add further control on script 2:
2:
P.I 0SinceP.Iis the playhead, trigger input 2 will reset the playhead back to zero. It won’t change the CV, as that only happens when script 1 is triggered.
We can change a value within the pattern directly:
P 0 12This changes index 0 to 12 (it was previously 5), so now we have12, 11, 9, 3.
We’ve been working with pattern0up to this point. There are four pattern banks, and we can switch banks this way:
P.N 1Now we’re on pattern bank 1.P.NEXT,P.PUSH,P, (and several more commands) all reference the current pattern bank. Each pattern maintains its own play index, wrap parameter, length, etc.
We can directly access and changeanypattern value with the commandPN:
PN 3 0 22Here the first argument (3) is thebank, second (0) is theindex, and last is the new value (22). You could do this by doingP.N 3thenP 0 22but there are cases where a direct read/write is needed in your patch.
Check theCommand Setsection below for more pattern commands.
Patterns are stored in flash with each scene!
Editing patterns with scripts or from the command line isn’t always ergonomic. When you’d like to visually edit patterns, TRACKER mode is the way.
TheTABkey cycles between LIVE, EDIT and TRACKER mode. You can also get directly to TRACKER mode by pressing theNUM LOCKkey. TRACKER mode is the one with 4 columns of numbers on the Teletype screen.
The current pattern memory is displayed in these columns. Use the arrow keys to navigate. Holding ALT will jump by pages.
The edit position is indicated by the brightest number. Very dim numbers indicate they are outside the pattern length.
Use the square bracket keys[and]to decrease/increase the values. Backspace sets the value to 0. Entering numbers will overwrite a new value. You can cut/copy/paste with ALT-X-C-V.
Check theKeyssection for a complete list of tracker shortcuts.
ASCENEis a complete set of scripts and patterns. Stored in flash, scenes can be saved between sessions. Many scenes ship as examples. On startup, the last used scene is loaded by Teletype.
Access the SCENE menu usingESCAPE. The bracket keys ([and]) navigate between the scenes. Use the up/down arrow keys to read the scenetext. This text will/should describe what the scene does generally along with input/output functions.ENTERwill load the selected scene, orESCAPEto abort.
To save a scene, holdALTwhile pushingESCAPE. Use the brackets to select the destination save position. Edit the text section as usual– you can scroll down for many lines. The top line is the name of the scene.ALT-ENTERwill save the scene to flash.
To facilitate performance without the need for the keyboard, scenes can be recalled directly from the module’s front panel.
SCENE RECALLbutton next to the USB jack on the panel.PARAMknob to highlight your desired preset.SCENE RECALLbutton for 1 second to load the selected scene.TheINITscript (represented asI) is executed when a preset is recalled. This is a good place to set initial values of variables if needed, like metro timeMor time enableTIME.ACTfor example.
Teletype’s scenes can be saved and loaded from a USB flash drive. When a flash drive is inserted, Teletype will recognize it and go into disk mode. First, all 32 scenes will be written to text files on the drive with names of the formtt##s.txt. For example, scene 5 will be saved tott05s.txt. The screen will displayWRITE.......as this is done.
Once complete, Teletype will attempt to read any files namedtt##.txtand load them into memory. For example, a file namedtt13.txtwould be loaded as scene 13 on Teletype. The screen will displayREAD......Once this process is complete, Teletype will return to LIVE mode and the drive can be safely removed.
For best results, use an FAT-formatted USB flash drive. If Teletype does not recognize a disk that is inserted within a few seconds, it may be best to try another.
An example of possible scenes to load, as well as the set of factory default scenes, can be found at theTeletype Codex.
Teletype uses prefix notation. Evaluation happens from right to left.
The left value gets assignment (set). Here, temp variableXis assigned zero:
X 0Temp variableYis assigned to the value ofX:
Y XXis beingread(getX), and this value is being used tosetY.
Instead of numbers or variables, we can use operators to perform more complex behavior:
X TOSSTOSSreturns a random state, either 0 or 1 on each call.
Some operators require several arguments:
X ADD 1 2HereADDneeds two arguments, and gets 1 and 2.Xis assigned the result ofADD, soXis now 3.
If a value is returned at the end of a command, it is printed as a MESSAGE. This is visible in LIVE mode just above the command prompt. (In the examples below ignore the // comments).
8 // prints 8
X 4
X // prints 4
ADD 8 32 // prints 40Many parameters are indexed, such as CV and TR. This means that CV and TR have multiple values (in this case, each has four.) We pass an extra argument to specify which index we want to read or write.
CV 1 0Here CV 1 is set to 0. You can leave off the 0 to print the value.
CV 1 // prints value of CV 1Or, this works too:
X CV 1 // set X to current value of CV 1Here is an example of using an operatorRANDto set a random voltage:
CV 1 V RAND 4First a random value between 0 and 3 is generated. The result is turned into a volt with a table lookup, and the final value is assigned to CV 1.
The order of the arguments is important, of course. Consider:
CV RRAND 1 4 0RRANDuses two arguments, 1 and 4, returning a value between these two. This command, then, chooses a random CV output (1-4) to set to 0. This might seem confusing, so it’s possible to clarify it by pulling it apart:
X RRAND 1 4
CV X 0Here we useXas a temp step before setting the final CV.
With some practice it becomes easier to combine many functions into the same command.
Furthermore, you can use a semicolon to include multiple commands on the same line:
X RRAND 1 4; CV X 0This is particularly useful inINITscripts where you may want to initialize several values at once:
A 66; X 101; TR.TIME 1 20;Don’t forget to checkout theTeletype Studiesfor an example-driven guide to the language.
These bindings work everywhere.
Key | Action |
|---|---|
<tab> | change modes, live to edit to pattern and back |
<esc> | preset read mode, or return to last mode |
alt-<esc> | preset write mode |
win-<esc> | clear delays, stack and slews |
shift-alt-?/alt-h | help text, or return to last mode |
<F1>to<F8> | run corresponding script |
<F9> | run metro script |
<F10> | run init script |
alt-<F1>toalt-<F8> | edit corresponding script |
alt-<F9> | edit metro script |
alt-<F10> | edit init script |
ctrl-<F1>toctrl-<F8> | mute/unmute corresponding script |
ctrl-<F9> | enable/disable metro script |
<numpad-1>to<numpad-8> | run corresponding script |
<num lock>/<F11> | jump to pattern mode |
<print screen>/<F12> | jump to live mode |
These bindings work when entering text or code.
In most cases, the clipboard is shared betweenlive,editand the 2presetmodes.
Key | Action |
|---|---|
<left>/ctrl-b | move cursor left |
<right>/ctrl-f | move cursor right |
ctrl-<left> | move left by one word |
ctrl-<right> | move right by one word |
<home>/ctrl-a | move to beginning of line |
<end>/ctrl-e | move to end of line |
<backspace>/ctrl-h | backwards delete one character |
<delete>/ctrl-d | forwards delete one character |
shift-<backspace>/ctrl-u | delete from cursor to beginning |
shift-<delete>/ctrl-e | delete from cursor to end |
alt-<backspace>/ctrl-w | delete from cursor to beginning of word |
ctrl-x/alt-x | cut to clipboard |
ctrl-c/alt-c | copy to clipboard |
ctrl-v/alt-v | paste to clipboard |
Key | Action |
|---|---|
<down>/C-n | history next |
<up>/C-p | history previous |
<enter> | execute command |
~ | toggle variables |
[/] | switch to edit mode |
alt-g | toggle grid visualizer |
alt-<arrows> | move grid cursor |
alt-shift-<arrows> | select grid area |
alt-<space> | emulate grid press |
alt-/ | switch grid pages |
alt-\ | toggle grid control view |
alt-<prt sc> | insert grid x/y/w/h |
In full grid visualizer mode pressingaltis not required.
Ineditmode multiple lines can be selected and used with the clipboard.
Key | Action |
|---|---|
<down>/C-n | line down |
<up>/C-p | line up |
[ | previous script |
] | next script |
<enter> | enter command |
shift-<enter> | insert command |
alt-/ | toggle line comment |
shift-<up> | expand selection up |
shift-<down> | expand selection down |
alt-<delete> | delete selection |
alt-<up> | move selection up |
alt-<down> | move selection down |
ctrl-z | undo (3 levels) |
The tracker mode clipboard is independent of text and code clipboard.
Key | Action |
|---|---|
<down> | move down |
alt-<down> | move a page down |
<up> | move up |
alt-<up> | move a page up |
<left> | move left |
alt-<left> | move to the very left |
<right> | move right |
alt-<right> | move to the very right |
[ | decrement by 1 |
] | increment by 1 |
<backspace> | delete a digit |
shift-<backspace> | delete an entry, shift numbers up |
<enter> | commit edit (increase length if cursor in position after last entry) |
shift-<enter> | commit edit, then duplicate entry and shift downwards (increase length as<enter>) |
alt-x | cut value (n.b.ctrl-xnot supported) |
alt-c | copy value (n.b.ctrl-cnot supported) |
alt-v | paste value (n.b.ctrl-vnot supported) |
shift-alt-v | insert value |
shift-l | set length to current position |
alt-l | go to current length entry |
shift-s | set start to current position |
alt-s | go to start entry |
shift-e | set end to current position |
alt-e | go to end entry |
- | negate value |
<space> | toggle non-zero to zero, and zero to 1 |
0to9 | numeric entry |
shift-2(@) | toggle turtle display marker (<) |
ctrl-alt | insert knob value scaled to 0..31 |
ctrl-shift | insert knob value scaled to 0..1023 |
Key | Action |
|---|---|
<down>/C-n | line down |
<up>/C-p | line up |
<left>/[ | preset down |
<right>/] | preset up |
<enter> | load preset |
Key | Action |
|---|---|
<down>/C-n | line down |
<up>/C-p | line up |
[ | preset down |
] | preset up |
<enter> | enter text |
shift-<enter> | insert text |
alt-<enter> | save preset |
Key | Action |
|---|---|
<down>/C-n | line down |
<up>/C-p | line up |
<left>/[ | previous page |
<right>/] | next page |
General purpose temp vars:X,Y,Z, andT.
Ttypically used for time values, but can be used freely.
A-Dare assigned 1-4 by default (as a convenience for TR labeling, but TR can be addressed with simply 1-4). All may be overwritten and used freely.
OP | OP (set) | Alias | Description |
|---|---|---|---|
A | A x | - | get / set the variableA, default1 |
B | B x | - | get / set the variableB, default2 |
C | C x | - | get / set the variableC, default3 |
D | D x | - | get / set the variableD, default4 |
DRUNK | DRUNK x | - | Changes by-1,0, or1upon each read, saving its state. SettingDRUNKwill give it a new value for the next read, and drunkedness will continue on from there with subsequent reads. Setting DRUNK.MINandDRUNK.MAXcontrols the lower and upper bounds(inclusive) that DRUNKcan reach.DRUNK.WRAPcontrols whether the value canwrap around when it reaches it’s bounds. |
DRUNK.MIN | DRUNK.MIN x | - | set the lower bound forDRUNK, default0 |
DRUNK.MAX | DRUNK.MAX x | - | set the upper bound forDRUNK, default255 |
DRUNK.WRAP | DRUNK.WRAP x | - | shouldDRUNKwrap around when it reaches it’s bounds, default0 |
FLIP | FLIP x | - | returns inverted state (0or1) on each read (also settable) |
I | I x | - | Get / set the variableI, this variable is overwritten byL, but can be usedfreely outside an Lloop. Each script gets its ownIvariable, so if you calla script from another script’s loop you can still use and modify Iwithoutaffecting the calling loop. In this scenario the script getting called will have its Ivalue initialized with the calling loop’s currentIvalue. |
O | O x | - | Auto-increments byO.INCaftereach access. The initial value is0. Thelower and upper bounds can be set by O.MIN(default0) andO.MAX(default 63).O.WRAPcontrols if the value wraps when it reaches a bound(default is 1).Example: <br/>O => 0<br/>O => 1<br/>X O<br/>X => 2<br/>O.INC 2<br/>O => 3 (O increments after it's accessed)<br/>O => 5<br/>O.INC -2<br/>O 2<br/>O => 2<br/>O => 0<br/>O => 63<br/>O => 61<br/> |
O.INC | O.INC x | - | how much to incrementOby on each invocation, default1 |
O.MIN | O.MIN x | - | the lower bound forO, default0 |
O.MAX | O.MAX x | - | the upper bound forO, default63 |
O.WRAP | O.WRAP x | - | shouldOwrap when it reaches its bounds, default1 |
T | T x | - | get / set the variableT, typically used for time, default0 |
TIME | TIME x | - | timer value, counts up in ms., wraps after 32s, can be set |
TIME.ACT | TIME.ACT x | - | enable or disable timer counting, default1 |
LAST x | - | - | Gets the number of milliseconds since the current script was run. From the live mode, shows time elapsed since last run of I script. For example, one-line tap tempo: <br/>M LAST SCRIPT <br/>Running this script twice will set the metronome to be the time between runs. |
X | X x | - | get / set the variableX, default0 |
Y | Y x | - | get / set the variableY, default0 |
Z | Z x | - | get / set the variableZ, default0 |
J | J x | - | Get / set the variableJ, Each script gets its ownJvariable, so if you calla script from another script you can still use and modify Jwithout affecting the calling script. |
K | K x | - | Get / set the variableK, Each script gets its ownKvariable, so if you calla script from another script you can still use and modify Kwithout affecting the calling script. |
The Teletype trigger inputs are numbered 1-8, the CV and trigger outputs 1-4. See the Ansible documentation for details of the Ansible output numbering when in Teletype mode.
OP | OP (set) | Alias | Description |
|---|---|---|---|
CV x | CV x y | - | Get the value of CV associated with outputx, or set the CV output ofxtoy. |
CV.OFF x | CV.OFF x y | - | Get the value of the offset added to the CV value at outputx. The offset isadded at the final stage. Set the value of the offset added to the CV value at output xtoy. |
CV.SET x | - | - | Set the CV value at outputxbypassing any slew settings. |
CV.SLEW x | CV.SLEW x y | - | Get the slew time in ms associated with CV outputx. Set the slew timeassociated with CV output xtoyms. |
IN | - | - | Get the value of the IN jack. This returns a valuue in the range 0-16383. |
IN.SCALE min max | - | - | Set static scaling of theINCV to betweenminandmax. |
PARAM | - | PRM | Get the value of the PARAM knob. This returns a valuue in the range 0-16383. |
PARAM.SCALE min max | - | - | Set static scaling of the PARAM knob to betweenminandmax. |
IN.CAL.MIN | - | - | 1. Connect a patch cable from a calibrated voltage source 2. Set the voltage source to 0 volts 3. Execute IN.CAL.MIN from the live terminal 4. Call IN and confirm the 0 result |
IN.CAL.MAX | - | - | 5. Set the voltage source to target maximum voltage (10V) 6. Execute IN.CAL.MAX from the live terminal 7. Call IN and confirm that the result is 16383 |
IN.CAL.RESET | - | - | Resets the input CV calibration |
PARAM.CAL.MIN | - | - | 1. Turn the PARAM knob all the way to the left 2. Execute PARAM.CAL.MIN from the live terminal 3. Call PARAM and confirm the 0 result |
PARAM.CAL.MAX | - | - | 4. Turn the knob all the way to the right 5. Execute PARAM.CAL.MAX from the live terminal 6. Call PARAM and verify that the result is 16383 |
PARAM.CAL.RESET | - | - | Resets the Parameter Knob calibration |
TR x | TR x y | - | Get the current state of trigger outputx. Set the state of triggeroutput xtoy(0-1). |
TR.POL x | TR.POL x y | - | Get the current polarity of trigger outputx. Set the polarity of triggeroutput xtoy(0-1). When TR.POL = 1, the pulse is 0 to 1 then back to 0.When TR.POL = 0, the inverse is true, 1 to 0 to 1. |
TR.TIME x | TR.TIME x y | - | Get the pulse time of trigger outputx. Set the pulse time of triggeroutput xtoyms. |
TR.TOG x | - | - | Flip the state of trigger outputx. |
TR.PULSE x | - | TR.P | Pulse trigger output x. |
MUTE x | MUTE x y | - | Mute the trigger input onx(0-7) whenyis non-zero. |
STATE x | - | - | Read the current state of trigger inputx(0=low, 1=high). |
DEVICE.FLIP | - | - | Flip the screen, the inputs and the outputs. This op is useful if you want to mount your Teletype upside down. The new state will be saved to flash. |
Patterns facilitate musical data manipulation– lists of numbers that can be used as sequences, chord sets, rhythms, or whatever you choose. Pattern memory consists four banks of 64 steps. Functions are provided for a variety of pattern creation, transformation, and playback.
New in teletype 2.0, a second version of all Pattern ops have been added. The originalPops (P,P.L,P.NEXT, etc.) act upon the ‘working pattern’ as defined byP.N. By default the working pattern is assigned to pattern 0 (P.N 0), in order to execute a command on pattern 1 usingPops you would need to first reassign the working pattern to pattern 1 (P.N 1).
The new set of ops,PN(PN,PN.L,PN.NEXT, etc.), include a variable to designate the pattern number they act upon, and don’t effect the pattern assignment of the ‘working pattern’ (ex:PN.NEXT 2would increment pattern 2 one index and return the value at the new index). For simplicity throughout this introduction we will only refer to thePops, but keep in mind that they now each have aPNcounterpart (all of which are detailed below)
Both patterns and their arrays of numbers are indexed from 0. This makes the first pattern number 0, and the first value of a pattern is index 0. The pattern index (P.I) functions like a playhead which can be moved throughout the pattern and/or read using ops:P,P.I,P.HERE,P.NEXT, andP.PREV. You can contain pattern movements to ranges of a pattern and define wrapping behavior using ops:P.START,P.END,P.L, andP.WRAP.
Values can be edited, added, and retrieved from the command line using ops:P,P.INS,P.RM,P.PUSH,P.HERE,P.NEXT, andP.PREV. Some of these ops will additionally impact the pattern length upon their execution:P.INS,P.RM,P.PUSH, andP.POP.
To see your current pattern data use the<tab>key to cycle through live mode, edit mode, and pattern mode. In pattern mode each of the 4 patterns is represented as a column. You can use the arrow keys to navigate throughout the 4 patterns and their 64 values. For reference a key of numbers runs the down the lefthand side of the screen in pattern mode displaying 0-63.
From a blank set of patterns you can enter data by typing into the first cell in a column. Once you hit<enter>you will move to the cell below and the pattern length will become one step long. You can continue this process to write out a pattern of desired length. The step you are editing is always the brightest. As you add steps to a pattern by editing the value and hitting<enter>they become brighter than the unused cells. This provides a visual indication of the pattern length.
The start and end points of a pattern are represented by the dotted line next to the column, and the highlighted dot in this line indicates the current pattern index for each of the patterns. See the key bindings for an extensive list of editing shortcuts available within pattern mode.
OP | OP (set) | Alias | Description |
|---|---|---|---|
P.N | P.N x | - | get/set the pattern number for the working pattern, default0. AllPops refer to this pattern. |
P x | P x y | - | get/set the value of the working pattern at indexx. All positive values (0-63) can be set or returned while index values greater than 63 clip to 63. Negativexvalues are indexed backwards from the end of the pattern length of the working pattern.Example: with a pattern length of 6 for the working pattern: P 10retrieves the working pattern value at index 6 P.I -2retrieves the working pattern value at index 4 This applies to PNas well, except the pattern number is the first variable and a second variable specifies the index. |
PN x y | PN x y z | - | get/set the value of patternxat indexy |
P.L | P.L x | - | get/set pattern length of the working pattern, non-destructive to data |
PN.L x | PN.L x y | - | get/set pattern length of pattern x. non-destructive to data |
P.WRAP | P.WRAP x | - | when the working pattern reaches its bounds does it wrap (0/1). WithPN.WRAPenabled (1), when an index reaches its upper or lower bound usingP.NEXTorP.PREVit will wrap to the other end of the pattern and you can continue advancing. The bounds of P.WRAP are defined throughP.L,P.START, andP.END.If wrap is enabled ( P.WRAP 1) a pattern will begin at its start location and advance to the lesser index of either its end location or the end of its pattern lengthExamples: With wrap enabled, a pattern length of 6, a start location of 2 , and an end location of 8. P.WRAP 1; P.L 6; P.START 2; P.END 8The pattern will wrap between the indexes 2and5.With wrap enabled, a pattern length of 10, a start location of 3, and an end location of 6. P.WRAP 1; P.L 10; P.START 3; P.END 6The pattern will wrap between the indexes 3and6.If wrap is disabled ( P.WRAP 0) a pattern will run between its start and end locations and halt at either bound.This applies to PN.WRAPas well, except the pattern number is the first variable and a second variable specifies the wrap behavior (0/1). |
PN.WRAP x | PN.WRAP x y | - | when patternxreaches its bounds does it wrap (0/1), default1(enabled) |
P.START | P.START x | - | get/set the start location of the working pattern, default0 |
PN.START x | PN.START x y | - | get/set the start location of patternx, default0 |
P.END | P.END x | - | get/set the end location of the working pattern, default63 |
PN.END x | PN.END x y | - | get/set the end location of the patternx, default63 |
P.I | P.I x | - | get/set index position for the working pattern. all values greater than pattern length return the first step beyond the pattern length. negative values are indexed backwards from the end of the pattern length. Example: With a pattern length of 6(P.L 6), yielding an index range of0-5:P.I 3moves the index of the working pattern to 3P.I 10moves the index of the working pattern to 6P.I -2moves the index of the working pattern to 4This applies to PN.I, except the pattern number is the first variable and a second variable specifics the index. |
PN.I x | PN.I x y | - | get/set index position for patternx |
P.HERE | P.HERE x | - | get/set value at current index of working pattern |
PN.HERE x | PN.HERE x y | - | get/set value at current index of patternx |
P.NEXT | P.NEXT x | - | increment index of working pattern then get/set value |
PN.NEXT x | PN.NEXT x y | - | increment index of patternxthen get/set value |
P.PREV | P.PREV x | - | decrement index of working pattern then get/set value |
PN.PREV x | PN.PREV x y | - | decrement index of patternxthen get/set value |
P.INS x y | - | - | insert valueyat indexxof working pattern, shift later values down, destructive to loop length |
PN.INS x y z | - | - | insert valuezat indexyof patternx, shift later values down, destructive to loop length |
P.RM x | - | - | delete indexxof working pattern, shift later values up, destructive to loop length |
PN.RM x y | - | - | delete indexyof patternx, shift later values up, destructive to loop length |
P.PUSH x | - | - | insert valuexto the end of the working pattern (like a stack), destructive to loop length |
PN.PUSH x y | - | - | insert valueyto the end of patternx(like a stack), destructive to loop length |
P.POP | - | - | return and remove the value from the end of the working pattern (like a stack), destructive to loop length |
PN.POP x | - | - | return and remove the value from the end of patternx(like a stack), destructive to loop length |
P.MIN | - | - | find the first minimum value in the pattern between the START and END for the working pattern and return its index |
PN.MIN x | - | - | find the first minimum value in the pattern between the START and END for patternxand return its index |
P.MAX | - | - | find the first maximum value in the pattern between the START and END for the working pattern and return its index |
PN.MAX x | - | - | find the first maximum value in the pattern between the START and END for patternxand return its index |
P.RND | - | - | return a value randomly selected between the start and the end position |
PN.RND x | - | - | return a value randomly selected between the start and the end position of patternx |
P.+ x y | - | - | increase the value of the working pattern at indexxbyy |
PN.+ x y z | - | - | increase the value of patternxat indexybyz |
P.- x y | - | - | decrease the value of the working pattern at indexxbyy |
PN.- x y z | - | - | decrease the value of patternxat indexybyz |
P.+W x y a b | - | - | increase the value of the working pattern at indexxbyyand wrap it toa..brange |
PN.+W x y z a b | - | - | increase the value of patternxat indexybyzand wrap it toa..brange |
P.-W x y a b | - | - | decrease the value of the working pattern at indexxbyyand wrap it toa..brange |
PN.-W x y z a b | - | - | decrease the value of patternxat indexybyzand wrap it toa..brange |
OP | OP (set) | Alias | Description |
|---|---|---|---|
IF x: ... | - | - | Ifxis not zero execute command#### Advanced IF/ELIF/ELSEusage1. Intermediate statements always run text<br/> SCRIPT 1:<br/> IF 0: 0 => do nothing<br/> TR.P 1 => always happens<br/> ELSE: TR.P 2 => else branch runs because of the previous IF<br/>2. ELSEwithout anIFtext<br/> SCRIPT 1:<br/> ELSE: TR.P 1 => never runs, as there is no preceding IF<br/>3. ELIFwithout anIFtext<br/> SCRIPT 1:<br/> ELIF 1: TR.P 1 => never runs, as there is no preceding IF<br/>4. Independent scripts text<br/> SCRIPT 1:<br/> IF 1: TR.P 1 => pulse output 1<br/><br/> SCRIPT 2:<br/> ELSE: TR.P 2 => never runs regardless of what happens in script 1<br/> (see example 2)<br/>5. Dependent scripts text<br/> SCRIPT 1:<br/> IF 0: TR.P 1 => do nothing<br/> SCRIPT 2 => will pulse output 2<br/><br/> SCRIPT 2:<br/> ELSE: TR.P 2 => will not pulse output 2 if called directly,<br/> but will if called from script 1<br/> |
ELIF x: ... | - | - | if all previousIF/ELIFfail, andxis not zero, execute command |
ELSE: ... | - | - | if all previousIF/ELIFfail, excute command |
L x y: ... | - | - | Run the command sequentially withIvalues fromxtoy.For example: <br/>L 1 4: TR.PULSE I => pulse outputs 1, 2, 3 and 4<br/>L 4 1: TR.PULSE I => pulse outputs 4, 3, 2 and 1<br/> |
W x: ... | - | - | Runs the command while the conditionxis true or the loop iterations exceed 10000.For example, to find the first iterated power of 2 greater than 100: <br/>A 2<br/>W LT A 100: A * A A <br/>A will be 256. |
EVERY x: ... | - | - | Runs the command everyxtimes the line is executed. This is tracked on a per-line basis, so each script can have 6 different “dividers”.Here is a 1-script clock divider: <br/>EVERY 2: TR.P 1<br/>EVERY 4: TR.P 2<br/>EVERY 8: TR.P 3<br/>EVERY 16: TR.P 4<br/>The numbers donotneed to be evenly divisible by each other, so there is no problem with: <br/>EVERY 2: TR.P 1<br/>EVERY 3: TR.P 2<br/> |
SKIP x: ... | - | - | This is the corollary function toEVERY, essentially behaving as its exact opposite. |
OTHER: ... | - | - | OTHERcan be used to do somthing alternately with a precedingEVERYorSKIPcommand.For example, here is a script that alternates between two triggers to make a four-on-the-floor beat with hats between the beats: <br/>EVERY 4: TR.P 1<br/>OTHER: TR.P 2<br/>You could add snares on beats 2 and 4 with: <br/>SKIP 2: TR.P 3<br/> |
SYNC x | - | - | Causes all of theEVERYandSYNCcounters to synchronize their offsets, respecting their individual divisor values.Negative numbers will synchronize to to the divisor value, such that SYNC -1causes all every counters to be 1 number before their divisor, causing eachEVERYto be true on its next call, and eachSKIPto be false. |
PROB x: ... | - | - | potentially execute command with probabilityx(0-100) |
SCRIPT | SCRIPT x | $ | Execute scriptx(1-8), recursion allowed.There is a limit of 8 for the maximum number of nested calls to SCRIPTto stop infinite loops from locking up the Teletype. |
SCENE | SCENE x | - | Load scenex(0-31).Doesnotexecute the Iscript.Willnotexecute from the Iscript on scene load. Will execute on subsequent calls to theIscript.WARNING: You will lose any unsaved changes to your scene. |
KILL | - | - | clears stack, clears delays, cancels pulses, cancels slews, disables metronome |
BREAK | - | BRK | halts execution of the current script |
INIT | - | - | WARNING: You will lose all settings when you initialize using INIT- there is NO undo! |
INIT.CV x | - | - | clears all parameters on CV associated with output x |
INIT.CV.ALL | - | - | clears all parameters on all CV’s |
INIT.DATA | - | - | Clears the following variables and resets them to default values: A, B, C, D, CV slew, Drunk min/max, M, O, Q, R, T, TR. Does not affect the CV input (IN) or the Parameter knob (PARAM) values. |
INIT.P x | - | - | clears pattern associated with pattern number x |
INIT.P.ALL | - | - | clears all patterns |
INIT.SCENE | - | - | loads a blank scene |
INIT.SCRIPT x | - | - | clear script number x |
INIT.SCRIPT.ALL | - | - | clear all scripts |
INIT.TIME x | - | - | clear time on trigger x |
INIT.TR x | - | - | clear all parameters on trigger associated with TR x |
INIT.TR.ALL | - | - | clear all triggers |
Logical operators such asEQ,ORandLTreturn1for true, and0for false.
OP | OP (set) | Alias | Description |
|---|---|---|---|
ADD x y | - | + | addxandytogether |
SUB x y | - | - | subtractyfromx |
MUL x y | - | * | returnsxtimesy, bounded to integer limits |
DIV x y | - | / | dividexbyy |
MOD x y | - | % | find the remainder after division ofxbyy |
RAND x | - | RND | generate a random number between0andxinclusive |
RRAND x y | - | RRND | generate a random number betweenxandyinclusive |
TOSS | - | - | randomly return0or1 |
? x y z | - | - | if conditionxis true returny, otherwise returnz |
MIN x y | - | - | return the minimum ofxandy |
MAX x y | - | - | return the maximum ofxandy |
LIM x y z | - | - | limit the valuexto the rangeytozinclusive |
WRAP x y z | - | WRP | limit the valuexto the rangeytozinclusive, but with wrapping |
QT x y | - | - | roundxto the closest multiple ofy(quantise) |
AVG x y | - | - | the average ofxandy |
EQ x y | - | == | doesxequaly |
NE x y | - | !=,XOR | xis not equal toy |
LT x y | - | < | xis less thany |
GT x y | - | > | xis greater thany |
LTE x y | - | <= | xis less than or equal toy |
GTE x y | - | >= | xis greater than or equal toy |
EZ x | - | ! | xis0, equivalent to logical NOT |
NZ x | - | - | xis not0 |
LSH x y | - | << | left shiftxbyybits, in effect multiplyxby2to the power ofy |
RSH x y | - | >> | right shiftxbyybits, in effect dividexby2to the power ofy |
| x y | - | - | bitwise orx |
& x y | - | - | bitwise andx&y |
^ x y | - | - | bitwise xorx^y |
~ x | - | - | bitwise not, i.e.: inversion ofx |
BSET x y | - | - | set bityin valuex |
BGET x y | - | - | get bityin valuex |
BCLR x y | - | - | clear bityin valuex |
ABS x | - | - | absolute value ofx |
AND x y | - | && | Logical AND ofxandy. Returns1if bothxandyare greater than0, otherwise it returns0. |
OR x y | - | || | Logical OR ofxandy. Returns1if eitherxoryare greater than0, otherwise it returns0. |
JI x y | - | - | just intonation helper, precision ratio divider normalised to 1V |
SCALE a b x y i | - | SCL | scaleifrom rangeatobto rangextoy, i.e.i * (y - x) / (b - a) |
ER f l i | - | - | Euclidean rhythm helper, as described by Godfried Toussaint in his 2005 paper [“The Euclidean Algorithm Generates Traditional Musical Rhythms”][euclidean_rhythm_paper][^euclidean_rhythm_citation]. From the abstract: - fis fill (1-32) and should be less then or equal to length- lis length (1-32)- iis the step index, and will work with negative as well as positive numbersIf you wish to add rotation as well, use the following form: <br/>ER f l SUB i r<br/>where ris the number of step offorwardrotation you want.For more info, see the post on [samdoshi.com][samdoshi_com_euclidean] [samdoshi_com_euclidean]: http://samdoshi.com/post/2016/03/teletype-euclidean/ [euclidean_rhythm_paper]: http://cgm.cs.mcgill.ca/~godfried/publications/banff.pdf [^euclidean_rhythm_citation]: Toussaint, G. T. (2005, July). The Euclidean algorithm generates traditional musical rhythms.In Proceedings of BRIDGES: Mathematical Connections in Art, Music and Science(pp. 47-56). |
BPM x | - | - | milliseconds per beat in BPMx |
N x | - | - | TheNOP converts an equal temperament note number to a value usable by the CV outputs.Examples: <br/>CV 1 N 60 => set CV 1 to middle C, i.e. 5V<br/>CV 1 N RAND 24 => set CV 1 to a random note from the lowest 2 octaves<br/> |
V x | - | - | converts a voltage to a value usable by the CV outputs (xbetween0and10) |
VV x | - | - | converts a voltage to a value usable by the CV outputs (xbetween0and1000,100represents 1V) |
EXP x | - | - | exponentiation table lookup.0-16383range (V0-10) |
CHAOS x | - | - | get next value from chaos generator, or set the current value |
CHAOS.R x | - | - | get or set theRparameter for theCHAOSgenerator |
CHAOS.ALG x | - | - | get or set the algorithm for theCHAOSgenerator. 0 = LOGISTIC, 1 = CUBIC, 2 = HENON, 3 = CELLULAR |
R | - | - | generate a random number |
R.MIN x | - | - | set the lower end of the range from 0 – 32767 |
R.MAX x | - | - | set the upper end of the range from 0 – 32767 |
An internal metronome executes the M script at a specified rate (in ms). By default the metronome is enabled (M.ACT 1) and set to 1000ms (M 1000). The metro can be set as fast as 25ms (M 25). An additionalM!op allows for setting the metronome to experimental rates as high as 2ms (M! 2).WARNING: when using a large number of i2c commands in the M script at metro speeds beyond the 25ms teletype stability issues can occur.
Access the M script directly withalt-<F10>or run the script once using<F10>.
OP | OP (set) | Alias | Description |
|---|---|---|---|
M | M x | - | get/set metronome interval tox(in ms), default1000, minimum value25 |
M! | M! x | - | get/set metronome to experimental intervalx(in ms), minimum value2 |
M.ACT | M.ACT x | - | get/set metronome activation tox(0/1), default1(enabled) |
M.RESET | - | - | hard reset metronome count without triggering |
TheDELdelay op allow commands to be sheduled for execution after a defined interval by placing them into a buffer which can hold up to 8 commands. Commands can be delayed by up to 16 seconds
In LIVE mode, the second icon (an upside-down U) will be lit up when there is a command in theDELbuffer.
OP | OP (set) | Alias | Description |
|---|---|---|---|
DEL x: ... | - | - | Delay the command following the colon byxms by placing it into a buffer.The buffer can hold up to 16 commands. If the buffer is full, additional commands will be discarded. |
DEL.CLR | - | - | Clear the delay buffer, cancelling the pending commands. |
DEL.X x y: ... | - | - | Delay the command following the colon ‘x’ times at intervals ofyms by placing it into a buffer.The buffer can hold up to 16 commands. If the buffer is full, additional commands will be discarded. |
DEL.R x y: ... | - | - | Delay the command following the colon once immediately, and ‘x’ minus ‘1’ times at intervals ofyms by placing it into a buffer.The buffer can hold up to 16 commands. If the buffer is full, additional commands will be discarded. |
These operators manage a last in, first out, stack of commands, allowing them to be memorised for later execution at an unspecified time. The stack can hold up to 8 commands. Commands added to a full stack will be discarded.
OP | OP (set) | Alias | Description |
|---|---|---|---|
S: ... | - | - | Add the command following the colon to the top of the stack. If the stack is full, the command will be discarded. |
S.CLR | - | - | Clear the stack, cancelling all of the commands. |
S.ALL | - | - | Execute all entries in the stack (last in, first out), clearing the stack in the process. |
S.POP | - | - | Pop the most recent command off the stack and execute it. |
S.L | - | - | Get the number of entries in the stack. |
These operators manage a first in, first out, queue of values. The queue can hold up to 16 values. The length of the queue can be dynamically changed and the contents will be preserved. There is also an averaging operator which is useful for smoothing input values.
OP | OP (set) | Alias | Description |
|---|---|---|---|
Q | Q x | - | Gets the output value from the queue, or placesxinto the queue. |
Q.N | Q.N x | - | Gets/sets the length of the queue. |
Q.AVG | Q.AVG x | - | Getting the value the average of the values in the queue. Settingxsets thevalue of each entry in the queue to x. |
A 2-dimensional, movable index into the pattern values as displayed on the TRACKER screen.
OP | OP (set) | Alias | Description |
|---|---|---|---|
@ | @ x | - | get or set the current pattern value under the turtle |
@X | @X x | - | get the turtle X coordinate, or set it to x |
@Y | @Y x | - | get the turtle Y coordinate, or set it to x |
@MOVE x y | - | - | move the turtle x cells in the X axis and y cells in the Y axis |
@F x1 y1 x2 y2 | - | - | set the turtle’s fence to corners x1,y1 and x2,y2 |
@FX1 | @FX1 x | - | get the left fence line or set it to x |
@FX2 | @FX2 x | - | get the right fence line or set it to x |
@FY1 | @FY1 x | - | get the top fence line or set it to x |
@FY2 | @FY2 x | - | get the bottom fence line or set it to x |
@SPEED | @SPEED x | - | get the speed of the turtle’s@STEPin cells per step or set it to x |
@DIR | @DIR x | - | get the direction of the turtle’s@STEPin degrees or set it to x |
@STEP | - | - | move@SPEED/100 cells forward in@DIR, triggering@SCRIPTon cell change |
@BUMP | @BUMP 1 | - | get whether the turtle fence mode is BUMP, or set it to BUMP with 1 |
@WRAP | @WRAP 1 | - | get whether the turtle fence mode is WRAP, or set it to WRAP with 1 |
@BOUNCE | @BOUNCE 1 | - | get whether the turtle fence mode is BOUNCE, or set it to BOUNCE with 1 |
@SCRIPT | @SCRIPT x | - | get which script runs when the turtle changes cells, or set it to x |
@SHOW | @SHOW 0/1 | - | get whether the turtle is displayed on the TRACKER screen, or turn it on or off |
Grid operators allow creating scenes that can interact with grid connected to teletype (important: grid must be powered externally, do not connect it directly to teletype!). You can light up individual LEDs, draw shapes and create controls (such as buttons and faders) that can be used to trigger and control scripts. You can take advantage of grid operators even without an actual grid by using the built in Grid Visualizer.
For more information on grid integration see Advanced section andGrid Studies.
As there are many operators let’s review some naming conventions that apply to the majority of them. All grid ops start withG.. For control related ops this is followed by 3 letters specifying the control:G.BTNfor buttons,G.FDRfor faders. To define a control you use the main opsG.BTNandG.FDR. To define multiple controls replace the last letter withX:G.BTX,G.FDX.
All ops that initialize controls use the same list of parameters: id, coordinates, width, height, type, level, script. When creating multiple controls there are two extra parameters: the number of columns and the number of rows. Controls are created in the current group (set withG.GRP). To specify a different group use the group versions of the 4 above ops -G.GBT,G.GFD,G.GBX,G.GFXand specify the desired group as the first parameter.
All controls share some common properties, referenced by adding a.and:
EN:G.BTN.EN,G.FDR.EN- enables or disables a controlV:G.BTN.V,G.FDR.V- value, 1/0 for buttons, range value for fadersL:G.BTN.L,G.FDR.L- level (brightness level for buttons and coarse faders, max value level for fine faders)X:G.BTN.X,G.FDR.X- the X coordinateY:G.BTN.Y,G.FDR.Y- the Y coordinateTo get/set properties for individual controls you normally specify the control id as the first parameter:G.FDR.V 5will return the value of fader 5. Quite often the actual id is not important, you just want to work with the latest control pressed. As these are likely the ops to be used most often they are offered as shortcuts without a.:G.BTNVreturns the value of the last button pressed,G.FDRL 4will set the level of the last fader pressed etc etc.
OP | OP (set) | Alias | Description |
|---|---|---|---|
G.RST | - | - | Full grid reset - hide all controls and reset their properties to the default values, clear all LEDs, reset the dim level and the grid rotation. |
G.CLR | - | - | Clear all LEDs set withG.LED,G.RECorG.RCT. |
G.DIM level | - | - | Set the dim level (0..14, higher values dim more). To remove set to 0. |
G.ROTATE x | - | - | Set the grid rotation (0 - no rotation, 1 - rotate by 180 degrees). |
G.KEY x y action | - | - | Emulate a grid key press at the specified coordinates (0-based). Setactionto 1 to emulate a press, 0 to emulate a release. You can also emulate a button press with G.BTN.PRand a fader press withG.FDR.PR. |
G.GRP | G.GRP id | - | Get or set the current group. Grid controls created without specifying a group will be assigned to the current group. This op doesn’t enable/disable groups - use G.GRP.ENfor that. The default current group is 0. 64 groups areavailable. |
G.GRP.EN id | G.GRP.EN id x | - | Enable or disable the specified group or check if it’s currently enabled. 1 means enabled, 0 means disabled. Enabling or disabling a group enables / disables all controls assigned to that group (disabled controls are not shown and receive no input). This allows groups to be used as pages - initialize controls in different groups, and then simply enable one group at a time. |
G.GRP.RST id | - | - | Reset all controls associated with the specified group. This will disable the controls and reset their properties to the default values. This will also reset the fader scale range to 0..16383. |
G.GRP.SW id | - | - | Switch groups. Enables the specified group, disables all others. |
G.GRP.SC id | G.GRP.SC id script | - | Assign a script to the specified group, or get the currently assigned script. The script gets executed whenever a control associated with the group receives input. It is possible to have different scripts assigned to a control and the group it belongs to. Use 9 for Metro and 10 for Init. To unassign, set it to 0. |
G.GRPI | - | - | Get the id of the last group that received input. This is useful when sharing a script between multiple groups. |
G.LED x y | G.LED x y level | - | Set the LED level or get the current level at the specified coordinates. Possible level range is 0..15 (on non varibright grids anything below 8 is ‘off’, 8 or above is ‘on’). Grid controls get rendered first, and LEDs are rendered last. This means you can use LEDs to accentuate certain areas of the UI. This also means that any LEDs that are set will block whatever is underneath them, even with the level of 0. In order to completely clear an LED set its level to -3. There are two other special values for brightness: -1 will dim, and -2 will brighten what’s underneath. They can be useful to highlight the current sequence step, for instance. |
G.LED.C x y | - | - | Clear the LED at the specified coordinates. This is the same as setting the brightness level to -3. To clear all LEDs use G.CLR. |
G.REC x y w h fill border | - | - | Draw a rectangle with the specified width and height.xandyarethe coordinates of the top left corner. Coordinates are 0-based, with the 0,0 point located at the top left corner of the grid. You can draw rectangles that are partially outside of the visible area, and they will be properly cropped. fillandborderspecify the brightness levels for the inner area andthe one-LED-wide border respectively, 0..15 range. You can use the three special brightness levels: -1 to dim, -2 to brighten and -3 for transparency (you could draw just a frame by setting fillto -3, for instance).To draw lines, set the width or the height to 1. In this case only borderbrightness level is used. |
G.RCT x1 y1 x2 y2 fill border | - | - | Same asG.RECbut instead of specifying the width and height you specifythe coordinates of the top left corner and the bottom right corner. |
G.BTN id x y w h type level script | - | - | Initializes and enables a button with the specified id. 256 buttons are available (ids are 0-based so the possible id range is 0..255. The button will be assigned to the current group (set with G.GRP). Buttons can bereinitialized at any point. xandyspecify the coordinates of the top left corner, andwandhspecify width and height respectively. typedetermines whether the button islatching (1) or momentary (0). levelsets the “off” brightness level, possiblerand is -3..15 (the brightness level for pressed buttons is fixed at 13). scriptspecifies the script to be executed when the button is pressed orreleased (the latter only for momentary buttons). Use 9 for Metro and 10 for Init. Use 0 if you don’t need a script assigned. |
G.GBT group id x y w h type level script | - | - | Initialize and enable a button. Same asG.BTNbut you can also choose whichgroup to assign the button too. |
G.BTX id x y w h type level script columns rows | - | - | Initialize and enable a block of buttons in the current group with the specified number of columns and rows . Ids are incremented sequentially by columns and then by rows. |
G.GBX group id x y w h type level script columns rows | - | - | Initialize and enable a block of buttons. Same asG.BTXbut you can alsochoose which group to assign the buttons too. |
G.BTN.EN id | G.BTN.EN id x | - | Enable (setxto 1) or disable (setxto 0) a button with the specified id,or check if it’s currently enabled. Disabling a button hides it and stops it from receiving input but keeps all the other properties (size/location etc) intact. |
G.BTN.X id | G.BTN.X id x | - | Get or setxcoordinate for the specified button’s top left corner. |
G.BTN.Y id | G.BTN.Y id y | - | Get or setycoordinate for the specified button’s top left corner. |
G.BTN.V id | G.BTN.V id value | - | Get or set the specified button’s value. For buttons the value of 1 means the button is pressed and 0 means it’s not. If there is a script assigned to the button it will not be triggered if you change the value - use G.BTN.PRfor that.Button values don’t change when a button is disabled. Button values are stored with the scene (both to flash and to USB sticks). |
G.BTN.L id | G.BTN.L id level | - | Get or set the specified button’s brightness level (-3..15). Please note you can only set the level for unpressed buttons, the level for pressed buttons is fixed at 13. |
G.BTNI | - | - | Get the id of the last pressed button. This is useful when multiple buttons are assigned to the same script. |
G.BTNX | G.BTNX x | - | Get or setxcoordinate of the last pressed button’s top left corner. This isthe same as G.BTN.X G.BTNI. |
G.BTNY | G.BTNY y | - | Get or setycoordinate of the last pressed button’s top left corner. This isthe same as G.BTN.Y G.BTNI. |
G.BTNV | G.BTNV value | - | Get or set the value of the last pressed button. This is the same asG.BTN.V G.BTNI. This op is especially useful with momentary buttons when youwant to react to presses or releases only - just put IF EZ G.BTNV: BREAKinthe beginning of the assigned script (this will ignore releases, to ignore presses replace NZwithEZ). |
G.BTNL | G.BTNL level | - | Get or set the brightness level of the last pressed button. This is the same asG.BTN.L G.BTNI. |
G.BTN.SW id | - | - | Set the value of the specified button to 1 (pressed), set it to 0 (not pressed) for all other buttons within the same group (useful for creating radio buttons). |
G.BTN.PR id action | - | - | Emulate pressing/releasing the specified button. Setactionto1for press,0for release (actionis ignored for latching buttons). |
G.GBTN.V group value | - | - | Set the value for all buttons in the specified group. |
G.GBTN.L group odd_level even_level | - | - | Set the brightness level (0..15) for all buttons in the specified group. You can use different values for odd and even buttons (based on their index within the group, not their id) - this can be a good way to provide some visual guidance. |
G.GBTN.C group | - | - | Get the total count of all the buttons in the specified group that are currently pressed. |
G.GBTN.I group index | - | - | Get the id of a currently pressed button within the specified group by its index (0-based). The index should be between 0 and C-1 where C is the total count of all pressed buttons (you can get it using G.GBTN.C). |
G.GBTN.W group | - | - | Get the width of the rectangle formed by pressed buttons within the specified group. This is basically the distance between the leftmost and the rightmost pressed buttons, inclusive. This op is useful for things like setting a loop’s length, for instance. To do so, check if there is more than one button pressed (using G.GBTN.C) and if there is, useG.GBTN.Wto set the length. |
G.GBTN.H group | - | - | Get the height of the rectangle formed by pressed buttons within the specified group (see G.GBTN.Wfor more details). |
G.GBTN.X1 group | - | - | Get the X coordinate of the leftmost pressed button in the specified group. If no buttons are currently pressed it will return -1. |
G.GBTN.X2 group | - | - | Get the X coordinate of the rightmost pressed button in the specified group. If no buttons are currently pressed it will return -1. |
G.GBTN.Y1 group | - | - | Get the Y coordinate of the highest pressed button in the specified group. If no buttons are currently pressed it will return -1. |
G.GBTN.Y2 group | - | - | Get the Y coordinate of the lowest pressed button in the specified group. If no buttons are currently pressed it will return -1. |
G.FDR id x y w h type level script | - | - | Initializes and enables a fader with the specified id. 64 faders are available (ids are 0-based so the possible id range is 0..63). The fader will be assigned to the current group (set with G.GRP). Faders can be reinitialized at anypoint. xandyspecify the coordinates of the top left corner, andwandhspecify width and height respectively. typedetermines the fader type and orientation. Possible values are:* 0 - coarse, horizontal bar * 1 - coarse, vertical bar * 2 - coarse, horizontal dot * 3 - coarse, vertical dot * 4 - fine, horizontal bar * 5 - fine, vertical bar * 6 - fine, horizontal dot * 7 - fine, vertical dot Coarse faders have the possible range of 0..N-1 where N is width for horizontal faders or height for vertical faders. Pressing anywhere within the fader area sets the fader value accordingly. Fine faders allow selecting a bigger range of values by mapping the range to the fader’s height or width and dedicating the edge buttons for incrementing/decrementing. Fine faders employ varibrightness to reflect the current value. levelhas a different meaning for coarse and fine faders. For coarse fadersit selects the background brightness level (similar to buttons). For fine faders this is the maximum value level (the minimum level being 0). In order to show each value distinctly using varibright the maximum level possible is the number of available buttons multiplied by 16 minus 1 (since range is 0-based). Remember that 2 buttons are always reserved for increment/decrement. Using a larger number is allowed - it will be automatically adjusted to what’s possible. scriptspecifies the script to be executed when the fader value is changed.Use 9 for Metro and 10 for Init. Use 0 if you don’t need a script assigned. |
G.GFD grp id x y w h type level script | - | - | Initialize and enable a fader. Same asG.FDRbut you can also choose whichgroup to assign the fader too. |
G.FDX id x y w h type level script columns rows | - | - | Initialize and enable a block of faders with the specified number of columns and rows in the current group. Ids are incremented sequentially by columns and then by rows. |
G.GFX group id x y w h type level script columns rows | - | - | Initialize and enable a block of faders. Same asG.FDXbut you can alsochoose which group to assign the faders too. |
G.FDR.EN id | G.FDR.EN id x | - | Enable (setxto 1) or disable (setxto 0) a fader with the specified id,or check if it’s currently enabled. Disabling a fader hides it and stops it from receiving input but keeps all the other properties (size/location etc) intact. |
G.FDR.X id | G.FDR.X id x | - | Get or setxcoordinate for the specified fader’s top left corner. |
G.FDR.Y id | G.FDR.Y id y | - | Get or setycoordinate for the specified fader’s top left corner. |
G.FDR.N id | G.FDR.N id value | - | Get or set the specified fader’s value. The possible range for coarse faders is 0..N-1 where N is fader’s width (for horizontal faders) or height (for vertical faders). For fine faders the possible range is 0..N where N is the maximum level set when the fader was initialized (see G.FDRfor more details).Sometimes it’s more convenient to map the possible fader range to a different range (when using it to control a CV, for instance). Use G.FDR.Vfor that.If there is a script assigned to the fader it will not be triggered if you change the value - use G.FDR.PRfor that.Fader values don’t change when a fader is disabled. Fader values are stored with the scene (both to flash and to USB sticks). |
G.FDR.V id | G.FDR.V id value | - | Get or set the specified fader’s value mapped to a range set withG.GFDR.RN.This op is very convenient for using faders to control a known range, such as CV - simply create a fader and set a range and then assign values directly without any additional calculations, like this: CV 1 G.FDR.V 1. |
G.FDR.L id | G.FDR.L id level | - | Get or set the specified fader’s brightness level (for coarse faders), or the maximum value level (for fine faders). |
G.FDRI | - | - | Get the id of the last pressed fader. This is useful when multiple faders are assigned to the same script. |
G.FDRX | G.FDRX x | - | Get or setxcoordinate of the last pressed fader’s top left corner. This isthe same as G.FDR.X G.FDRI. |
G.FDRY | G.FDRY y | - | Get or setycoordinate of the last pressed fader’s top left corner. This isthe same as G.BTN.Y G.BTNI. |
G.FDRN | G.FDRN value | - | Get or set the value of the last pressed fader. This is the same asG.FDR.N G.FDRI. SeeG.FDR.Nfor more details. |
G.FDRV | G.FDRV value | - | Get or set the scaled value of the last pressed fader. This is the same asG.FDR.V G.FDRI. SeeG.FDR.Vfor more details. |
G.FDRL | G.FDRL level | - | Get or set the brightness level (for coarse faders), or the maximum value level (for fine faders) of the last pressed fader. This is the same as G.FDR.L G.BTNI. For more details on levels seeG.FDR. |
G.FDR.PR id value | - | - | Emulate pressing the specified fader. Fader value will be set to the specified value, and if there is a script assigned it will be executed. |
G.GFDR.N group value | - | - | Set the value for all faders in the specified group. This can be useful for resetting all faders in a group. See G.FDR.Nfor more details. |
G.GFDR.V group value | - | - | Set the scaled value for all faders in the specified group. This can be useful for resetting all faders in a group. See G.FDR.Vfor more details. |
G.GFDR.L group odd_level even_level | - | - | Set the brightness level (0..15) for all faders in the specified group. You can use different values for odd and even faders (based on their index within the group, not their id) - this can be a good way to provide some visual guidance. |
G.GFDR.RN group min max | - | - | Set the range to be used forVfader values (G.FDR.V,G.FDRV,G.GFDR.V).While the .Nops provide the actual fader value sometimes it’s more convenientto map it to a different range so it can be used directly for something like a CV without having to scale it each time. An example: let’s say you create a coarse fader with the width of 8 which will be used to control a CV output where the voltage must be in the 2V..5V range. Using G.FDR.Nyou would need to do this:CV 1 SCL 0 7 V 2 V 5 G.FDR.N 0.Instead you can set the range for scaling once: G.GFDR.RN 0 V 2 V 5(assumingthe fader is in group 0) and then simply do CV 1 G.FDR.V 0.The range is shared by all faders within the same group. If you need to use a different range use a different group when initializing a fader. The default range is 0..16383. G.RSTandG.GRP.RSTreset ranges to thedefault value. |
OP | OP (set) | Alias | Description |
|---|---|---|---|
KR.PRE | KR.PRE x | - | return current preset / load presetx |
KR.PERIOD | KR.PERIOD x | - | get/set internal clock period |
KR.PAT | KR.PAT x | - | get/set current pattern |
KR.SCALE | KR.SCALE x | - | get/set current scale |
KR.POS x y | KR.POS x y z | - | Set position tozfor trackx, parametery.A value of 0forxmeans all tracks.A value of 0forymeans all parametersParameters: - 0= all- 1= trigger- 2= note- 3= octave- 4= length |
KR.L.ST x y | KR.L.ST x y z | - | get loop start for trackx, parametery/ set toz |
KR.L.LEN x y | KR.L.LEN x y z | - | get length of trackx, parametery/ set toz |
KR.RES x y | - | - | reset position to loop start for trackx, parametery |
KR.CV x | - | - | get the current CV value for channelx |
KR.MUTE x | KR.MUTE x y | - | get/set mute state for channelx(1= muted,0= unmuted) |
KR.TMUTE x | - | - | toggle mute state for channelx |
KR.CLK x | - | - | advance the clock for channelx(channel must have teletype clocking enabled) |
ME.PRE | ME.PRE x | - | return current preset / load presetx |
ME.SCALE | ME.SCALE x | - | get/set current scale |
ME.PERIOD | ME.PERIOD x | - | get/set internal clock period |
ME.STOP x | - | - | stop channelx(0= all) |
ME.RES x | - | - | reset channelx(0= all), also used as “start” |
ME.CV x | - | - | get the current CV value for channelx |
LV.PRE | LV.PRE x | - | return current preset / load presetx |
LV.RES x | - | - | reset,0for soft reset (on next ext. clock),1for hard reset |
LV.POS | LV.POS x | - | get/set current position |
LV.L.ST | LV.L.ST x | - | get/set loop start |
LV.L.LEN | LV.L.LEN x | - | get/set loop length |
LV.L.DIR | LV.L.DIR x | - | get/set loop direction |
LV.CV x | - | - | get the current CV value for channelx |
CY.PRE | CY.PRE x | - | return current preset / load presetx |
CY.RES x | - | - | reset channelx(0= all) |
CY.POS x | CY.POS x y | - | get / set position of channelx(x = 0to set all), position between0-255 |
CY.REV x | - | - | reverse channelx(0= all) |
CY.CV x | - | - | get the current CV value for channelx |
MID.SLEW t | - | - | set pitch slew time in ms (applies to all allocation styles except FIXED) |
MID.SHIFT o | - | - | shift pitch CV by standard Teletype pitch value (e.g.N 6,V -1, etc) |
ARP.HLD h | - | - | 0disables key hold mode, other values enable |
ARP.STY y | - | - | set base arp style [0-7] |
ARP.GT v g | - | - | set voice gate length [0-127], scaled/synced to course divisions of voice clock |
ARP.SLEW v t | - | - | set voice slew time in ms |
ARP.RPT v n s | - | - | set voice pattern repeat,ntimes [0-8], shifted byssemitones [-24, 24] |
ARP.DIV v d | - | - | set voice clock divisor (euclidean length), range [1-32] |
ARP.FIL v f | - | - | set voice euclidean fill, use 1 for straight clock division, range [1-32] |
ARP.ROT v r | - | - | set voice euclidean rotation, range [-32, 32] |
ARP.ER v f d r | - | - | set all euclidean rhythm |
ARP.RES v | - | - | reset voice clock/pattern on next base clock tick |
ARP.SHIFT v o | - | - | shift voice cv by standard tt pitch value (e.g. N 6, V -1, etc) |
OP | OP (set) | Alias | Description |
|---|---|---|---|
WW.PRESET x | - | - | Set White Whale to presetx(0-7). This takes effect immediately. The current playbackposition is not changed. |
WW.POS x | - | - | Cut immediately to position (0-15) in the currently playing pattern. |
WW.SYNC x | - | - | Cut to position (0-15) in the currently playing pattern. If White Whale is being clocked internaly, this also hard-syncs the clock. |
WW.START x | - | - | Set the loop start position (0-15). This does not impact the current playback position. If the playback position is outside of the defined loop it will continue to step until it enters the loop. If the start position is after the end position, the loop will wrap around the ends of the grid. |
WW.END x | - | - | Set the loop end position (0-15). This does not impact the current playback position. If the playback position is outside of the defined loop it will continue to step until it enters the loop. If the end position is before the end position, the loop will wrap around the ends of the grid. |
WW.PMODE x | - | - | Set the loop play mode. The available modes are: 0 - forward, 1 - reverse, 2 - drunk, 3 - random, 4 - pingpong, 5 - pingpong with repeated end points. |
WW.PATTERN x | - | - | Change pattern. This does not impact the current playback position. |
WW.QPATTERN x | - | - | Change pattern (0-15) after current pattern ends |
WW.MUTE1 x | - | - | Mute trigger 1 (0 = on, 1 = mute). |
WW.MUTE2 x | - | - | Mute trigger 2 (0 = on, 1 = mute). |
WW.MUTE3 x | - | - | Mute trigger 3 (0 = on, 1 = mute). |
WW.MUTE4 x | - | - | Mute trigger 4 (0 = on, 1 = mute). |
WW.MUTEA x | - | - | Mute CV A (0 = on, 1 = mute). |
WW.MUTEB x | - | - | Mute CV B (0 = on, 1 = mute). |
For use on the original Meadowphysics module with version 2 firmware. Reference the Ansible ops for using Meadowphysics on the Ansible module.
OP | OP (set) | Alias | Description |
|---|---|---|---|
MP.PRESET x | - | - | set Meadowphysics to presetx(indexed from0) |
MP.RESET x | - | - | reset countdown for channelx(0= all,1-8= individual channels) |
MP.STOP x | - | - | reset channelx(0= all,1-8= individual channels) |
OP | OP (set) | Alias | Description |
|---|---|---|---|
ES.PRESET x | - | - | Recall the preset in locationx. This will stop the currently playing pattern. |
ES.MODE x | - | - | Sets the pattern clock mode. Settingxto 0 sets Earthsea to use it’s internal clock. Settingxto 1 clocks Earthsea via theES.CLOCKcommand. |
ES.CLOCK x | - | - | If Earthsea is II clocked (seeES.MODE), andxis non-zero, advance to the next pattern event. |
ES.RESET x | - | - | Ifxis non-zero, reset the position in the current pattern to the start and start playing. |
ES.PATTERN x | - | - | Select pattern (0-15) from the current preset. |
ES.TRANS x | - | - | Apply a transposition relative to the current ‘root’ position. Integer divisions ofxshift the root note up or down a row,xmodulo 5 will shift the positionleft or right up to 4 notes. |
ES.STOP x | - | - | Ifxis non-zero, stop pattern playback, or stop record if currently recording. |
ES.TRIPLE x | - | - | Recall triple shape (1-4). |
ES.MAGIC x | - | - | Apply one of the magic shapes, (1= halfspeed, 2=doublespeed, 3=linearize). Other shapes are not currently available via II ops. |
Remote commands for Orca (alternative WW firmware). For detailed info and tips on usage please refer to theOrca manual.
OP | OP (set) | Alias | Description |
|---|---|---|---|
OR.CLK x | - | - | Gives you the ability to clock individual tracks. The master clock will still advance all 4 tracks. |
OR.RST x | - | - | Reset trackx(1-4) |
OR.GRST x | - | - | Global reset (xcan be any value) |
OR.TRK x | - | - | Choose trackx(1-4) to be used byOR.DIV,OR.PHASE,OR.WGTorOR.MUTE |
OR.DIV x | - | - | Set divisor for selected track tox(1-16) |
OR.PHASE x | - | - | Set phase for selected track tox(0-16) |
OR.WGT x | - | - | Set weight for selected track tox(1-8) |
OR.MUTE x | - | - | Mute trigger selected byOR.TRK(0= on,1= mute) |
OR.SCALE x | - | - | Value of1-16will select scale for both CV A and CV B. To select individual scales append their numbers, for instance,105will select scale 1 for CV A and scale 5 for CV B, and1005will select scale 10 for CV A and scale 5 for CV B. |
OR.BANK x | - | - | Select preset bankx(1-8) |
OR.PRESET x | - | - | Select presetx(1-8) |
OR.RELOAD x | - | - | Abandons any unsaved changes and reloads selected presets/banks from flash. Could be useful inIscript. |
OR.ROTS x | - | - | Rotates scales up. To rotate them down setxto16minus the amount. |
OR.ROTW x | - | - | Rotates weights up. To rotate them down setxto4minus the amount. |
OR.CVA x | - | - | Convert a binary number representing selected tracks (so1001will select tracks 1 and 4, for instance) and setxto that. |
OR.CVB x | - | - | Convert a binary number representing selected tracks (so1001will select tracks 1 and 4, for instance) and setxto that. |
More extensively covered in theJust Friends Documentation.
OP | OP (set) | Alias | Description |
|---|---|---|---|
JF.TR x y | - | - | Simulate a TRIGGER input.xis channel (0= all) and y is state (0or1) |
JF.RMODE x | - | - | Set the RUN state of Just Friends when no physical jack is present. (0= run off, non-zero = run on) |
JF.RUN x | - | - | Send a ‘voltage’ to the RUN input. RequiresJF.RMODE 1to have been executed, or a physical cable in JF’s input. Thus Just Friend’s RUN modes are accessible without needing a physical cable & control voltage to set the RUN parameter. useJF.RUN V xto set toxvolts. The expected range is V -5 to V 5 |
JF.SHIFT x | - | - | Shifts the transposition of Just Friends, regardless of speed setting. Shifting by V 1 doubles the frequency in sound, or doubles the rate in shape.x= pitch, useN xfor semitones, orV yfor octaves. |
JF.VTR x y | - | - | LikeJF.TRwith added volume control. Velocity is scaled with volts, so tryV 5for an output trigger of 5 volts. Channels remember their latest velocity setting and apply it regardless of TRIGGER origin (digital or physical).x= channel,0sets all channels.y= velocity, amplitude of output in volts. egJF.VTR 1 V 4. |
JF.TUNE x y z | - | - | Adjust the tuning ratios used by the INTONE control.x= channel,y= numerator (set the multiplier for the tuning ratio),z= denominator (set the divisor for the tuning ratio). |
JF.MODE x | - | - | Set the current choice of standard functionality, or Just Type alternate modes. You’ll likely want to put JF.MODE x in your Teletype INIT scripts.x= nonzero activates alternative modes.0restores normal. |
JF.VOX x y z | - | - | Create a note at the specified channel, of the defined pitch & velocity. All channels can be set simultaneously with a chan value of 0.x= channel,y= pitch relative to C3,z= velocity (likeJF.VTR). |
JF.NOTE x y | - | - | Polyphonically allocated note sequencing. Works as JF.VOX with chan selected automatically. Free voices will be taken first. If all voices are busy, will steal from the voice which has been active the longest.x= pitch relative to C3,y= velocity. |
JF.GOD x | - | - | Redefines C3 to align with the ‘God’ note.x=0sets A to 440,x=1sets A to 432. |
JF.TICK x | - | - | Sets the underlying timebase of the Geode.x= clock. 0 resets the timebase to the start of measure. 1 to 48 shall be sent repetitively. The value representing ticks per measure. 49 to 255 sets beats-per-minute and resets the timebase to start of measure. |
JF.QT x | - | - | When non-zero, all events are queued & delayed until the next quantize event occurs. Using values that don’t align with the division of rhythmic streams will cause irregular patterns to unfold. Set to 0 to deactivate quantization.x= division, 0 deactivates quantization, 1 to 32 sets the subdivision & activates quantization. |
The TELEXi (or TXi) is an input expander that adds 4 IN jacks and 4 PARAM knobs to the Teletype. There are jumpers on the back so you can hook more than one TXi to your Teletype simultaneously.
Inputs added to the system by the TELEX modules are addressed sequentially: 1-4 are on your first module of any type, 5-8 are on the second, 9-12 on the third, and so on. A few of the commands reference the module by its unit number – but those are rare.
OP | OP (set) | Alias | Description |
|---|---|---|---|
TI.PARAM x | - | TI.PRM | reads the value ofPARAMknobx; default return range is from 0 to 16383; return range can be altered by theTI.PARAM.MAPcommand |
TI.PARAM.QT x | - | TI.PRM.QT | return the quantized value forPARAMknobxusing the scale set byTI.PARAM.SCALE; default return range is from 0 to 16383 |
TI.PARAM.N x | - | TI.PRM.N | return the quantized note number forPARAMknobxusing the scale set byTI.PARAM.SCALE |
TI.PARAM.SCALE x | - | TI.PRM.SCALE | ### Quantization Scales 0. Equal Temperament [DEFAULT] 1. 12-tone Pythagorean scale 2. Vallotti & Young scale (Vallotti version) also known as Tartini-Vallotti (1754) 3. Andreas Werckmeister’s temperament III (the most famous one, 1681) 4. Wendy Carlos’ Alpha scale with perfect fifth divided in nine 5. Wendy Carlos’ Beta scale with perfect fifth divided by eleven 6. Wendy Carlos’ Gamma scale with third divided by eleven or fifth by twenty 7. Carlos Harmonic & Ben Johnston’s scale of ‘Blues’ from Suite f.micr.piano (1977) & David Beardsley’s scale of ‘Science Friction’ 8. Carlos Super Just 9. Kurzweil “Empirical Arabic” 10. Kurzweil “Just with natural b7th”, is Sauveur Just with 7/4 11. Kurzweil “Empirical Bali/Java Harmonic Pelog” 12. Kurzweil “Empirical Bali/Java Slendro, Siam 7” 13. Kurzweil “Empirical Tibetian Ceremonial” 14. Harry Partch’s 43-tone pure scale 15. Partch’s Indian Chromatic, Exposition of Monophony, 1933. 16. Partch Greek scales from “Two Studies on Ancient Greek Scales” on black/white |
TI.PARAM.MAP x y z | - | TI.PRM.MAP | If you would like to have aPARAMknob values over a specific range, you can offload the processing for this to the TXo by mapping the range of the potentiometer using theMAPcommand. It works a lot like theMAPoperator, but does the heavy lifting on the TXi, saving you space in your code and cycles on your processor.For instance, let’s have the first knob return a range from 0 to 100. <br/>TI.PARAM.MAP 1 0 100<br/>You can reset the mapping by either calling the map command with the default range or by using the INITcommand (TO.PARAM.INIT 1). |
TI.IN x | - | - | reads the value of IN jackx; default return range is from -16384 to 16383 - representing -10V to +10V; return range can be altered by theTI.IN.MAPcommand |
TI.IN.QT x | - | - | return the quantized value forINjackxusing the scale set byTI.IN.SCALE; default return range is from -16384 to 16383 - representing -10V to +10V |
TI.IN.N x | - | - | return the quantized note number forINjackxusing the scale set byTI.IN.SCALE |
TI.IN.SCALE x | - | - | ### Quantization Scales 0. Equal Temperament [DEFAULT] 1. 12-tone Pythagorean scale 2. Vallotti & Young scale (Vallotti version) also known as Tartini-Vallotti (1754) 3. Andreas Werckmeister’s temperament III (the most famous one, 1681) 4. Wendy Carlos’ Alpha scale with perfect fifth divided in nine 5. Wendy Carlos’ Beta scale with perfect fifth divided by eleven 6. Wendy Carlos’ Gamma scale with third divided by eleven or fifth by twenty 7. Carlos Harmonic & Ben Johnston’s scale of ‘Blues’ from Suite f.micr.piano (1977) & David Beardsley’s scale of ‘Science Friction’ 8. Carlos Super Just 9. Kurzweil “Empirical Arabic” 10. Kurzweil “Just with natural b7th”, is Sauveur Just with 7/4 11. Kurzweil “Empirical Bali/Java Harmonic Pelog” 12. Kurzweil “Empirical Bali/Java Slendro, Siam 7” 13. Kurzweil “Empirical Tibetian Ceremonial” 14. Harry Partch’s 43-tone pure scale 15. Partch’s Indian Chromatic, Exposition of Monophony, 1933. 16. Partch Greek scales from “Two Studies on Ancient Greek Scales” on black/white |
TI.IN.MAP x y z | - | - | maps the IN values for input jackxacross the range y - z (default range is -16384 to 16383 - representing -10V to +10V) |
TI.PARAM.INIT x | - | TI.PRM.INIT | initializesPARAMknobxback to the default boot settings and behaviors; neutralizes mapping (but not calibration) |
TI.IN.INIT x | - | - | initializesINjackxback to the default boot settings and behaviors; neutralizes mapping (but not calibration) |
TI.INIT d | - | - | initializes all of thePARAMandINinputs for device numberd(1-8) |
TI.PARAM.CALIB x y | - | TI.PRM.CALIB | You can calibrate yourPARAMknob by using this command. The steps for full calibration are as follows:1. Turn the PARAM knob xall the way to the left2. Send the command ‘TI.PARAM.CALIBRATE x 0’ 3. Turn the PARAM knob xall the way to the right4. Send the command ‘TI.PARAM.CALIBRATE x 1’ Don’t forget to call the TI.STOREcommand to save your calibration between sessions. |
TI.IN.CALIB x y | - | - | You can calibrate yourINjack to external voltages by using this command. The steps for full calibration are as follows:1. Send a -10Vsignal to the inputx2. Send the command ‘TI.IN.CALIBRATE x -1’ 3. Send a 0Vsignal to the inputx4. Send the command ‘TI.IN.CALIBRATE x 0’ 5. Send a 10Vsignal to the inputx6. Send the command ‘TI.IN.CALIBRATE x 1’ Don’t forget to call the TI.STOREcommand to save your calibration between sessions. |
TI.STORE d | - | - | stores the calibration data for TXi numberd(1-8) to its internal flash memory |
TI.RESET d | - | - | resets the calibration data for TXi numberd(1-8) to its factory defaults (no calibration) |
The TELEXo (or TXo) is an output expander that adds an additional 4 Trigger and 4 CV jacks to the Teletype. There are jumpers on the back so you can hook more than one TXo to your Teletype simultaneously.
Outputs added to the system by the TELEX modules are addressed sequentially: 1-4 are on your first module of any type, 5-8 are on the second, 9-12 on the third, and so on. A few of the commands reference the module by its unit number – but those are rare.
Unlike the Teletype’s equivalent operators, the TXo does not have get commands for its functions. This was intentional as these commands eat up processor and bus-space. While they may be added in the future, as of now you cannot poll the TXo for the current state of its various operators.
OP | OP (set) | Alias | Description |
|---|---|---|---|
TO.TR x y | - | - | sets theTRvalue for outputxtoy(0/1) |
TO.TR.TOG x | - | - | toggles theTRvalue for outputx |
TO.TR.PULSE x | - | TO.TR.P | pulses theTRvalue for outputxfor the duration set byTO.TR.TIME/S/M |
TO.TR.PULSE.DIV x y | - | TO.TR.P.DIV | The pulse divider will output one trigger pulse everyypulse commands. For example, setting theDIVfactor to2like this:<br/>TO.TR.P.DIV 1 2<br/>Will cause every other TO.TR.P 1command to emit a pulse.Reset it to one ( TO.TR.P.DIV 1 1) or initialize the output (TO.TR.INIT 1) to return to the default behavior. |
TO.TR.PULSE.MUTE x y | - | TO.TR.P.MUTE | mutes or un-mutesTRoutputx;yis 1 (mute) or 0 (un-mute) |
TO.TR.TIME x y | - | - | sets the time forTR.PULSEon outputn;yin milliseconds |
TO.TR.TIME.S x y | - | - | sets the time forTR.PULSEon outputn;yin seconds |
TO.TR.TIME.M x y | - | - | sets the time forTR.PULSEon outputn;yin minutes |
TO.TR.WIDTH x y | - | - | The actual time value for the trigger pulse when set by theWIDTHcommand is relative to the current value forTO.TR.M. Changes toTO.TR.Mwill change the duration ofTR.PULSEwhen using theWIDTHmode to set its value. Values foryare set in percentage (0-100).For example: <br/>TO.TR.M 1 1000<br/>TO.TR.WIDTH 1 50<br/>The length of a TR.PULSEis now 500ms.<br/>TO.TR.M 1 500<br/>The length of a TR.PULSEis now 250ms. Note that you don’t need to use the width command again as it automatically tracks the value forTO.TR.M. |
TO.TR.POL x y | - | - | sets the polarity forTRoutputn |
TO.TR.M.ACT x y | - | - | EachTRoutput has its own independent metronome that will execute aTR.PULSEat a specified interval. TheACTcommand enables (1) or disables (0) the metronome. |
TO.TR.M x y | - | - | sets the independent metronome interval for outputxtoyin milliseconds; default1000 |
TO.TR.M.S x y | - | - | sets the independent metronome interval for outputxtoyin seconds; default1 |
TO.TR.M.M x y | - | - | sets the independent metronome interval for outputxtoyin minutes |
TO.TR.M.BPM x y | - | - | sets the independent metronome interval for outputxtoyin Beats Per Minute |
TO.TR.M.COUNT x y | - | - | This allows for setting a limit to the number of timesTO.TR.MwillPULSEwhen active before automatically disabling itself. For example, let’s set it to pulse 5 times with 500ms between pulses:<br/>TO.TR.M 1 500<br/>TO.TR.M.COUNT 1 5<br/>Now, each time we activate it, the metronome will pulse 5 times - each a half-second apart. <br/>TO.TR.M.ACT 1 1<br/>PULSE…PULSE…PULSE…PULSE…PULSE.The metronome is now disabled after pulsing five times. If you call ACTagain, it will emit five more pulses.To reset, either set your COUNTto zero (TO.TR.M.COUNT 1 0) or call init on the output (TO.TR.INIT 1 1). |
TO.TR.M.MUL x y | - | - | The following example will cause 2 against 3 patterns to pulse out ofTO.TRoutputs3and4.<br/>TO.TR.M.MUL 3 2<br/>TO.TR.M.MUL 4 3<br/>L 3 4: TO.TR.M.ACT I 1<br/> |
TO.TR.M.SYNC x | - | - | synchronizes thePULSEfor metronome onTRoutput numberx |
TO.M.ACT d y | - | - | sets the active status for the 4 independent metronomes on deviced(1-8) toy(0/1); default0(disabled) |
TO.M d y | - | - | sets the 4 independent metronome intervals for deviced(1-8) toyin milliseconds; default1000 |
TO.M.S d y | - | - | sets the 4 independent metronome intervals for devicedtoyin seconds; default1 |
TO.M.M d y | - | - | sets the 4 independent metronome intervals for devicedtoyin minutes |
TO.M.BPM d y | - | - | sets the 4 independent metronome intervals for devicedtoyin Beats Per Minute |
TO.M.COUNT d y | - | - | sets the number of repeats before deactivating for the 4 metronomes on devicedtoy; default0(infinity) |
TO.M.SYNC d | - | - | This command causes the TXo at devicedto synchronize all of its independent metronomes to the moment it receives the command. Each will then continue to pulse at its own independentMrate. |
TO.CV x | - | - | CV target outputx;yvalues are bipolar (-16384 to +16383) and map to -10 to +10 |
TO.CV.SLEW x y | - | - | set the slew amount for outputx;yin milliseconds |
TO.CV.SLEW.S x y | - | - | set the slew amount for outputx;yin seconds |
TO.CV.SLEW.M x y | - | - | set the slew amount for outputx;yin minutes |
TO.CV.SET x y | - | - | set the CV for outputx(ignoringSLEW);yvalues are bipolar (-16384 to +16383) and map to -10 to +10 |
TO.CV.OFF x y | - | - | set the CV offset for outputx;yvalues are added at the final stage |
TO.CV.QT x y | - | - | CV target outputx;yis quantized to output’s currentCV.SCALE |
TO.CV.QT.SET x y | - | - | set the CV for outputx(ignoringSLEW);yis quantized to output’s currentCV.SCALE |
TO.CV.N x y | - | - | target the CV to noteyfor outputx;yis indexed in the output’s currentCV.SCALE |
TO.CV.N.SET x y | - | - | set the CV to noteyfor outputx;yis indexed in the output’s currentCV.SCALE(ignoringSLEW) |
TO.CV.SCALE x y | - | - | ### Quantization Scales 0. Equal Temperament [DEFAULT] 1. 12-tone Pythagorean scale 2. Vallotti & Young scale (Vallotti version) also known as Tartini-Vallotti (1754) 3. Andreas Werckmeister’s temperament III (the most famous one, 1681) 4. Wendy Carlos’ Alpha scale with perfect fifth divided in nine 5. Wendy Carlos’ Beta scale with perfect fifth divided by eleven 6. Wendy Carlos’ Gamma scale with third divided by eleven or fifth by twenty 7. Carlos Harmonic & Ben Johnston’s scale of ‘Blues’ from Suite f.micr.piano (1977) & David Beardsley’s scale of ‘Science Friction’ 8. Carlos Super Just 9. Kurzweil “Empirical Arabic” 10. Kurzweil “Just with natural b7th”, is Sauveur Just with 7/4 11. Kurzweil “Empirical Bali/Java Harmonic Pelog” 12. Kurzweil “Empirical Bali/Java Slendro, Siam 7” 13. Kurzweil “Empirical Tibetian Ceremonial” 14. Harry Partch’s 43-tone pure scale 15. Partch’s Indian Chromatic, Exposition of Monophony, 1933. 16. Partch Greek scales from “Two Studies on Ancient Greek Scales” on black/white |
TO.CV.LOG x y | - | - | The following example creates an envelope that ramps to 5V over a logarithmic curve:<br/>TO.CV.SET 1 V 5<br/>TO.CV.LOG 1 2<br/>TO.ENV.ATT 1 500<br/>TO.ENV.DEC.S 1 2<br/>TO.ENV.ACT 1 1<br/>When triggered ( TO.ENV.TRIG 1), the envelope will rise to 5V over a half a second and then decay back to zero over two seconds. The curve used is2, which covers 0V-5V.If a curve is too small for the range being covered, values above the range will be limited to the range’s ceiling. In the above example, voltages above 5V will all return as 5V. |
TO.CV.CALIB x | - | - | To calibrate your TXo outputs, follow these steps. Before you start, let your expander warm up for a few minutes. It won’t take long - but you want to make sure that it is calibrated at a more representative temperature. Then, first adjust your offset (CV.OFF) until the output is at zero volts (0). For example: <br/>CV.OFF 1 8<br/>Once that output measures at zero volts, you want to lock it in as the calibration by calling the following operator: <br/>CV.CALIB 1<br/>You will find that the offset is now zero, but the output is at the value that you targeted during your prior adjustment. To reset to normal (and forget this calibration offset), use the TO.CV.RESETcommand. |
TO.CV.RESET x | - | - | Clears the calibration offset for outputx. |
TO.OSC x y | - | - | Setting anOSCfrequency greater than zero for aCVoutput will start that output oscillating. It will swing its voltage between to the currentCVvalue and its polar opposite. For example:<br/>TO.CV 1 V 5<br/>TO.OSC 1 N 69<br/>This will emit the audio-rate note A (at 440Hz) swinging from ‘+5V’ to ‘-5V’. The CVvalue acts as an amplitude control. For example:<br/>TO.CV.SLEW.M 1 1<br/>TO.CV 1 V 10<br/>This will cause the oscillations to gradually increase in amplitude from 5Vto10Vover a period of one minute.IMPORANT:if you do not set a CVvalue, the oscillator will not emit a signal.If you want to go back to regular CVbehavior, you need to set the oscillation frequency to zero. E.g.TO.OSC 1 0. You can also initialize theCVoutput withTO.CV.INIT 1, which resets all of its settings back to start-up default. |
TO.OSC.SET x y | - | - | set oscillation for CV outputxtoy(ignoresCV.OSC.SLEW);yis 1v/oct translated from the standard range (1-16384); a value of0disables oscillation;CVamplitude is used as the peak for oscillation and needs to be> 0for it to be perceivable |
TO.OSC.QT x y | - | - | targets oscillation for CV outputxtoywith the portamento rate determined by theTO.OSC.SLEWvalue;yis 1v/oct translated from the standard range (1-16384) and quantized to currentOSC.SCALE; a value of0disables oscillation;CVamplitude is used as the peak for oscillation and needs to be> 0for it to be perceivable |
TO.OSC.QT.SET x y | - | - | set oscillation for CV outputxtoy(ignoresCV.OSC.SLEW);yis 1v/oct translated from the standard range (1-16384) and quantized to currentOSC.SCALE; a value of0disables oscillation;CVamplitude is used as the peak for oscillation and needs to be> 0for it to be perceivable |
TO.OSC.N x y | - | - | targets oscillation for CV outputxto noteywith the portamento rate determined by theTO.OSC.SLEWvalue; see quantization scale reference fory;CVamplitude is used as the peak for oscillation and needs to be> 0for it to be perceivable |
TO.OSC.N.SET x y | - | - | sets oscillation for CV outputxto notey(ignoresCV.OSC.SLEW); see quantization scale reference fory;CVamplitude is used as the peak for oscillation and needs to be> 0for it to be perceivable |
TO.OSC.FQ x y | - | - | targets oscillation for CV outputxto frequencyywith the portamento rate determined by theTO.OSC.SLEWvalue;yis in Hz; a value of0disables oscillation;CVamplitude is used as the peak for oscillation and needs to be> 0for it to be perceivable |
TO.OSC.FQ.SET x y | - | - | sets oscillation for CV outputxto frequencyy(ignoresCV.OSC.SLEW);yis in Hz; a value of0disables oscillation;CVamplitude is used as the peak for oscillation and needs to be> 0for it to be perceivable |
TO.OSC.LFO x y | - | - | targets oscillation for CV outputxto LFO frequencyywith the portamento rate determined by theTO.OSC.SLEWvalue;yis in mHz (millihertz: 10^-3 Hz); a value of0disables oscillation;CVamplitude is used as the peak for oscillation and needs to be> 0for it to be perceivable |
TO.OSC.LFO.SET x y | - | - | sets oscillation for CV outputxto LFO frequencyy(ignoresCV.OSC.SLEW);yis in mHz (millihertz: 10^-3 Hz); a value of0disables oscillation;CVamplitude is used as the peak for oscillation and needs to be> 0for it to be perceivable |
TO.OSC.CYC x y | - | - | targets the oscillator cycle length toyfor CV outputxwith the portamento rate determined by theTO.OSC.SLEWvalue;yis in milliseconds |
TO.OSC.CYC.SET x y | - | - | sets the oscillator cycle length toyfor CV outputx(ignoresCV.OSC.SLEW);yis in milliseconds |
TO.OSC.CYC.S x y | - | - | targets the oscillator cycle length toyfor CV outputxwith the portamento rate determined by theTO.OSC.SLEWvalue;yis in seconds |
TO.OSC.CYC.S.SET x y | - | - | sets the oscillator cycle length toyfor CV outputx(ignoresCV.OSC.SLEW);yis in seconds |
TO.OSC.CYC.M x y | - | - | targets the oscillator cycle length toyfor CV outputxwith the portamento rate determined by theTO.OSC.SLEWvalue;yis in minutes |
TO.OSC.CYC.M.SET x y | - | - | sets the oscillator cycle length toyfor CV outputx(ignoresCV.OSC.SLEW);yis in minutes |
TO.OSC.SCALE x y | - | - | ### Quantization Scales 0. Equal Temperament [DEFAULT] 1. 12-tone Pythagorean scale 2. Vallotti & Young scale (Vallotti version) also known as Tartini-Vallotti (1754) 3. Andreas Werckmeister’s temperament III (the most famous one, 1681) 4. Wendy Carlos’ Alpha scale with perfect fifth divided in nine 5. Wendy Carlos’ Beta scale with perfect fifth divided by eleven 6. Wendy Carlos’ Gamma scale with third divided by eleven or fifth by twenty 7. Carlos Harmonic & Ben Johnston’s scale of ‘Blues’ from Suite f.micr.piano (1977) & David Beardsley’s scale of ‘Science Friction’ 8. Carlos Super Just 9. Kurzweil “Empirical Arabic” 10. Kurzweil “Just with natural b7th”, is Sauveur Just with 7/4 11. Kurzweil “Empirical Bali/Java Harmonic Pelog” 12. Kurzweil “Empirical Bali/Java Slendro, Siam 7” 13. Kurzweil “Empirical Tibetian Ceremonial” 14. Harry Partch’s 43-tone pure scale 15. Partch’s Indian Chromatic, Exposition of Monophony, 1933. 16. Partch Greek scales from “Two Studies on Ancient Greek Scales” on black/white |
TO.OSC.WAVE x y | - | - | set the waveform for outputxtoy;yvalues range0-4500. There are 45 different waveforms, values translate to sine (0), triangle (100), saw (200), pulse (300) all the way to random/noise (4500); oscillator shape between values is a blend of the pure waveforms |
TO.OSC.RECT x y | - | - | The rectification command performs a couple of levels of rectification based on how you have it set. The following values forywork as follows:* y = 2: “full-positive” - inverts negative values, making them positive* y = 1: “half-positive” - omits all negative values (values below zero are set to zero)* y = 0: no rectification (default)* y = -1: “half-negative” - omits all positive values (values above zero are set to zero)* y = -2: “full-negative” - inverts positive values, making them negative |
TO.OSC.WIDTH x y | - | - | sets the width of the pulse wave on outputxtoy;yis a percentage of total width (0 to 100); only affects waveform3000 |
TO.OSC.SYNC x | - | - | resets the phase of the oscillator onCVoutputx(relative toTO.OSC.PHASE) |
TO.OSC.PHASE x y | - | - | sets the phase offset of the oscillator on CV outputxtoy(0 to 16383);yis the range of one cycle |
TO.OSC.SLEW x y | - | - | This parameter acts as a frequency slew for the targetedCVoutput. It allows you to gradually slide from one frequency to another, creating a portamento like effect. It is also great for smoothing transitions between differentLFOrates on the oscillator. For example:<br/>TO.CV 1 V 5<br/>TO.OSC.SLEW 1 30000<br/>TO.OSC.LFO.SET 1 1000<br/>TO.OSC.LFO 1 100<br/>This will start an LFO on CV 1with a rate of 1000mHz. Then, over the next 30 seconds, it will gradually decrease in rate to 100mHz. |
TO.OSC.SLEW.S x y | - | - | sets the frequency slew time (portamento) for the oscillator on CV outputxtoy;yin seconds |
TO.OSC.SLEW.M x y | - | - | sets the frequency slew time (portamento) for the oscillator on CV outputxtoy;yin minutes |
TO.OSC.CTR x y | - | - | For example, to create a sine wave that is centered at 2.5V and swings up to +5V and down to 0V, you would do this:<br/>TO.CV 1 VV 250<br/>TO.OSC.CTR 1 VV 250<br/>TO.OSC.LFO 1 500<br/> |
TO.ENV.ACT x y | - | - | This setting activates (1) or deactivates (0) the envelope generator onCVoutputy. The envelope generator is dependent on the current voltage setting for the output. Upon activation, the targeted output will go to zero. Then, when triggered (TO.ENV.TRIG), it will ramp the voltage from zero to the currently set peak voltage (TO.CV) over the attack time (TO.ENV.ATT) and then decay back to zero over the decay time (TO.ENV.DEC). For example:<br/>TO.CV.SET 1 V 8<br/>TO.ENV.ACT 1 1<br/>TO.ENV.ATT.S 1 1<br/>TO.ENV.DEC.S 1 30<br/>This will initialize the CV 1output to have an envelope that will ramp to+8Vover one second and decay back to zero over thirty seconds. To trigger the envelope, you need to send the trigger commandTO.ENV.TRIG 1. Envelopes currently re-trigger from the start of the cycle.To return your CVoutput to normal function, either deactivate the envelope (TO.ENV.ACT 1 0) or reinitialize the output (TO.CV.INIT 1). |
TO.ENV x y | - | - | This parameter essentially allows outputxto act as a gate between the 0 and 1 state. Changing this value from 0 to 1 causes the envelope to trigger the attack phase and hold at the peak CV value; changing this value from 1 to 0 causes the decay stage of the envelope to be triggered. |
TO.ENV.TRIG x | - | - | triggers the envelope atCVoutputxto cycle;CVamplitude is used as the peak for the envelope and needs to be> 0for the envelope to be perceivable |
TO.ENV.ATT x y | - | - | set the envelope attack time toyforCVoutputx;yin milliseconds (default 12 ms) |
TO.ENV.ATT.S x y | - | - | set the envelope attack time toyforCVoutputx;yin seconds |
TO.ENV.ATT.M x y | - | - | set the envelope attack time toyforCVoutputx;yin minutes |
TO.ENV.DEC x y | - | - | set the envelope decay time toyforCVoutputx;yin milliseconds (default 250 ms) |
TO.ENV.DEC.S x y | - | - | set the envelope decay time toyforCVoutputx;yin seconds |
TO.ENV.DEC.M x y | - | - | set the envelope decay time toyforCVoutputx;yin minutes |
TO.ENV.EOR x n | - | - | The most important thing to know with this operator is that you can only cause the EOR trigger to fire on the same device as the TXo with the envelope. For this command, the outputs are numbered LOCALLY to the unit with the envelope. For example, if you have an envelope running on your second TXo, you can only send the EOR pulse to the four outputs on that device: <br/>TO.ENV.EOR 5 1<br/>This will cause the first output on TXo #2 ( TO.TR 5) to pulse after the envelope’s attack segment. |
TO.ENV.EOC x n | - | - | The most important thing to know with this operator is that you can only cause the EOC trigger to fire on the same device as the TXo with the envelope. For this command, the outputs are numbered LOCALLY to the unit with the envelope. For example, if you have an envelope running on your second TXo, you can only send the EOC pulse to the four outputs on that device: <br/>TO.ENV.EOC 5 1<br/>This will cause the first output on TXo #2 ( TO.TR 5) to pulse after the envelope’s decay segment. |
TO.ENV.LOOP x y | - | - | causes the envelope onCVoutputxto loop forytimes; ayof0will cause the envelope to loop infinitely; settingyto 1 (default) disables looping and (if currently looping) will cause it to finish its current cycle and cease |
TO.TR.INIT x | - | - | initializesTRoutputxback to the default boot settings and behaviors; neutralizes metronomes, dividers, pulse counters, etc. |
TO.CV.INIT x | - | - | initializesCVoutputxback to the default boot settings and behaviors; neutralizes offsets, slews, envelopes, oscillation, etc. |
TO.INIT d | - | - | initializes all of theTRandCVoutputs for device numberd(1-8) |
TO.KILL d | - | - | cancels allTRpulses andCVslews for device numberd(1-8) |
The Orthogonal Devices ER-301 Sound Computer is a voltage-controllable canvas for digital signal processing algorithms available from Orthogonal Devices. It can communicate with the Teletype to send up to 100 triggers and 100 CV values per device. Up to three devices are software-selectable and correlate to outputs up to 300.
OP | OP (set) | Alias | Description |
|---|---|---|---|
SC.TR x y | - | - | Set trigger output for the ER-301 virtual output x to y (0-1) |
SC.TR.POL x y | - | - | Set polarity of trigger for the ER-301 virtual output x to y (0-1) |
SC.TR.TIME x y | - | - | Set the pulse time for the ER-301 virtual triggerxtoyin ms |
SC.TR.TOG x | - | - | Flip the state for the ER-301 virtual trigger outputx |
SC.TR.PULSE x | - | SC.TR.P | Pulse the ER-301 virtual trigger outputx |
SC.CV x y | - | - | CV target value for the ER-301 virtual outputxto valuey |
SC.CV.OFF x y | - | - | CV offset added to the ER-301 virtual outputx |
SC.CV.SET x | - | - | Set CV value for the ER-301 virtual outputx |
SC.CV.SLEW x y | - | - | Set the CV slew time for the ER-301 virtual outputxin ms |
The 16n Faderbank is an open-source controller that can be polled by the Teletype to read the positions of its 16 sliders.
OP | OP (set) | Alias | Description |
|---|---|---|---|
FADER x | - | FB | reads the value of theFADERsliderx; default return range is from 0 to 16383 |
More extensively covered in theW/ Documentation.
OP | OP (set) | Alias | Description |
|---|---|---|---|
WS.PLAY x | - | - | Set playback state and direction.0stops playback.1sets forward motion, while-1plays in reverse |
WS.REC x | - | - | Set recording mode.0is playback only.1sets overdub mode for additive recording.-1sets overwrite mode to replace the tape with your input |
WS.CUE x | - | - | Go to a cuepoint relative to the playhead position.0retriggers the current location.1jumps to the next cue forward.-1jumps to the previous cue in the reverse. These actions are relative to playback direction such that0always retriggers the most recently passed location |
WS.LOOP x | - | - | Set the loop state on/off.0is off. Any other value turns loop on |
The SSSR Labs SM010 Matrixarchate is a 16x8 IO Sequenceable Matrix Signal Router.
OP | OP (set) | Alias | Description |
|---|---|---|---|
MA.SELECT x | - | - | select the default matrixarchate module, default1 |
MA.STEP | - | - | advance program sequencer |
MA.RESET | - | - | reset program sequencer |
MA.PGM pgm | - | - | select the current program (1-based) |
MA.ON x y | - | - | connect rowxand columnyin the current program (rows/columns are 0-based) |
MA.PON pgm x y | - | - | connect rowxand columnyin programpgm |
MA.OFF x y | - | - | disconnect rowxand columnyin the current program |
MA.POFF x y pgm | - | - | connect rowxand columnyin programpgm |
MA.SET x y state | - | - | set the connection at rowxand columnytostate(1 - on, 0 - off) |
MA.PSET pgm x y state | - | - | set the connection at rowxand columnyin programpgmtostate(1 - on, 0 - off) |
MA.COL col | MA.COL col value | - | get or set columncol(as a 16 bit unsigned value where each bit represents a connection) |
MA.PCOL pgm col | MA.PCOL pgm col value | - | get or set columncolin programpgm |
MA.ROW row | MA.ROW row value | - | get or set rowrow |
MA.PROW pgm row | MA.PROW pgm row value | - | get or set rowrowin programpgm |
MA.CLR | - | - | clear all connections |
MA.PCLR pgm | - | - | clear all connections in programpgm |
Here is a picture to help understand the naming of the various parts of a Teletype command:
COMMANDThe entire command, e.g.IF X: Y 1; Z 2;.
PREThe (optional) part before thePRE SEP, e.g.IF X.
POSTThe part after thePRE SEP, e.g.Y 1; Z 2.
SUBA sub command (only allowed in thePOST), e.g.Y 1, orZ 2.
PRE SEPAcolon, only one is allowed.
SUB SEPAsemi-colon, that separates sub commands (if used), only allowed in thePOST.
NUMA number between−32768and32767.
OPAnoperator, e.g.X,TR.PULSE
MODAmodifier, e.g.IF, orL.
Sub commands allow you to run multiple commands on a single line by utilising a semi-colon to separate each command, for example the following script:
X 0
Y 1
Z 2Can be rewritten using sub commands as:
X 0; Y 1; Z 2On their own sub commands allow for an increased command density on the Teletype. However when combined withPREstatements, certain operations become a lot easier.
Firstly, sub commands cannot be used before aMODor in thePREitself. For example, the following isnot allowed:
X 1; IF X: TR.PULSE 1We can use them in thePOSTthough, particularly with anIF, for example:
IF X: CV 1 N 60; TR.P 1
IF Y: TR.P 1; TR.P 2; TR.P 3Sub commands can also be used withL.
In general, aliases are a simple concept to understand. CertainOPs have been given shorted names to save space and the amount of typing, for example:
TR.PULSE 1Can be replaced with:
TR.P 1Where confusion may arise is with the symbolic aliases that have been given to some of the mathsOPs. For instance+is given as an alias forADDand itmustbe used as a direct replacement:
X ADD 1 1
X + 1 1The key to understanding this is that the Teletype usesprefix notation1always, even when using mathematical symbols.
The following example (usinginfix notation)will not work:
X 1 + 1Aliases are entirely optional, mostOPs do not have aliases. Consult theOPtables and documentation to find them.
Although happy accidents in the modular world are one of it’s many joys, when writing computer programs they can be incredibly frustrating. Here are some small tips to help keep things predictable (when you want them to be):
Don’t use variables unless you need to.
This is not to say that variables are not useful, rather it’s the opposite and they are extremely powerful. But it can be hard to keep a track of what each variable is used for and on which script it is used. Rather, try to save using variables for when you do want non-deterministic (i.e.variable) behaviour.
Consider usingIas a temporary variable.
If you do find yourself needing a variable, particularly one that is used to continue a calculation on another line, consider using the variableI. Unlike the other variables,Iis overwritten wheneverLis used, and as such, is implicitly transient in nature. One should never need to worry about modifying the value ofIand causing another script to malfunction, as no script should ever assume the value ofI.
UsePNversions ofOPs.
MostPOPs are now available asPNversions that ignore the value ofP.I. (e.g.PN.STARTforP.START). Unless you explicitly require the non-determinism ofPversions, stick to thePNversions (space allowing).
Avoid usingA,B,CandDto refer to the trigger outputs, instead use the numerical values directly.
AsA-Dare variables, they may no longer contain the values1-4, and while this was the recommend way to name triggers, it is no longer consider ideal. Newer versions of the Teletype hardware have replaced the labels on the trigger outputs, with the numbers1to4.
Grid integration can be described very simply: it allows you to use grid with teletype. However, there is more to it than just that. You can create custom grid interfaces that can be tailored individually for each scene. Since it’s done with scripts you can dynamically change these interfaces at any point - you could even create a dynamic interface that reacts to the scene itself or incoming triggers or control voltages.
You can simply use grid as an LED display to visualize your scene. Or make it into an earthsea style keyboard. You can create sequencers, or control surfaces to control other sequencers. The grid operators simplify building very complex interfaces, while something simple like a bank of faders can be done with just two lines of scripts.
Grid integration consists of 3 main features: grid operators, Grid Visualizer, and Grid Control mode. Grid operators allow you to draw on grid or create grid controls, such as buttons and faders, that can trigger scripts when pressed. As with any other operators you can execute them in Live screen or use them in any of your scripts.
Grid Visualizer provides a virtual grid within the Teletype itself:
It can be very useful while developing a script as you don’t have to switch between the grid and the keyboard as often. To turn it on navigate to Live screen and pressAlt-G(press again to switch to Full View / turn it off). You can also emulate button presses, which means it can even be used as an alternative to grid if you don’t have one, especially in full mode - try it with one of the manygrid scenesalready developed. For more information on how to use it please refer tothe Grid Visualizer documentation.
Grid Control Mode is a built in grid interface that allows you to use grid to trigger and mute scripts, edit variables and tracker values, save and load scenes, and more. It’s available in addition to whatever grid interface you develop - simply press the front panel button while the grid is attached. It can serve as a simple way to use grid to control any scene even without using grid ops, but it can also be very helpful when used together with a scripted grid interface. For more information and diagrams please refer tothe Grid Control documentation,
If you do want to try and build your own grid interfacesthe Grid Studiesis the best place to start.
OPincludes set notation and aliases | Description |
|---|---|
& x y | bitwise andx&y |
? x y z | if conditionxis true returny, otherwise returnz |
@@ x | get or set the current pattern value under the turtle |
@BOUNCE@BOUNCE 1 | get whether the turtle fence mode is BOUNCE, or set it to BOUNCE with 1 |
@BUMP@BUMP 1 | get whether the turtle fence mode is BUMP, or set it to BUMP with 1 |
@DIR@DIR x | get the direction of the turtle’s@STEPin degrees or set it to x |
@F x1 y1 x2 y2 | set the turtle’s fence to corners x1,y1 and x2,y2 |
@FX1@FX1 x | get the left fence line or set it to x |
@FX2@FX2 x | get the right fence line or set it to x |
@FY1@FY1 x | get the top fence line or set it to x |
@FY2@FY2 x | get the bottom fence line or set it to x |
@MOVE x y | move the turtle x cells in the X axis and y cells in the Y axis |
@SCRIPT@SCRIPT x | get which script runs when the turtle changes cells, or set it to x |
@SHOW@SHOW 0/1 | get whether the turtle is displayed on the TRACKER screen, or turn it on or off |
@SPEED@SPEED x | get the speed of the turtle’s@STEPin cells per step or set it to x |
@STEP | move@SPEED/100 cells forward in@DIR, triggering@SCRIPTon cell change |
@WRAP@WRAP 1 | get whether the turtle fence mode is WRAP, or set it to WRAP with 1 |
@X@X x | get the turtle X coordinate, or set it to x |
@Y@Y x | get the turtle Y coordinate, or set it to x |
AA x | get / set the variableA, default1 |
ABS x | absolute value ofx |
ADD x y+ | addxandytogether |
AND x y&& | logical AND ofxandy |
ARP.DIV v d | set voice clock divisor (euclidean length), range [1-32] |
ARP.ER v f d r | set all euclidean rhythm |
ARP.FIL v f | set voice euclidean fill, use 1 for straight clock division, range [1-32] |
ARP.GT v g | set voice gate length [0-127], scaled/synced to course divisions of voice clock |
ARP.HLD h | 0disables key hold mode, other values enable |
ARP.RES v | reset voice clock/pattern on next base clock tick |
ARP.ROT v r | set voice euclidean rotation, range [-32, 32] |
ARP.RPT v n s | set voice pattern repeat,ntimes [0-8], shifted byssemitones [-24, 24] |
ARP.SHIFT v o | shift voice cv by standard tt pitch value (e.g. N 6, V -1, etc) |
ARP.SLEW v t | set voice slew time in ms |
ARP.STY y | set base arp style [0-7] |
AVG x y | the average ofxandy |
BB x | get / set the variableB, default2 |
BCLR x y | clear bityin valuex |
BGET x y | get bityin valuex |
BPM x | milliseconds per beat in BPMx |
BREAKBRK | halts execution of the current script |
BSET x y | set bityin valuex |
CC x | get / set the variableC, default3 |
CHAOS x | get next value from chaos generator, or set the current value |
CHAOS.ALG x | get or set the algorithm for theCHAOSgenerator. 0 = LOGISTIC, 1 = CUBIC, 2 = HENON, 3 = CELLULAR |
CHAOS.R x | get or set theRparameter for theCHAOSgenerator |
CV xCV x y | CV target value |
CV.OFF xCV.OFF x y | CV offset added to output |
CV.SET x | Set CV value |
CV.SLEW xCV.SLEW x y | Get/set the CV slew time in ms |
CY.CV x | get the current CV value for channelx |
CY.POS xCY.POS x y | get / set position of channelx(x = 0to set all), position between0-255 |
CY.PRECY.PRE x | return current preset / load presetx |
CY.RES x | reset channelx(0= all) |
CY.REV x | reverse channelx(0= all) |
DD x | get / set the variableD, default4 |
DEL x: ... | Delay command byxms |
DEL.CLR | Clear the delay buffer |
DEL.R x y: ... | Trigger ‘1’ command immediately, and queue ‘x’ minus ‘1’ delayed commands at ‘y’ ms intervals |
DEL.X x y: ... | Queue ‘x’ delayed commands at ‘y’ ms intervals |
DEVICE.FLIP | Flip the screen/inputs/outputs |
DIV x y/ | dividexbyy |
DRUNKDRUNK x | changes by-1,0, or1upon each read saving its state, setting will give it a new value for the next read |
DRUNK.MAXDRUNK.MAX x | set the upper bound forDRUNK, default255 |
DRUNK.MINDRUNK.MIN x | set the lower bound forDRUNK, default0 |
DRUNK.WRAPDRUNK.WRAP x | shouldDRUNKwrap around when it reaches it’s bounds, default0 |
ELIF x: ... | if all previousIF/ELIFfail, andxis not zero, execute command |
ELSE: ... | if all previousIF/ELIFfail, excute command |
EQ x y== | doesxequaly |
ER f l i | Euclidean rhythm,fis fill (1-32),lis length (1-32) andiis step (any value), returns0or1 |
ES.CLOCK x | If II clocked, next pattern event |
ES.MAGIC x | Magic shape (1= halfspeed, 2=doublespeed, 3=linearize) |
ES.MODE x | Set pattern clock mode. (0=normal, 1=II clock) |
ES.PATTERN x | Select playing pattern (0-15) |
ES.PRESET x | Recall presetx(0-7) |
ES.RESET x | Reset pattern to start (and start playing) |
ES.STOP x | Stop pattern playback. |
ES.TRANS x | Transpose the current pattern |
ES.TRIPLE x | Recall triple shape (1-4) |
EVERY x: ... | run the command everyxtimes the command is called |
EXP x | exponentiation table lookup.0-16383range (V0-10) |
EZ x! | xis0, equivalent to logical NOT |
FADER xFB | reads the value of theFADERsliderx; default return range is from 0 to 16383 |
FLIPFLIP x | returns inverted state (0or1) on each read (also settable) |
G.BTN id x y w h type level script | initialize button |
G.BTN.EN idG.BTN.EN id x | enable/disable button or check if enabled |
G.BTN.L idG.BTN.L id level | get/set button level |
G.BTN.PR id action | emulate button press/release |
G.BTN.SW id | switch button |
G.BTN.V idG.BTN.V id value | get/set button value |
G.BTN.X idG.BTN.X id x | get/set button x coordinate |
G.BTN.Y idG.BTN.Y id y | get/set button y coordinate |
G.BTNI | id of last pressed button |
G.BTNLG.BTNL level | get/set level of last pressed button |
G.BTNVG.BTNV value | get/set value of last pressed button |
G.BTNXG.BTNX x | get/set x of last pressed button |
G.BTNYG.BTNY y | get/set y of last pressed button |
G.BTX id x y w h type level script columns rows | initialize multiple buttons |
G.CLR | clear all LEDs |
G.DIM level | set dim level |
G.FDR id x y w h type level script | initialize fader |
G.FDR.EN idG.FDR.EN id x | enable/disable fader or check if enabled |
G.FDR.L idG.FDR.L id level | get/set fader level |
G.FDR.N idG.FDR.N id value | get/set fader value |
G.FDR.PR id value | emulate fader press |
G.FDR.V idG.FDR.V id value | get/set scaled fader value |
G.FDR.X idG.FDR.X id x | get/set fader x coordinate |
G.FDR.Y idG.FDR.Y id y | get/set fader y coordinate |
G.FDRI | id of last pressed fader |
G.FDRLG.FDRL level | get/set level of last pressed fader |
G.FDRNG.FDRN value | get/set value of last pressed fader |
G.FDRVG.FDRV value | get/set scaled value of last pressed fader |
G.FDRXG.FDRX x | get/set x of last pressed fader |
G.FDRYG.FDRY y | get/set y of last pressed fader |
G.FDX id x y w h type level script columns rows | initialize multiple faders |
G.GBT group id x y w h type level script | initialize button in group |
G.GBTN.C group | get count of currently pressed |
G.GBTN.H group | get button block height |
G.GBTN.I group index | get id of pressed button |
G.GBTN.L group odd_level even_level | set level for group buttons |
G.GBTN.V group value | set value for group buttons |
G.GBTN.W group | get button block width |
G.GBTN.X1 group | get leftmost pressed x |
G.GBTN.X2 group | get rightmost pressed x |
G.GBTN.Y1 group | get highest pressed y |
G.GBTN.Y2 group | get lowest pressed y |
G.GBX group id x y w h type level script columns rows | initialize multiple buttons in group |
G.GFD grp id x y w h type level script | initialize fader in group |
G.GFDR.L group odd_level even_level | set level for group faders |
G.GFDR.N group value | set value for group faders |
G.GFDR.RN group min max | set range for group faders |
G.GFDR.V group value | set scaled value for group faders |
G.GFX group id x y w h type level script columns rows | initialize multiple faders in group |
G.GRPG.GRP id | get/set current group |
G.GRP.EN idG.GRP.EN id x | enable/disable group or check if enabled |
G.GRP.RST id | reset all group controls |
G.GRP.SC idG.GRP.SC id script | get/set group script |
G.GRP.SW id | switch groups |
G.GRPI | get last group |
G.KEY x y action | emulate grid press |
G.LED x yG.LED x y level | get/set LED |
G.LED.C x y | clear LED |
G.RCT x1 y1 x2 y2 fill border | draw rectangle |
G.REC x y w h fill border | draw rectangle |
G.ROTATE x | set grid rotation |
G.RST | full grid reset |
GT x y> | xis greater thany |
GTE x y>= | xis greater than or equal toy |
II x | get / set the variableI |
IF x: ... | ifxis not zero execute command |
IN | Get the value of IN jack (0-16383) |
IN.CAL.MAX | Reads the input CV and assigns the voltage to the max point |
IN.CAL.MIN | Reads the input CV and assigns the voltage to the zero point |
IN.CAL.RESET | Resets the input CV calibration |
IN.SCALE min max | Set static scaling of theINCV to betweenminandmax. |
INIT | clears all state data |
INIT.CV x | clears all parameters on CV associated with output x |
INIT.CV.ALL | clears all parameters on all CV’s |
INIT.DATA | clears all data held in all variables |
INIT.P x | clears pattern associated with pattern number x |
INIT.P.ALL | clears all patterns |
INIT.SCENE | loads a blank scene |
INIT.SCRIPT x | clear script number x |
INIT.SCRIPT.ALL | clear all scripts |
INIT.TIME x | clear time on trigger x |
INIT.TR x | clear all parameters on trigger associated with TR x |
INIT.TR.ALL | clear all triggers |
JJ x | get / set the variableJ |
JF.GOD x | Redefines C3 to align with the ‘God’ note.x=0sets A to 440,x=1sets A to 432. |
JF.MODE x | Set the current choice of standard functionality, or Just Type alternate modes. You’ll likely want to put JF.MODE x in your Teletype INIT scripts.x= nonzero activates alternative modes.0restores normal. |
JF.NOTE x y | Polyphonically allocated note sequencing. Works as JF.VOX with chan selected automatically. Free voices will be taken first. If all voices are busy, will steal from the voice which has been active the longest.x= pitch relative to C3,y= velocity. |
JF.QT x | When non-zero, all events are queued & delayed until the next quantize event occurs. Using values that don’t align with the division of rhythmic streams will cause irregular patterns to unfold. Set to 0 to deactivate quantization.x= division, 0 deactivates quantization, 1 to 32 sets the subdivision & activates quantization. |
JF.RMODE x | Set the RUN state of Just Friends when no physical jack is present. (0= run off, non-zero = run on) |
JF.RUN x | Send a ‘voltage’ to the RUN input. RequiresJF.RMODE 1to have been executed, or a physical cable in JF’s input. Thus Just Friend’s RUN modes are accessible without needing a physical cable & control voltage to set the RUN parameter. useJF.RUN V xto set toxvolts. The expected range is V -5 to V 5 |
JF.SHIFT x | Shifts the transposition of Just Friends, regardless of speed setting. Shifting by V 1 doubles the frequency in sound, or doubles the rate in shape.x= pitch, useN xfor semitones, orV yfor octaves. |
JF.TICK x | Sets the underlying timebase of the Geode.x= clock. 0 resets the timebase to the start of measure. 1 to 48 shall be sent repetitively. The value representing ticks per measure. 49 to 255 sets beats-per-minute and resets the timebase to start of measure. |
JF.TR x y | Simulate a TRIGGER input.xis channel (0= all) and y is state (0or1) |
JF.TUNE x y z | Adjust the tuning ratios used by the INTONE control.x= channel,y= numerator (set the multiplier for the tuning ratio),z= denominator (set the divisor for the tuning ratio). |
JF.VOX x y z | Create a note at the specified channel, of the defined pitch & velocity. All channels can be set simultaneously with a chan value of 0.x= channel,y= pitch relative to C3,z= velocity (likeJF.VTR). |
JF.VTR x y | LikeJF.TRwith added volume control. Velocity is scaled with volts, so tryV 5for an output trigger of 5 volts. Channels remember their latest velocity setting and apply it regardless of TRIGGER origin (digital or physical).x= channel,0sets all channels.y= velocity, amplitude of output in volts. egJF.VTR 1 V 4. |
JI x y | just intonation helper, precision ratio divider normalised to 1V |
KK x | get / set the variableK |
KILL | clears stack, clears delays, cancels pulses, cancels slews, disables metronome |
KR.CLK x | advance the clock for channelx(channel must have teletype clocking enabled) |
KR.CV x | get the current CV value for channelx |
KR.L.LEN x yKR.L.LEN x y z | get length of trackx, parametery/ set toz |
KR.L.ST x yKR.L.ST x y z | get loop start for trackx, parametery/ set toz |
KR.MUTE xKR.MUTE x y | get/set mute state for channelx(1= muted,0= unmuted) |
KR.PATKR.PAT x | get/set current pattern |
KR.PERIODKR.PERIOD x | get/set internal clock period |
KR.POS x yKR.POS x y z | get/set positionzfor trackz, parametery |
KR.PREKR.PRE x | return current preset / load presetx |
KR.RES x y | reset position to loop start for trackx, parametery |
KR.SCALEKR.SCALE x | get/set current scale |
KR.TMUTE x | toggle mute state for channelx |
L x y: ... | run the command sequentially withIvalues fromxtoy |
LAST x | get value in milliseconds since last script run time |
LIM x y z | limit the valuexto the rangeytozinclusive |
LSH x y<< | left shiftxbyybits, in effect multiplyxby2to the power ofy |
LT x y< | xis less thany |
LTE x y<= | xis less than or equal toy |
LV.CV x | get the current CV value for channelx |
LV.L.DIRLV.L.DIR x | get/set loop direction |
LV.L.LENLV.L.LEN x | get/set loop length |
LV.L.STLV.L.ST x | get/set loop start |
LV.POSLV.POS x | get/set current position |
LV.PRELV.PRE x | return current preset / load presetx |
LV.RES x | reset,0for soft reset (on next ext. clock),1for hard reset |
MM x | get/set metronome interval tox(in ms), default1000, minimum value25 |
M!M! x | get/set metronome to experimental intervalx(in ms), minimum value2 |
M.ACTM.ACT x | get/set metronome activation tox(0/1), default1(enabled) |
M.RESET | hard reset metronome count without triggering |
MA.CLR | clear all connections |
MA.COL colMA.COL col value | get or set columncol(as a 16 bit unsigned value where each bit represents a connection) |
MA.OFF x y | disconnect rowxand columnyin the current program |
MA.ON x y | connect rowxand columnyin the current program (rows/columns are 0-based) |
MA.PCLR pgm | clear all connections in programpgm |
MA.PCOL pgm colMA.PCOL pgm col value | get or set columncolin programpgm |
MA.PGM pgm | select the current program (1-based) |
MA.POFF x y pgm | connect rowxand columnyin programpgm |
MA.PON pgm x y | connect rowxand columnyin programpgm |
MA.PROW pgm rowMA.PROW pgm row value | get or set rowrowin programpgm |
MA.PSET pgm x y state | set the connection at rowxand columnyin programpgmtostate(1 - on, 0 - off) |
MA.RESET | reset program sequencer |
MA.ROW rowMA.ROW row value | get or set rowrow |
MA.SELECT x | select the default matrixarchate module, default1 |
MA.SET x y state | set the connection at rowxand columnytostate(1 - on, 0 - off) |
MA.STEP | advance program sequencer |
MAX x y | return the maximum ofxandy |
ME.CV x | get the current CV value for channelx |
ME.PERIODME.PERIOD x | get/set internal clock period |
ME.PREME.PRE x | return current preset / load presetx |
ME.RES x | reset channelx(0= all), also used as “start” |
ME.SCALEME.SCALE x | get/set current scale |
ME.STOP x | stop channelx(0= all) |
MID.SHIFT o | shift pitch CV by standard Teletype pitch value (e.g.N 6,V -1, etc) |
MID.SLEW t | set pitch slew time in ms (applies to all allocation styles except FIXED) |
MIN x y | return the minimum ofxandy |
MOD x y% | find the remainder after division ofxbyy |
MP.PRESET x | set Meadowphysics to presetx(indexed from0) |
MP.RESET x | reset countdown for channelx(0= all,1-8= individual channels) |
MP.STOP x | reset channelx(0= all,1-8= individual channels) |
MUL x y* | multiplyxandytogether |
MUTE xMUTE x y | Disable trigger input x |
N x | converts an equal temperament note number to a value usable by the CV outputs (xin the range-127to127) |
NE x y!=,XOR | xis not equal toy |
NZ x | xis not0 |
OO x | auto-incrementsaftereach access, can be set, starting value0 |
O.INCO.INC x | how much to incrementOby on each invocation, default1 |
O.MAXO.MAX x | the upper bound forO, default63 |
O.MINO.MIN x | the lower bound forO, default0 |
O.WRAPO.WRAP x | shouldOwrap when it reaches its bounds, default1 |
OR x y|| | logical OR ofxandy |
OR.BANK x | Select preset bankx(1-8) |
OR.CLK x | Advance trackx(1-4) |
OR.CVA x | Select tracks for CV A wherexis a binary number representing the tracks |
OR.CVB x | Select tracks for CV B wherexis a binary number representing the tracks |
OR.DIV x | Set divisor for selected track tox(1-16) |
OR.GRST x | Global reset (xcan be any value) |
OR.MUTE x | Mute trigger selected byOR.TRK(0= on,1= mute) |
OR.PHASE x | Set phase for selected track tox(0-16) |
OR.PRESET x | Select presetx(1-8) |
OR.RELOAD x | Reload preset or bank (0- current preset,1- current bank,2- all banks) |
OR.ROTS x | Rotate scales byx(1-15) |
OR.ROTW x | Rotate weights byx(1-3) |
OR.RST x | Reset trackx(1-4) |
OR.SCALE x | Select scalex(1-16) |
OR.TRK x | Choose trackx(1-4) to be used byOR.DIV,OR.PHASE,OR.WGTorOR.MUTE |
OR.WGT x | Set weight for selected track tox(1-8) |
OTHER: ... | runs the command when the previousEVERY/SKIPdid not run its command. |
P xP x y | get/set the value of the working pattern at indexx |
P.+ x y | increase the value of the working pattern at indexxbyy |
P.+W x y a b | increase the value of the working pattern at indexxbyyand wrap it toa..brange |
P.- x y | decrease the value of the working pattern at indexxbyy |
P.-W x y a b | decrease the value of the working pattern at indexxbyyand wrap it toa..brange |
P.ENDP.END x | get/set the end location of the working pattern, default63 |
P.HEREP.HERE x | get/set value at current index of working pattern |
P.IP.I x | get/set index position for the working pattern. |
P.INS x y | insert valueyat indexxof working pattern, shift later values down, destructive to loop length |
P.LP.L x | get/set pattern length of the working pattern, non-destructive to data |
P.MAX | find the first maximum value in the pattern between the START and END for the working pattern and return its index |
P.MIN | find the first minimum value in the pattern between the START and END for the working pattern and return its index |
P.NP.N x | get/set the pattern number for the working pattern, default0 |
P.NEXTP.NEXT x | increment index of working pattern then get/set value |
P.POP | return and remove the value from the end of the working pattern (like a stack), destructive to loop length |
P.PREVP.PREV x | decrement index of working pattern then get/set value |
P.PUSH x | insert valuexto the end of the working pattern (like a stack), destructive to loop length |
P.RM x | delete indexxof working pattern, shift later values up, destructive to loop length |
P.RND | return a value randomly selected between the start and the end position |
P.STARTP.START x | get/set the start location of the working pattern, default0 |
P.WRAPP.WRAP x | when the working pattern reaches its bounds does it wrap (0/1), default1(enabled) |
PARAMPRM | Get the value of PARAM knob (0-16383) |
PARAM.CAL.MAX | Reads the Parameter Knob maximum position and assigns the maximum point |
PARAM.CAL.MIN | Reads the Parameter Knob minimum position and assigns a zero value |
PARAM.CAL.RESET | Resets the Parameter Knob calibration |
PARAM.SCALE min max | Set static scaling of the PARAM knob to betweenminandmax. |
PN x yPN x y z | get/set the value of patternxat indexy |
PN.+ x y z | increase the value of patternxat indexybyz |
PN.+W x y z a b | increase the value of patternxat indexybyzand wrap it toa..brange |
PN.- x y z | decrease the value of patternxat indexybyz |
PN.-W x y z a b | decrease the value of patternxat indexybyzand wrap it toa..brange |
PN.END xPN.END x y | get/set the end location of the patternx, default63 |
PN.HERE xPN.HERE x y | get/set value at current index of patternx |
PN.I xPN.I x y | get/set index position for patternx |
PN.INS x y z | insert valuezat indexyof patternx, shift later values down, destructive to loop length |
PN.L xPN.L x y | get/set pattern length of pattern x. non-destructive to data |
PN.MAX x | find the first maximum value in the pattern between the START and END for patternxand return its index |
PN.MIN x | find the first minimum value in the pattern between the START and END for patternxand return its index |
PN.NEXT xPN.NEXT x y | increment index of patternxthen get/set value |
PN.POP x | return and remove the value from the end of patternx(like a stack), destructive to loop length |
PN.PREV xPN.PREV x y | decrement index of patternxthen get/set value |
PN.PUSH x y | insert valueyto the end of patternx(like a stack), destructive to loop length |
PN.RM x y | delete indexyof patternx, shift later values up, destructive to loop length |
PN.RND x | return a value randomly selected between the start and the end position of patternx |
PN.START xPN.START x y | get/set the start location of patternx, default0 |
PN.WRAP xPN.WRAP x y | when patternxreaches its bounds does it wrap (0/1), default1(enabled) |
PROB x: ... | potentially execute command with probabilityx(0-100) |
QQ x | Modify the queue entries |
Q.AVGQ.AVG x | Return the average of the queue |
Q.NQ.N x | The queue length |
QT x y | roundxto the closest multiple ofy(quantise) |
R | generate a random number |
R.MAX x | set the upper end of the range from 0 – 32767 |
R.MIN x | set the lower end of the range from 0 – 32767 |
RAND xRND | generate a random number between0andxinclusive |
RRAND x yRRND | generate a random number betweenxandyinclusive |
RSH x y>> | right shiftxbyybits, in effect dividexby2to the power ofy |
S: ... | Place a command onto the stack |
S.ALL | Execute all entries in the stack |
S.CLR | Clear all entries in the stack |
S.L | Get the length of the stack |
S.POP | Execute the most recent entry |
SC.CV x y | CV target value for the ER-301 virtual outputxto valuey |
SC.CV.OFF x y | CV offset added to the ER-301 virtual outputx |
SC.CV.SET x | Set CV value for the ER-301 virtual outputx |
SC.CV.SLEW x y | Set the CV slew time for the ER-301 virtual outputxin ms |
SC.TR x y | Set trigger output for the ER-301 virtual output x to y (0-1) |
SC.TR.POL x y | Set polarity of trigger for the ER-301 virtual output x to y (0-1) |
SC.TR.PULSE xSC.TR.P | Pulse the ER-301 virtual trigger outputx |
SC.TR.TIME x y | Set the pulse time for the ER-301 virtual triggerxtoyin ms |
SC.TR.TOG x | Flip the state for the ER-301 virtual trigger outputx |
SCALE a b x y iSCL | scaleifrom rangeatobto rangextoy, i.e.i * (y - x) / (b - a) |
SCENESCENE x | get the current scene number, or load scenex(0-31) |
SCRIPTSCRIPT x$ | get current script number, or execute scriptx(1-8), recursion allowed |
SKIP x: ... | run the command every time except thexth time. |
STATE x | Read the current state of input x |
SUB x y- | subtractyfromx |
SYNC x | synchronizesallEVERYandSKIPcounters to offsetx. |
TT x | get / set the variableT, typically used for time, default0 |
TI.IN x | reads the value of IN jackx; default return range is from -16384 to 16383 - representing -10V to +10V; return range can be altered by theTI.IN.MAPcommand |
TI.IN.CALIB x y | calibrates the scaling for IN jackx;yof-1sets the-10Vpoint;yof0sets the0Vpoint;yof1sets the+10Vpoint |
TI.IN.INIT x | initializesINjackxback to the default boot settings and behaviors; neutralizes mapping (but not calibration) |
TI.IN.MAP x y z | maps the IN values for input jackxacross the range y - z (default range is -16384 to 16383 - representing -10V to +10V) |
TI.IN.N x | return the quantized note number forINjackxusing the scale set byTI.IN.SCALE |
TI.IN.QT x | return the quantized value forINjackxusing the scale set byTI.IN.SCALE; default return range is from -16384 to 16383 - representing -10V to +10V |
TI.IN.SCALE x | select scale #yforINjackx; scales listed in full description |
TI.INIT d | initializes all of thePARAMandINinputs for device numberd(1-8) |
TI.PARAM xTI.PRM | reads the value ofPARAMknobx; default return range is from 0 to 16383; return range can be altered by theTI.PARAM.MAPcommand |
TI.PARAM.CALIB x yTI.PRM.CALIB | calibrates the scaling for PARAM knobx;yof0sets the bottom bound;yof1sets the top bound |
TI.PARAM.INIT xTI.PRM.INIT | initializesPARAMknobxback to the default boot settings and behaviors; neutralizes mapping (but not calibration) |
TI.PARAM.MAP x y zTI.PRM.MAP | maps the PARAM values for inputxacross the range y - z (defaults 0-16383) |
TI.PARAM.N xTI.PRM.N | return the quantized note number forPARAMknobxusing the scale set byTI.PARAM.SCALE |
TI.PARAM.QT xTI.PRM.QT | return the quantized value forPARAMknobxusing the scale set byTI.PARAM.SCALE; default return range is from 0 to 16383 |
TI.PARAM.SCALE xTI.PRM.SCALE | select scale #yforPARAMknobx; scales listed in full description |
TI.RESET d | resets the calibration data for TXi numberd(1-8) to its factory defaults (no calibration) |
TI.STORE d | stores the calibration data for TXi numberd(1-8) to its internal flash memory |
TIMETIME x | timer value, counts up in ms., wraps after 32s, can be set |
TIME.ACTTIME.ACT x | enable or disable timer counting, default1 |
TO.CV x | CV target outputx;yvalues are bipolar (-16384 to +16383) and map to -10 to +10 |
TO.CV.CALIB x | Locks the current offset (CV.OFF) as a calibration offset and saves it to persist between power cycles for outputx. |
TO.CV.INIT x | initializesCVoutputxback to the default boot settings and behaviors; neutralizes offsets, slews, envelopes, oscillation, etc. |
TO.CV.LOG x y | translates the output forCVoutputxto logarithmic modey;ydefaults to0(off); mode1is for 0-16384 (0V-10V), mode2is for 0-8192 (0V-5V), mode3is for 0-4096 (0V-2.5V), etc. |
TO.CV.N x y | target the CV to noteyfor outputx;yis indexed in the output’s currentCV.SCALE |
TO.CV.N.SET x y | set the CV to noteyfor outputx;yis indexed in the output’s currentCV.SCALE(ignoringSLEW) |
TO.CV.OFF x y | set the CV offset for outputx;yvalues are added at the final stage |
TO.CV.QT x y | CV target outputx;yis quantized to output’s currentCV.SCALE |
TO.CV.QT.SET x y | set the CV for outputx(ignoringSLEW);yis quantized to output’s currentCV.SCALE |
TO.CV.RESET x | Clears the calibration offset for outputx. |
TO.CV.SCALE x y | select scale #yfor CV outputx; scales listed in full description |
TO.CV.SET x y | set the CV for outputx(ignoringSLEW);yvalues are bipolar (-16384 to +16383) and map to -10 to +10 |
TO.CV.SLEW x y | set the slew amount for outputx;yin milliseconds |
TO.CV.SLEW.M x y | set the slew amount for outputx;yin minutes |
TO.CV.SLEW.S x y | set the slew amount for outputx;yin seconds |
TO.ENV x y | This parameter essentially allows outputxto act as a gate between the 0 and 1 state. Changing this value from 0 to 1 causes the envelope to trigger the attack phase and hold at the peak CV value; changing this value from 1 to 0 causes the decay stage of the envelope to be triggered. |
TO.ENV.ACT x y | activates/deactivates the AD envelope generator for the CV outputx;yturns the envelope generator off (0 - default) or on (1);CVamplitude is used as the peak for the envelope and needs to be> 0for the envelope to be perceivable |
TO.ENV.ATT x y | set the envelope attack time toyforCVoutputx;yin milliseconds (default 12 ms) |
TO.ENV.ATT.M x y | set the envelope attack time toyforCVoutputx;yin minutes |
TO.ENV.ATT.S x y | set the envelope attack time toyforCVoutputx;yin seconds |
TO.ENV.DEC x y | set the envelope decay time toyforCVoutputx;yin milliseconds (default 250 ms) |
TO.ENV.DEC.M x y | set the envelope decay time toyforCVoutputx;yin minutes |
TO.ENV.DEC.S x y | set the envelope decay time toyforCVoutputx;yin seconds |
TO.ENV.EOC x n | fires aPULSEat the End of Cycle to the unit-local trigger output ‘n’ for the envelope onCVoutputx;nrefers to trigger output 1-4 on the same TXo as CV output ‘y’ |
TO.ENV.EOR x n | fires aPULSEat the End of Rise to the unit-local trigger output ‘n’ for the envelope onCVoutputx;nrefers to trigger output 1-4 on the same TXo as CV output ‘y’ |
TO.ENV.LOOP x y | causes the envelope onCVoutputxto loop forytimes; ayof0will cause the envelope to loop infinitely; settingyto 1 (default) disables looping and (if currently looping) will cause it to finish its current cycle and cease |
TO.ENV.TRIG x | triggers the envelope atCVoutputxto cycle;CVamplitude is used as the peak for the envelope and needs to be> 0for the envelope to be perceivable |
TO.INIT d | initializes all of theTRandCVoutputs for device numberd(1-8) |
TO.KILL d | cancels allTRpulses andCVslews for device numberd(1-8) |
TO.M d y | sets the 4 independent metronome intervals for deviced(1-8) toyin milliseconds; default1000 |
TO.M.ACT d y | sets the active status for the 4 independent metronomes on deviced(1-8) toy(0/1); default0(disabled) |
TO.M.BPM d y | sets the 4 independent metronome intervals for devicedtoyin Beats Per Minute |
TO.M.COUNT d y | sets the number of repeats before deactivating for the 4 metronomes on devicedtoy; default0(infinity) |
TO.M.M d y | sets the 4 independent metronome intervals for devicedtoyin minutes |
TO.M.S d y | sets the 4 independent metronome intervals for devicedtoyin seconds; default1 |
TO.M.SYNC d | synchronizes the 4 metronomes for device numberd(1-8) |
TO.OSC x y | targets oscillation for CV outputxtoywith the portamento rate determined by theTO.OSC.SLEWvalue;yis 1v/oct translated from the standard range (1-16384); a value of0disables oscillation;CVamplitude is used as the peak for oscillation and needs to be> 0for it to be perceivable |
TO.OSC.CTR x y | centers the oscillation on CV outputxtoy;yvalues are bipolar (-16384 to +16383) and map to -10 to +10 |
TO.OSC.CYC x y | targets the oscillator cycle length toyfor CV outputxwith the portamento rate determined by theTO.OSC.SLEWvalue;yis in milliseconds |
TO.OSC.CYC.M x y | targets the oscillator cycle length toyfor CV outputxwith the portamento rate determined by theTO.OSC.SLEWvalue;yis in minutes |
TO.OSC.CYC.M.SET x y | sets the oscillator cycle length toyfor CV outputx(ignoresCV.OSC.SLEW);yis in minutes |
TO.OSC.CYC.S x y | targets the oscillator cycle length toyfor CV outputxwith the portamento rate determined by theTO.OSC.SLEWvalue;yis in seconds |
TO.OSC.CYC.S.SET x y | sets the oscillator cycle length toyfor CV outputx(ignoresCV.OSC.SLEW);yis in seconds |
TO.OSC.CYC.SET x y | sets the oscillator cycle length toyfor CV outputx(ignoresCV.OSC.SLEW);yis in milliseconds |
TO.OSC.FQ x y | targets oscillation for CV outputxto frequencyywith the portamento rate determined by theTO.OSC.SLEWvalue;yis in Hz; a value of0disables oscillation;CVamplitude is used as the peak for oscillation and needs to be> 0for it to be perceivable |
TO.OSC.FQ.SET x y | sets oscillation for CV outputxto frequencyy(ignoresCV.OSC.SLEW);yis in Hz; a value of0disables oscillation;CVamplitude is used as the peak for oscillation and needs to be> 0for it to be perceivable |
TO.OSC.LFO x y | targets oscillation for CV outputxto LFO frequencyywith the portamento rate determined by theTO.OSC.SLEWvalue;yis in mHz (millihertz: 10^-3 Hz); a value of0disables oscillation;CVamplitude is used as the peak for oscillation and needs to be> 0for it to be perceivable |
TO.OSC.LFO.SET x y | sets oscillation for CV outputxto LFO frequencyy(ignoresCV.OSC.SLEW);yis in mHz (millihertz: 10^-3 Hz); a value of0disables oscillation;CVamplitude is used as the peak for oscillation and needs to be> 0for it to be perceivable |
TO.OSC.N x y | targets oscillation for CV outputxto noteywith the portamento rate determined by theTO.OSC.SLEWvalue; see quantization scale reference fory;CVamplitude is used as the peak for oscillation and needs to be> 0for it to be perceivable |
TO.OSC.N.SET x y | sets oscillation for CV outputxto notey(ignoresCV.OSC.SLEW); see quantization scale reference fory;CVamplitude is used as the peak for oscillation and needs to be> 0for it to be perceivable |
TO.OSC.PHASE x y | sets the phase offset of the oscillator on CV outputxtoy(0 to 16383);yis the range of one cycle |
TO.OSC.QT x y | targets oscillation for CV outputxtoywith the portamento rate determined by theTO.OSC.SLEWvalue;yis 1v/oct translated from the standard range (1-16384) and quantized to currentOSC.SCALE; a value of0disables oscillation;CVamplitude is used as the peak for oscillation and needs to be> 0for it to be perceivable |
TO.OSC.QT.SET x y | set oscillation for CV outputxtoy(ignoresCV.OSC.SLEW);yis 1v/oct translated from the standard range (1-16384) and quantized to currentOSC.SCALE; a value of0disables oscillation;CVamplitude is used as the peak for oscillation and needs to be> 0for it to be perceivable |
TO.OSC.RECT x y | rectifies the polarity of the oscillator for outputxtoy; range foryis -2 to 2; default is 0 (no rectification); 1 & -1 are partial rectification - omitting all values on the other side of the sign; 2 & -2 are full rectification - inverting values from the other pole |
TO.OSC.SCALE x y | select scale #yfor CV outputx; scales listed in full description |
TO.OSC.SET x y | set oscillation for CV outputxtoy(ignoresCV.OSC.SLEW);yis 1v/oct translated from the standard range (1-16384); a value of0disables oscillation;CVamplitude is used as the peak for oscillation and needs to be> 0for it to be perceivable |
TO.OSC.SLEW x y | sets the frequency slew time (portamento) for the oscillator on CV outputxtoy;yin milliseconds |
TO.OSC.SLEW.M x y | sets the frequency slew time (portamento) for the oscillator on CV outputxtoy;yin minutes |
TO.OSC.SLEW.S x y | sets the frequency slew time (portamento) for the oscillator on CV outputxtoy;yin seconds |
TO.OSC.SYNC x | resets the phase of the oscillator onCVoutputx(relative toTO.OSC.PHASE) |
TO.OSC.WAVE x y | set the waveform for outputxtoy;yvalues range0-4500. There are 45 different waveforms, values translate to sine (0), triangle (100), saw (200), pulse (300) all the way to random/noise (4500); oscillator shape between values is a blend of the pure waveforms |
TO.OSC.WIDTH x y | sets the width of the pulse wave on outputxtoy;yis a percentage of total width (0 to 100); only affects waveform3000 |
TO.TR x y | sets theTRvalue for outputxtoy(0/1) |
TO.TR.INIT x | initializesTRoutputxback to the default boot settings and behaviors; neutralizes metronomes, dividers, pulse counters, etc. |
TO.TR.M x y | sets the independent metronome interval for outputxtoyin milliseconds; default1000 |
TO.TR.M.ACT x y | sets the active status for the independent metronome for outputxtoy(0/1); default0(disabled) |
TO.TR.M.BPM x y | sets the independent metronome interval for outputxtoyin Beats Per Minute |
TO.TR.M.COUNT x y | sets the number of repeats before deactivating for outputxtoy; default0(infinity) |
TO.TR.M.M x y | sets the independent metronome interval for outputxtoyin minutes |
TO.TR.M.MUL x y | multiplies theMrate onTRoutputxbyy;ydefaults to1- no multiplication |
TO.TR.M.S x y | sets the independent metronome interval for outputxtoyin seconds; default1 |
TO.TR.M.SYNC x | synchronizes thePULSEfor metronome onTRoutput numberx |
TO.TR.POL x y | sets the polarity forTRoutputn |
TO.TR.PULSE xTO.TR.P | pulses theTRvalue for outputxfor the duration set byTO.TR.TIME/S/M |
TO.TR.PULSE.DIV x yTO.TR.P.DIV | sets the clock division factor forTRoutputxtoy |
TO.TR.PULSE.MUTE x yTO.TR.P.MUTE | mutes or un-mutesTRoutputx;yis 1 (mute) or 0 (un-mute) |
TO.TR.TIME x y | sets the time forTR.PULSEon outputn;yin milliseconds |
TO.TR.TIME.M x y | sets the time forTR.PULSEon outputn;yin minutes |
TO.TR.TIME.S x y | sets the time forTR.PULSEon outputn;yin seconds |
TO.TR.TOG x | toggles theTRvalue for outputx |
TO.TR.WIDTH x y | sets the time forTR.PULSEon outputnbased on the width of its current metronomic value;yin percentage (0-100) |
TOSS | randomly return0or1 |
TR xTR x y | Set trigger output x to y (0-1) |
TR.POL xTR.POL x y | Set polarity of trigger output x to y (0-1) |
TR.PULSE xTR.P | Pulse trigger output x |
TR.TIME xTR.TIME x y | Set the pulse time of trigger x to y ms |
TR.TOG x | Flip the state of trigger output x |
V x | converts a voltage to a value usable by the CV outputs (xbetween0and10) |
VV x | converts a voltage to a value usable by the CV outputs (xbetween0and1000,100represents 1V) |
W x: ... | run the command while condition x is true |
WRAP x y zWRP | limit the valuexto the rangeytozinclusive, but with wrapping |
WS.CUE x | Go to a cuepoint relative to the playhead position.0retriggers the current location.1jumps to the next cue forward.-1jumps to the previous cue in the reverse. These actions are relative to playback direction such that0always retriggers the most recently passed location |
WS.LOOP x | Set the loop state on/off.0is off. Any other value turns loop on |
WS.PLAY x | Set playback state and direction.0stops playback.1sets forward motion, while-1plays in reverse |
WS.REC x | Set recording mode.0is playback only.1sets overdub mode for additive recording.-1sets overwrite mode to replace the tape with your input |
WW.END x | Set the loop end position (0-15) |
WW.MUTE1 x | Mute trigger 1 (0 = on, 1 = mute) |
WW.MUTE2 x | Mute trigger 2 (0 = on, 1 = mute) |
WW.MUTE3 x | Mute trigger 3 (0 = on, 1 = mute) |
WW.MUTE4 x | Mute trigger 4 (0 = on, 1 = mute) |
WW.MUTEA x | Mute CV A (0 = on, 1 = mute) |
WW.MUTEB x | Mute CV B (0 = on, 1 = mute) |
WW.PATTERN x | Change pattern (0-15) |
WW.PMODE x | Set the loop play mode (0-5) |
WW.POS x | Cut to position (0-15) |
WW.PRESET x | Recall preset (0-7) |
WW.QPATTERN x | Change pattern (0-15) after current pattern ends |
WW.START x | Set the loop start position (0-15) |
WW.SYNC x | Cut to position (0-15) and hard-sync the clock (if clocked internally) |
XX x | get / set the variableX, default0 |
YY x | get / set the variableY, default0 |
ZZ x | get / set the variableZ, default0 |
^ x y | bitwise xorx^y |
| x y | bitwise orx |
~ x | bitwise not, i.e.: inversion ofx |
G.XYP,G.XYP.X,G.XYP.Y,P.ADD,P.ADDW,P.SUB,P.SUBW,PN.ADD,PN.ADDW,PN.SUB,PN.SUBW,TIF
SCALEprecision improvedPARAMset properly when used in the init scriptPARAMandINwon’t reset to 0 afterINIT.DATAPN.HERE,P.POP,PN.POPwill update the tracker screenP.RMwas 1-based, now 0-basedP.RM/PN.RMwill not change pattern length if deleting outside of length rangeJIop fixedTIMEandLASTare now 1ms accurateRAND/RRANDwill properly work with large range valuesL .. 32767won’t freezePARAM.SCALE min maxandIN.SCALE min maxto add static scaling to inputsINIT, to clear device stateR,R.MIN,R.MAXprogrammable RNGInow carries acrossDELcommandsINopIvariable is now scoped to theLloop, and does not exist outside of an execution context. Scripts usingIas a general-purpose variable will be broken.SCENEwill not run fromINITscript during scene load.BPMto get milliseconds per beat in given BPMLAST xfor the last time scriptxwas calledSCRIPTwith no arguments gets the current script number.AVGandQ.AVGnow round up properlyBREAKto stop the remainder of the scriptW [condition]: [statement]will executestatementas long asconditionis true (up to an iteration limit).EVERY x:,SKIP x:,OTHER:to alternately execute or not execute a command.SYNC xwill synchronize allEVERYandSKIPline to the same step.1: DEL 500: SCRIPT 1for temporal recursion.SCRIPToperationsIIop. Ops that required it will now work with out it. (e.g.II MP.PRESET 1will become justMP.PRESET 1)MUTEandUNMUTEops. NowMUTE xwill return the mute status for triggerx(0is unmuted,1is muted), andMUTE x ywill set the mute for triggerx(y = 0to unmute,y = 1to mute)MP.SYNC,MP.MUTE,MP.UNMUTE,MP.FREEZE,MP.UNFREEZEME;separator to run multiple commands on a single line, e.g.X 1; Y 2+forADD,-forSUB,*forMUL,/forDIV,%forMOD,<<forLSH,>>forRSH,==forEQ,!=forNE,<forLT,>forGT,<=forLTE,>=forGTE,!forEZ,&&forAND,||forOR,PRMforPARAM,TR.PforTR.PULSELTE(less than or equal), andGTE(greater than or equal)PN.L,PN.WRAP,PN.START,PN.END,PN.I,PN.HERE,PN.NEXT,PN.PREV,PN.INS,PN.RM,PN.PUSHandPN.POPMlimited to setting the metronome speed to 25ms, addedM!to allow setting the metronome at unsupported speeds as low as 2msTO.TR.PforTO.TR.PULSE(plus all sub-commands) andTI.PRMforTI.PARAM(plus all sub-commands)TO.TR.INIT n,TO.CV.INIT n,TO.INIT x,TI.PARAM.INIT n,TI.IN.INIT n, andTI.INIT x:and;with a space, e.g.IF X : TR.PULSE 1becomesIF X: TR.PULSEANDandORnow work as boolean logic, rather than bitwise,XORis an alias forNEDIV 5 0now returns 0 instead of -1), previously the behaviour was undefined and would crash the simulatori2cbus crashes under highMtimes with external triggersP.IandPN.Ino longer set values longer than allowedVVworks correctly with negative valuesLV.CVandCY.CVTIandTOto the commands you already know)JF.GOD,JF.MODE,JF.NOTE,JF.RMODE,JF.RUN,JF.SHIFT,JF.TICK,JF.TR,JF.TUNE,JF.VOX,JF.VTRCV,CV.OFF,CV.SET,CV.SLEW,STATE,TR,TR.POL,TR.PULSE,TR.TIME,TR.TOGP.RMwill also return the value removedERopTR.TIMEof 0 will disable the pulseO.DIRrenamed toO.INC, it’s the value by whichOisincrementedwhen it is accessedIF,ELIF,ELSEstatus is reset on each script runFLIPwon’t interfere with the value ofOOop now returns it’s set valuebeforeupdating itselfDRUNKop now returns it’s set valuebeforeupdating itselfP.STARTandP.ENDwere set to 1 when set with too large values, now are set to 63CV.SLEWis correctly initialised to 1 for all outputs[and]not updating values in track modeSCRIPTop for scripted execution of other scripts!MUTEandUNMUTEops for disabling trigger inputMUTEtoggle per input (meta-shift-number)MUTEstatusSCALEop for scaling number from one range to anotherJIop just intonation helperSTATEop to read current state of input triggers 1-8 (low/high = 0/1)KILLop clears delays, stack, CV slews, pulsesKILLABSop absolute value, single argumentFLIPop variable which changes state (0/1) on each readAND,OR,XOROops:O.MIN,O.MAX,O.WRAP,O.DIRfor counter range controlDRUNKops:DRUNK.MIN,DRUNK.MAX,DRUNK.WRAPfor range controlTR.POLspecifies the polarity ofTR.PULSETR.PULSEretrigger behaviour now predictableEXPop now existsPandPNparse errorCVwrapping with negativeCV.OFFvaluesQ.AVGoverflow no moreP.PUSHwill fully fill a patternCV.SETfollowed by slewed CV in one command worksDEL 0no longer voids commandAlso know asPolish notation.↩