You are very welcome! :smile:

order placed, just joined the teletype party

2 Likes

Just FYI - After I printing these (TT_commands_card_1.3.pdf, TT_keys_card_1.2.pdf) today I’ve noticed 2 things which seem to have been changed since the pdfs were made - S is now Q, right? And in Global the mod key to execute scripts is WIN, rather than CTRL I think…

Q TIME
M Q.AVG
TIME 0

This is great. Simple and very useful. I just used it to set the (variable) slew on a patch clocked externally and not otherwise using M. Thanks!

@lloydcole thank you for the note: you are right it should be WIN rather than CTRL in the keys reference sheet. I made the update, and enclosed is the most current version of both sheets.
(The command sheet also needed a slight update to include the ā€œIIā€ for all the II commands, as they all require that syntax in use.)

But I am unclear on what you mean by:

I don’t really see the change there. Unless I am missing something…?

TT_keys_card_1.4.pdf (815.4 KB)
TT_commands_card_1.4.pdf (888.2 KB)

in some early doc S was first called Q. this was a misnomer, because it’s a stack, not a queue. S is a PRE. Q is a special variable. so the docs are correct as is. much will be illuminated in the next studies.

thanks @laborcamp for the reference updates! i’ll get the links updated everywhere.

OK, so I got it the wrong way around with S and Q. Apologies. I’ve been trying to absorb a lot the last 2 days. maybe more than I was capable of…

And just to be clear for my tired old brain - the commands would not be executed again until the first metro trigger after the next TR 1?

Indeed. Anything added to the Stack would wait until the next S.ALL command is fired. So in the above example, TR 1 would add commands to the stack which would be executed on the next METRO tick.

You can do many more interesting things by using S.PUSH and S.POP, but I’ll leave that to @tehn to explain!

Thanks. So when commands in the stack are executed, they are immediately removed from the stack? Or is S. CLR required each time the slate needs to be wiped clean? I’m not sure I understand the value of S.POP, if the command remains on the stack after execution.
I don’t see S.PUSH anywhere in the documentation I have…

S.ALL does remove everything from the stack. it executes them. S.CLR removes without execute.

there is no S.PUSH. just the pre S does a ā€œpushā€ which puts the command on the stack.

S.POP executes (and removes) the most recently added command.

so a stack is LIFO-- last in, first out. https://en.wikipedia.org/wiki/Stack_(abstract_data_type)

i’ll be covering this stuff in a future tt study!

Perfect, so stacks complement Qs, which are first in first out, like ASRs.
What I’m trying to figure out, right now, is which to use - Q, Stack or Pattern - for particular scenarios.
Using P.PUSH adds to the length of the sequence, right, so If I set P.L 16 and execute P.PUSH 17 times the pattern will become 17 steps? Is there a way I can prevent that, or would I need to work with a Q instead? the reason I ask is I’d like to create a dynamic pattern which changes as I play (keyboard eg) and would give me access to the last n notes I had played. With Q I can do this but only access the head of the Q or the average of the Q, right?
Maybe instead of P.PUSH I can use P.INS and create a variable that counts from 1 to n and then resets to 1?
If my value came from IN I could use something like -
1:
P.INS IN X

Would that work?

Not sure the protocol here, replying to myself… but I have read more and see that P.INS will move the later values down, effectively increasing the pattern length again.

But what about -

I:
P.N 0
P.L 16

1:
X DIV 1638 IN
P.INS X 1
P.L 16

Wouldn’t this give me a 16 step shift register with access to all 16 values (after I’d played 16 notes) at any one time?

I’m trying to find a method to store input voltages.

If input source is correctly calibrated v/oct then
X DIV IN 137
CV 1 X

CV1 output should equal IN Input ??

I have not been able to get this to work.
I have seen nothing patched into IN and yet IN showing 48 - 64 (if 137 is a semitone, this is almost a quarter tone) depending upon when I test. I’m guessing this is a typical DC offset…

I ended up yielding outputs matching inputs with X DIV IN 135… trial an error…

What I’d like to understand is, when I’m setting CV 1 to X, and X is outputting a number derived from a calculation like the one above, are the outputted voltages reflecting a rounding of values to effectively quantizing the output voltage to a semitone scale?

Teletype as a tuning reference.

I feel like I’m monopololizing this thread, so please let me know if these types of posts are unwanted… and I’ll happily keep ideas to myself. But I’m working 12 hour days right now trying to assemble a system for some shows I must play soon and hoping to integrate Teletype, so spending maybe 6 hours a day trying to get to know it…

So here’s the latest maybe blindingly obvious idea -

I was testing the Teletype voltage outputs for accuracy with my Fluke MM just now when it occurred to me that the Teletype could happily replace my precision adder as a voltage generator to tune oscillators. Fluke says Teletype is accurate to +/- 003v which is plenty accurate enough for human ear.

This can be done in LIVE mode or if you can spare a scene -

I:
CV 1 VV 75
CV 2 VV 175
CV 3 VV 275
CV 4 VV 475

Obviously you could use any voltages you like. I like to tune to As because the multimeter Hz readout is whole numbers - 55, 110, 220, 440, etc

2 Likes

[quote=ā€œlloydcole, post:376, topic:596, full:trueā€]
I feel like I’m monopololizing this thread, so please let me know if these types of posts are unwanted… [/quote]

oh not at all, if anything i feel bad about not participating more, really need to find the time to post some code snippets covering some basic functions replicated with teletype as well as some more interesting ideas.

so if i understand correctly for your 16 note shift register what you want is to keep reading from the CV in and populating the pattern so that it always contains the last 16 notes? so maybe something like this:

I:

P.WRAP 1
P.L 16

setting the pattern length to 16 and making sure P.NEXT will wrap.

1:

P P.I IN

trigger #1 will record the CV in to where the pattern index currently points - which means replacing the last note played.

2:

CV A P.NEXT

trigger #2 increments the index and then outputs the current pattern value to CV A

basically, you don’t insert new values but rather use the absolute index instead. this can also be tweaked further using variables depending on whether you want your ā€˜read’ and ā€˜record’ heads to be independent or not.

as for IN showing some variations in voltage i think there is always a bit of noise on the input, so might need to be quantized.

So QT IN 137 for semitones?

just a heads up that you can stop thinking about these magic numbers (137) by just using N 1 instead!

QT IN N 1

Duh!
Of course. I was only thinking N made sense for output.
I just made it work though, with
X DIV QT IN 137 137
But that would have been quicker with
X DIV QT IN N1 N1

So if I wanted only octaves and devil notes I’d use QT N6 … ?

certainly that would work!