Teletype workflow, basics, and questions



putting something like CHAOS.R RAND 255 into a script will change the rule randomly upon triggering.

depending, you might get better results by putting CHAOS instead of CHAOS.R: effectively changing the initial value, rather than the rule.


(running off to try this, thank you!!) :bowing_man:


This is much less accurate. Z gets wrong velues. Try for instance to set it to 0. not sure why, though.


ah i see the difference. in my version once PARAM changes by more than 1000 it will update Z. it will not update it again until it changes by more than 1000 again.

in your version once PARAM value is changed by more than 1000 it will continue updating Z with PARAM on each metro. so yeah, for this you’d need to use an extra variable (or do what you did with storing a script number in a variable - that’s a cool trick!).


so i’ve read thru all of this thread (and understood some of it too!) but i have some maybe n00bish questions. right now i have the mannequin modules and little nerd + popcorn sequencer. is it reasonable to move towards the pictured set up and have teletype take on sequencer duties? if i were to do something such as tromsø’s s&h in to teletype would teletype be able to perform a precision adder type script? any critique of this potential set up is welcome although i don’t want to derail the thread from mainly the - how exactly does teletype work in a small system? question. Adding on to that – I’ve seen teletype used for generative works and the trigger-script aspect definitely lends itself to that I would imagine, but how do y’all feel about teletype being used in more “traditional” song structures? Is it too powerful to be worthwhile using in such a simplistic way? Not sure I want to do that, as my musical practice is being changed as I fall into the modular realm but I think the answer may help my general understanding! sorry for longwindedness <3


A recent favorite post which I’ve already quoted on another forum and have as my current desktop wallpaper:

I love that Teletype can do so many different things, but usually when I use it, it’s acting as a clock source and simple trigger sequencer. Sometimes the patch grows and it also throws out some modulation signals or additional synchronized triggers or maybe CV sequences, but it usually starts from that basic beginning.


yes! i love that thank you for that reminder, always good to remember that!

PS i’m dekemcculo on the other forum who asked about tromsø – u always come thru for me starthief, next time maybe I should just PM you :joy: <3


I almost exclusively use my TT for “simple” stuff. I think why I like it so much is I can have it do a couple of simple things or even change the simple thing it can do.


hi all!

i’m trying to use the parameter knob to change the probability that this voice of JF actually makes sound. i want the pattern to keep moving either way so it can return to its original shape when it’s fully CW. i don’t have much experience using several of the functions at play in this script, so i’m not sure what i’m doing wrong :man_shrugging: . a few other notes:

  • X is set to 4

  • i’m trying to use 999 as a rest. weirdly, it works most of the time but occasionally it’ll register as the note value and i’ll get a super high-pitched note, barely in audible range. if i’m doing something wrong in line 2, lmk!

      JF.VOX 1 N PN.NEXT 0 V X
      IF PN.HERE 999: JF.VOX 1 0 0 
      PROB PARAM: > X 3


I would try setting line JF on line 2 this way:

JF.VOX 1 N 0 V 0

Also, 999 is sometimes getting set as the N value in line 1 of your pattern. Maybe rework the script so that it is never set by getting the pattern value and then checking it. I like using negative numbers for rests so I can check them using GTE.

Here’s an idea where probability would be that we would or wouldn’t execute the rest of the script. I didn’t test this, so let me know how it goes. :sweat_smile:

ELSE: JF.VOX 1 N 0 V 0


thank you! love the negative values as rests. i wanted to change a few things:

  • i changed BREAK, which was stopping the script altogether, to just bring the voice’s voltage to 0 so that the sequence would continue uninterrupted, the voice just wouldn’t sound. more like adding rests than stopping the sequence.

  • changed the scale to 0-50

  • added another sequence that was inversely affected by PARAM, so that when one voice was mostly rests the other was mostly notes.

      PARAM.SCALE 0 50
      PROB PARAM: X 0
      A PN.NEXT 0
      IF GTE A 0: JF.VOX 1 N A V X
      ELSE: JF.VOX 1 N 0 V 0
      X 4
      PROB SUB 50 PARAM: Y 0
      B PN.NEXT 1
      IF GTE B 0: JF.VOX 2 N B V Y
      ELSE: JF.VOX 2 N 0 V 0 
      Y 4

i think i’m going to post a recording in the JT Explorations thread shortly!

edit: lines is the coolest place


That’s a really good idea! (or has given me a good idea if its not what you are getting at) You’re kind of cross-fading between sequences based on the probability that a value would come from one sequence or the other.


when setting up teletype to run slowly shifting percussion trigs, is it better to program everything into the pattern tracker, or is there some combination of EVERY, DEL, SKIP, etc that i can use to get a note to play only on certain intervals? e.g. mostly offbeats, such as within a given 16-beat bar, only on the second-to-last (15th) beat. or only every X, such as 17 or 31 beats across two 16-beat bars. and in some of those cases, TOSS a coin to decide the probability that it plays at all on that beat, or even if it’ll play on a small RRAND of possible beats/times.

the idea behind this teletype percussion, which backs a steadier/grounded set of 4/4-ish beats playing via meadowphysics, is continual tiny organic variations over time. i’m having some trouble doing it all in a reasonable amount of script lines; i’m wondering if it’s just better to program a basic pattern in the tracker, and then do the more complicated probability & time-shift logic in scripts.

if this was done in renoise, i’d use dozens of individual arbitrary-length bars+patterns to manually program in every little variation, but teletype needs a different approach. i also want to be continually surprised, just a little bit, by constrained random variation.


On Teletype I usually prefer building rhythms via logic (and maybe random) over entering them manually.

Here’s one I just threw together:

A % + 1 A 16; B 0
L 0 3: $ 1

T * 5 - 4 I
B + B * T BGET A I

Each beat has a different probability of triggering (0% to 50%) based on which bits are set in the beat count, with the weight more on least significant bits to spread out the pattern. You could change the “5” to change the overall probability as well as the weighting, or subtract a bit from B, or whatever :slight_smile:


Sounds like using the Euclidean rhythm operator with a shift on the index might help?


can someone help me understand how to use XOR with teletype?

my goal is to have scripts 1 + 2 pulsing outputs 1 + 2, but run a manual gate into script 3 to on/off XOR logic between the two scripts. the XOR result should determine whether or not output 2 fires a trigger.

haven’t used logic stuff in TT before. any help wrapping my head around it is much appreciated :slight_smile:


so a basic test:

IF XOR TR 1 1: TR.P 2

TR 2 will pulse if TR 1’s output is low. the problem i’m running into is that this script and TR 1 are being clocked at the same rate - so this script needs to be slightly delayed in order to catch TR 1 in a high state. as it is, when the XOR script is run seems to check in right before TR1 goes high, so it returns 0. to double check this i manually set TR 1 to 1 and ran the script - it worked as expected.

any ideas on how to do this without using a delay? i’d prefer to keep timing as solid as possible as this is part of a rhythm generator idea…


Sounds like you’re close. To avoid delaying the rhythm, maybe create a variable to set, delay, and reset in one of the trigger scripts. The delay will depend on how many milliseconds you can work with in your tempo and it can be longer than the pulse time. Here’s a rough idea (not at my teletype):

A 1
TR.P 1
DEL 40: A 0

Then check the A variable in the other script instead of the TR output.

The other thing that is interesting is that the XOR op is an alias for an equality test, which in this case really simplifies how you can look at it.


Thanks for the help. Unfortunately it’s not that variable A needs to stay at 1 longer, it’s that it needs to be set to 1 right before my second script checks it’s state. It seems that even though both the setting and the checking are happening simultaneously, the setting actually happens right after the check. Sorry if that’s confusing - having trouble finding the right way to word all this…


Sounds like it may be a race condition? Could you try calling the second script explicitly in the first script (with the script op?)