Teletype: creating gate patterns

I know the idea behind the Teletype is mostly to be a tool for algorithmic composition, but it seems also to be very cool to use it for very deterministic, linear music.
We’ve been using it a lot for a new piece we are working on, which at its core is a counterpoint-based composition for modular synth. The Teletype proved to be a great tool, since it let’s us play very freely with pitches, beyond the tempered scale (with only some minor workarounds needed).
The only thing we are struggling with is how to actually trigger these pitches. Most of the pitch-related info is in a set of patterns and we used the metro as a central means to trigger it, but that seems to be very limited.
The thing is, we have some odd measured and varying note durations, and the composition is not really something you can reduce down to a loop. So currently the plan is to trigger the Teletype using MIDI gates coming from a DAW… but if anybody has a better suggestion (one that can be done completely in the modular would be great) I’d be really interested to know about it!

1 Like

perhaps i’m not totally clear what you’re going for, but one approach would be to keep a beat timer (T or otherwise) that is like a MIDI timeline, and then check values of T (with if eq) for particular marker points where other scripts get triggered that modulate the system parameters.

i could write up an example script if this is the right direction?

1 Like

you could use one of the pattern banks to specify your note duration, something like this:

DEL PN 0 I: TR 1 0```

(not near tt right now so not sure if the above notation will actually work but you get the idea)

you could dedicate one pattern bank to chance: `PROB PN 1 I: TR 1 1` or use `DEL PN` to delay notes themselves, or use a counter variable and only trigger a note when the counter reaches the value specified in the pattern.

alternatively, you could have note generation in one script and then call it from metro but add some conditions which could include trigger inputs - say, you could program it to execute the script only when both trigger 1 & 2 are high. or you could just call that script from other trigger scripts, and then use, say, a clock div/mult module with multiple outputs going into teletype. then you can add chance / play with muting unmuting trigger inputs etc.

I had the feeling I was expressing myself in a weird way. Let me try again.
So the parts we’re interested in using the Teletype for are 2-voice or 4-voice canons.
Our first attempt (which can be seen here https://youtu.be/SQvnYAt4L5Y?t=4m30s) was using the metro script to trigger the values stored in a pattern, at a regular interval, so basically each note had the same length, which resulted in a kind of monotonous rhythm (though talking about rhythm in such a slow paced droney piece is a bit odd).
So what we’re looking into right now is a way to define the note length for each note, for each voice.

Didn’t think about the delays, that could work indeed! Another thing I just thought of is to use one bank as a trigger pattern 0 = no trigger pulse 1 = trigger pulse, and another one for the pulse length. But this would mean we can only sequence one voice.

Though I think that maybe we are trying to use the Teletype for something it wasn’t designed for, or at least something that it’s not it’s strength… and by doing so, we’re missing out using it for stuff that could be a lot more interesting.

but one approach would be to keep a beat timer (T or otherwise) that is like a MIDI timeline, and then check values of T (with if eq) for particular marker points where other scripts get triggered that modulate the system parameters.

This is similar to how Overtone handles timed events with the at command. https://github.com/overtone/overtone/wiki/Metronome-and-sequencing

Exceprt example from that page,
(at (nome beat) (sound))

nome is the metronome. That line does pretty much what it says, at this particular beat, play this sound.

2 Likes

Oh and and somehow the reply to this part got lost. This should actually do the trick! Let me see if I can do that on my Teletype here, and I’ll report back. Thanks a lot for the help on this one!

I did try out several things. I did try different approaches including using T (as suggested by @tehn) but didn’t find a working solution. I think I did explain my problem very badly btw, so sorry about that.
Anyway it’s been a very good way to learn more about the TT and memorize some of the opcodes, so it’s been great!
I did come up with a nice solution at the end, and it’s one that will let you use all 4 pattern banks, albeit halving the number of steps.
The trick is this: you use all odd numbers for note values and all even ones for durations, then you use a variable that get’s decreased with each trigger and set to the duration value in the pattern each time a new note is played. When it reaches zero the TT advances to the next note.
It’s very simple and I’m sure it’s already been done by others a number of time… but if not, I’m more than happy to post the scripts here.

3 Likes

Sounds cool, would love to see the scripts!

sure! I’ll add some comments to make it more obvious, note that I’m using the numbers instead of the letters for TR outputs

I
A 1000

(this just sets the initial value for the variable, which influences the overall gate length based on the step length)

1
P.N 0
IF LT Y 0 : CV 1 N P.NEXT
TR.TIME 1 MUL A P ADD P.I 1
IF LT Y 0 : TR.PULSE 1
IF LT Y 0 : Y P.NEXT
Y SUB Y 1

so what happens is that for most of the lines the TT checks if Y is less than zero and at the end decreases the value by one. if it reaches a value below zero it first reads the next value (note) from the array, then sets the trigger time (ok it does this every time), then sends out a pulse and lastly reads the next value from the array (note length) which determines how many loops the script will count down until the whole thing will be done again.
So it basically always reads two lines from the pattern then waits until Y is less than zero and so son.

Some issues and concerns:

  • First of all there’s probably a more efficent way to do this… but I’m still learning it.
  • Second, I wish there was a better way to write many statements that have to be carried out inside of an IF loop (I think v2 should solve that, doesn’t it?)
  • Is there something like “less or equal”? If the script is written like this you’ll need a value of 0 in the pattern to produce a gate that is one unit long.
4 Likes