yes, it will persist between power cycles, and if you’re getting something different you either have previous calibration doing something wrong, or you just need to recalibrate.

you can remove the current calibration data with IN.CAL.RESET op.

1 Like

Worked like a charm! Thank you :pray:

1 Like

Is there a way to set JF.VOX pitches without triggering them?

For context - I have an M script setup in which JF channels are each being “randomly” triggered. Script 1 is a set of JF.VOX pitches and script 2 is a different set of pitches. I’d like to be able to switch between those two sets of pitches without triggering a whole chord at once upon triggering the scripts.

I don’t believe so. I have two workarounds for this currently:

Set up a script that ‘simulates’ the randomness but is actually introducing a new pitch via a bunch of delayed JF pitch inputs (voice specified) like this:

DEL M MULT 1: JF.VOX 1.....
DEL M MULT 2: JF.VOX 2.....
DEL M MULT 3: JF.VOX 3.....
etc.

Can’t recall if this ends up being too many letters without using vars for either delay time or the other parts (depends on how many chars your pitch + velocity scripts are… using vars for those I’ve found to be good hygiene anyway, though). If you put the vars in the script itself you can use a $ # command to trigger another script containing any voices that don’t make the first six-line cut.

The other way is to use sustain mode and six channels of VCAs…

Also there’s a good chance you’re not actually using all six outputs of JF anyway (unless you’re in cycle mode), in which case both things are more doable (the first only requiring a single script with fewer lines, and the second requiring fewer VCA channels).

I’m only ~4 months deep into a module some folks round here have had 4 + years on, so maybe someone’ll chime in with another solution :slight_smile:

1 Like

@srogers91 This is an example of using patterns to store chord intervals. Here there are five notes per chord in five consecutive indexes on pattern 0. The first chord is indexes 0-4, the second is indexes 7-11, and the third is indexes 14-18.

In the metro script the variable X is used to set which pattern index is assigned as the pitch of each JF.VOX command:

A TOSS; B TOSS; C TOSS
IF A: JF.VOX 1 P X V 4
ELSE: JF.VOX 2 P + X 1 V 4
IF B: JF.VOX 3 P + X 2 V 4
ELSE: JF.VOX 4 P + X 3 V 4
IF C: JF.VOX 5 P + X 4 V 4

X is assigning JF.VOX 1 with the starting pitch of a chord, with each subsequent JF.VOX being assigned each subsequent pitch entered into the pattern. In Scripts 1, 2, and 3 variable X is set to either 0, 7, or 14 to correspond to the start point of each chord entered in the pattern. You can see variable X change with the chords from 0 to 7 to 14 on the live screen later in the video; apologies for my camera not focusing very well.

I used variables A, B, and C with the IF/ELSE ops for the easiest way to get something random that wasn’t a huge flurry of notes, since I wasn’t sure how you were using random in your case.

Not super obvious in my example since my metro rate was pretty fast (doh), but this method will allow you set the pitch for JF.VOX for the next time it’s called without calling it directly. Hope this helps!

3 Likes

@yams I definitely don’t want to tie up 4-6 VCAs, this is worth looking into for sure!

@kbit my first thought was somehow using the pattern tracker but I couldn’t figure out the logistics. I’ll have to try this out with a slower speed but my only concern is not having the separation between each notes, i.e. that script triggers groups of 2-3 notes at each pulse. Regardless this is really cool and I’m gonna explore it further.

This is what I was doing at firs, with JF in synth mode, transient/sound:

M:
DEL RND 6000: JF.TR 1 1
DEL RND 6000: JF.TR 2 1
DEL RND 6000: JF.TR 3 1
DEL RND 6000: JF.TR 4 1

And each numbered script is a different set of JF.VOX pitches. The only thing I want to avoid is triggering the entire chord upon triggering each script. And I’m typing this I answered my own question with a stupidly obvious solution…

Put a DEL RND X: pre before each JF.VOX voice!

1 Like

What is the easiest way to store and retrieve multiple integers from an integer? Should I just use the 1’s place, 10’s place, etc, or is there a trick?

(Yes, I am trying to double my pattern storage…)

We were just talking about this over in the TT alternate firmware thread. Using decimal places, like you say, along with the / and % ops is one way to do it.

1 Like

Nice, that works well for retrieval! Storage seems trickier but doable. Will have to first retrieve the unmodified portion of the number and then add it to the new number.

hi everybody, i got a newbie question. i just got my TT, and running the latest firmware 3.1, been trying the teletype studies1-5, i’m starting to understand it a little better so far. now i’m trying to do just type studies 1.
i followed all the scripts on the just type studies 1. i think it did what it supposed to do, but what i didn’t get is the turtle ops, when i look at the tracker mode, the pointer/cursor is just static at one place, didn’t reflect the pitch movement, although i do get random pitch out on cv 1 out (based on the script) to my osc.
i did compare when trying normal pattern, from teletype studies 5, i did get pointer/cursor movement. i think it has something to do with the turtle ops, but still have no clue what to do about it…
do i miss something obvious?
here’s i attached the script from the JT studies 1

#1
EVERY 3: JF.TR 1 1
EVERY 5: JF.TR 3 1
EVERY 4: JF.TR 4 1
EVERY 2: JF.TR 5 1
EVERY 7: JF.TR 6 1
EVERY 2: JF.TR 0 0

#M
@STEP; @DIR RRAND -180 180
CV 1 N @; SCRIPT 1
EVERY 30: CV 2 V RAND 10

#I
M 120
@F 0 0 4 4; @SPEED 300
CV.SLEW 2 3000

#P
4 16 19 11
7 7 0 12
0 12 11 16
11 7 4 23
19 23 7 19

thanks

1 Like

By the way, the same happens to me when I use the P.RND or PN.RND commands. No cursor moving on the tracker. I guess it’s normal but it would be nice to have feedback from the more experienced users.

thanks

1 Like

On the pattern/tracker view, if you press SHIFT + 2 (the @ key) this will toggle visibility of the turtle cursor (a < next to the pattern cell). This is mentioned in the manual in the key reference for pattern mode, and all the way at the bottom of the first on-module help page, but should probably be mentioned in the Turtle section as well as the studies.

P.RND grabs a random pattern value from between P.START and P.END and returns it, it does not change the position of the “read head” for the pattern. Moving the read head to a random position seems like a useful separate op, possibly this could be called P.I.RND? Equivalent to P.I RRAND P.START P.END I suppose. The read head is currently only modified by P.NEXT, P.PREV, and P.I ops.

5 Likes

Thanks @csboling. Got it!

1 Like

ah okay thanks so much for your response! :pray:t4:

1 Like

Hi all,

I’ve been eyeing up the Teletype for a minute and a few used modules have shown up on Reverb. All seem to be the green pcb version. Are there any major arguments against this version of the module? I’ve been digging through old discussions about the hardware here and it seems that the major difference between the green and black pcb versions are the number of i2c connections available without the use of a “backpack” and the amount of power that can be drawn through the module (powering a grids).

At present I would only be connecting the Teletype to Just Friends, potentially adding an Ansible down the line.

Thanks!

you’ll be fine with the green pcb version, the i2c connections is more for convenience than anything. And if you run out, there’s always solutions for it.

The usb powering on the black pcb is still not ideal anyway, as it can generate noise. No matter the teletype it’s usually better to use an offworld/splitter when using the grid.

2 Likes

One difference that might be worth mentioning is that the newer version can apparently handle keyboards with backlighting (lots of mechanical keyboards have backlighting and it’s a bit harder to find one without), whereas the older version tends to crash with backlighting on.

That obviously doesn’t change anything if you’re not planning on using anything else than the default keyboard :slight_smile:.

1 Like

Hello all! A quick question as I can’t seem to solve this on my end:

Is there a way how to set a vertical fader that has zero value at the bottom, and the maximum value at the top? I can’t seem to find a way to work this out using the command

G.FDR id x y w h type level script

Thank you for your help!

that’s how it should work for faders by default, zero value is at the bottom, max value is at the top (assuming you’re using G.FDR.N to get values, with G.FDR.V you can flip it by setting the fader range appropriately).

in general, for both fine and coarse faders G.FDR.V / G.FDRV uses the range defined with G.GFDR.RN op (it’s shared by all faders within the specified group). this is convenient when you want to use fader values for a specific range, this way you don’t have to scale it each time. by default this range is 0…16383.

G.FDR.N / G.FDRN also return a fader value but the range is defined as:

  • for coarse faders it’s 0…width/height-1 (so if you have a 5 button wide fader the range will be 0…4)
  • for fine faders it’s 0…L where L is the maximum level set when you define a fader with G.FDR.
2 Likes

Sorry to be sophomoric but… Ouch?!?

4 Likes