Clarifying question: The docs for I, J and K all say something like this:

each script gets its own J variable, so if you call
a script from another script you can still use and modify J without affecting the calling script.

This means that if I do something like J 0; SCRIPT 1, script 1’s J will be set to 0 as it runs, but if I alter it inside Script 1, the calling script won’t see any change, right?

no think of them as variables with scope specific to each script. in that example the J value of the calling script will be set to 0, and the J value of script 1 will be unaffected.

however, you are correct that if you modify the value of J in script 1, then J will still retain a value of 0 in the calling script.

essentially J and K add 20 additional variables, two per script(including METRO and INIT scripts). maybe an easier way to think of them is like so:

J-METRO, K-METRO //only accessible in the METRO script
J-INIT, K-INIT //only accessible in the INIT script
J1, K1 //only accessible in script 1
J2, K2 //only accessible in script 2
...
J8, K8 //only accessible in script 8
4 Likes

ahhhh, so only I functions like how I describe. Thanks for the clarification!

yes I think one of the ideas behind the ops was that you could for example call a script using a loop like so.

L 0 4: SCRIPT 2

then in script 2 store the I value into J or K, thus allowing you to use another loop.

J I
L 0 4: X ADD X J
3 Likes

So, I’ve got this running, but there is a problem :
If I move the PRM knob when not holding the grid button, the PRM is grabbed and Z is updated. I don’t want that. I want it to update only if I move the PRM knob after having pressed the grid button.
The reason is that the button(s) will have an action when I simply press them (like a “live mode”) and another action when i hold them (“edit value mode”).

STORE PRM WHEN HOLD

#1
M.ACT G.BTN.V 1 // toggles metro with the button
X + 7 G.BTN.V 1 // X is 7 when  the button is released, 8 when pressed

#2

#3

#4

#5

#6

#7
Z PRM // updates Z 

#8
Y ABS - Z PRM
IF GT Y 1000: TR.P 3; Z PRM // detects a knob move
IF GT Y 1000: X 7 // switches to script 7 to write values

#M
$ X // triggers either script 7 or script 8

#I
G.BTN 1 0 0 1 1 0 7 1 // the button
P.N 0; Z PRM
M 200

I managed to make it work. I needed an extra variable.

STORE PRM WHEN HOLD



#1
M.ACT G.BTN.V 1
A PRM
X + 7 G.BTN.V 1

#2

#3

#4

#5

#6

#7
A PRM
IF G.BTN.V 1: Z A

#8
Y ABS - A PRM
IF GT Y 1000: TR.P 3; A PRM
IF GT Y 1000: X 7

#M
$ X

#I
G.BTN 1 0 0 1 1 0 7 1
P.N 0; A PRM
M 200
3 Likes

if i correctly understand what you’re trying to do i think you could simplify the script:

#1
A PRM
M.ACT G.BTNV

#M
IF < ABS - A PRM 1000: BREAK
A PRM; TR.P 3
Z A

#I
G.BTN 1 0 0 1 1 0 7 1
M 200; M.ACT 0
4 Likes

I’m experimenting with the cellular automata algorithms, using @dan_derks’s very helpful script here

I’m interested in whether it’s possible to alter the CA rules dynamically, either based on a trigger or using the param knob. But can’t think of a way to change the Init script etc. Is there a way to do this?

Derks CA Recipe

#1
X CHAOS
Y SCALE 0 255 0 13 X
CV 1 N PN 0 Y

#M
$ 1
IF BGET Y _: TR.P 1 # fill the blank with any number 1-8
IF BGET Y _: TR.P 2 # fill the blank with another number, 1-8
Z SCALE 0 16383 0 2 PARAM # performative gesture
CV.OFF 1 V Z # jumps octaves on demand

#I
CHAOS.ALG 3
CHAOS.R 30
CHAOS 36
M 190

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.

4 Likes

(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!).

1 Like

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.

6 Likes

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

1 Like

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.

4 Likes

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:

PARAM.SCALE 1 100
PROB PARAM: BREAK
A PN.NEXT 0
IF GTE A 0: JF.VOX 1 N A V X
ELSE: JF.VOX 1 N 0 V 0
4 Likes

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

12 Likes

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.

1 Like