(Teletype) 2.2 Release


You could rename INIT to INIT.ALL to make it more explicit.

Also would INIT.PN instead of INIT.P better in better keeping with the other pattern OPs? You could keep INIT.P but make it work in the same way as other P.* OPs (i.e. use the PN value).

1 Like


I flashed Alpha 10 last night and indeed the innocent looking INIT wiped out the entire scene with no warning. Also, strangely it had the side effect of flipping the PARAM scaling into the negative range, 0 on all the way CCW and -16384 on all the way CW.



The destructiveness is especially scary because my
intuition was that ‘init’ would run the ‘I’ script, initializing the scene.

1 Like


should’ve read the description more carefully… i imagined INIT just initializing the teletype state. i don’t think clearing scripts should be a part of that (and it probably deserves a keyboard shortcut rather than an op, i can’t imagine a scene which would actually use it. a self destructing scene? :).

the purpose that i see for the op is initializing the teletype state to what it is when you just turn it on. imagine a scene that relies on A having the default value of 1. if i don’t change this value i don’t have to explicitly set it in the I script. the problem is if i switch to a different scene that does change the value, then i either have to remember to change it back manually, or it must be initialized in I.

so to me executing INIT would be similar to loading a scene on a teletype that was just turned on. using the example above, after i switch to my first scene all i have to do is execute INIT and it should work as expected. as a matter of fact, i would probably even put INIT as the first op in my I script.

i would also exclude clearing patterns as patterns are expected to be persisted between saves and scene switching. still would be handy to have a dedicated op to clear patterns…



i’m going to kindly disagree.

typing INIT and pushing enter is not the same as a mistaken hotkey. if you accidentally type INIT, you’ll probably only do it once.

but @sam’s suggestion for INIT.ALL is a good one, to add more typing to convey intention.



We could also make the syntax: INIT REALLY or INIT SURE. That would guard it pretty well, forcing users to read the docs.

I’ll look in to this, thanks!

@cmcavoy or @tehn, could you move the last few posts re: INIT to the init thread? Thanks!



Beta 1

teletype.zip (125.0 KB)


  • Fixed INIT failing to initialize the calibration and scale data


Hey there,
just a little thing: Is it possible to execute 2 or more instructions as a result of a single IF?
for example IF EZ X : TR.PULSE A and SCRIPT 2

thanks bye



Yes, as long as they fit on the same line: use a semicolon:




Oh nice!
thanks man :smile: D

1 Like


Not sure where to post this; I didn’t want to start a new thread.
Is there any interest in having a lookup table for converting note numbers to ratios? Essentially something that spits out 2**(n/12). for instance RATIO 12 will get you 2.
Since most ratios are fractional, the result should perhaps be something like 149 for 1.49.
Alternatively, is there a trick to bypass the floating point limitation and compute 2**(n/12) in Teletype?

1 Like


I’d absolutely love a few operators to multiply and divide frequency ratios against each other and convert to volts back and forth. This would be incredibly useful for taking advantage of Just Type’s JF.TUNE operator (which allows custom frequency ratios at each output), and for taking a very different approach at harmony that has deeper roots in the science of auditory perception. I’ve experimented with that way of thinking of harmony in patching and in creating scales and chords and it has shown to be a really powerful tool — and it extends past the 12-tone scale into microtonal territories.

1 Like


Maybe if we ask nicely one of the devs will implement it.



The JI operator was fixed, it’s currently in master. I think it’ll be included in 2.2 as a bug fix. It does what you’re asking for! I think!


FM synthesis

This is great! Tons of ideas flooding my mind. Really can’t wait to get my hands Teletype + Grids. I’m realizing this pair makes the exact open-ended composition instrument I’ve been yearning for for years.



If I understand correctly, this automatically shifts down values within the range of an octave? Would it be possible to get a non-wraping operator as well, where you’d get the fraction you are asking for rather than that fraction divided by 2^n? I see valid use cases for both variants: it’s sometimes easier to deal with the unaltered ratio, ie when generating an offset for a fm-modulating oscillator (where you might want something like a 7:1 ratio), and sometimes easier with the octave-down version, ie when defining scales.



I forgot to mention that I merged the current master into Beta 1, so it has access to the fixed JI op.

1 Like


Really nice update, I ran the beta firmware at my live performance last weekend without any issues except for some funny MUTE behavior that I can’t currently replicate due to having the modular totally taken apart for renovations.

I had the following in script 7:


And in script 6:


And in script 1, which was being fired by a master clock (not metro), I had:


In other words, script 3 was being called by script 1, not an outside trigger.

These were triggered by some debounced switches.

Toggling script 1 mute works as expected, but the display does not update (bottom left script number is not greyed out) until I leave the script edit screen and come back (i.e. use [ ] )

Toggling script 3 didn’t have any effect, I figured out another way to handle it.

Again, thanks so much to all who are making this so much cooler than it already was!

1 Like


Ah! I know what this is. When I re-implemented script muting via keystroke, I forgot to implement the shading for the operator. Easy fix. Thanks! :+1:

I’m not sure that the toggle should apply to calls to SCRIPT. @tehn?


1 Like


my original intention for MUTE was to “mute” incoming triggers.

i’m also not sure about MUTE applying to SCRIPT calls. ie, you could mute script 1, then use input 1 polled via STATE and the script 1 as an extension that could be called by other scripts.

seems a better solution to use conditionals for SCRIPT muting. or extend MUTE so that -1 (or something) means mute the trigger and SCRIPT