How would I write a script to send the midi notes and triggers Im playing out of CV 1 and TR 1 of the teleype so I can sequence another voice in my case? I have it working great controlling just friends, but would also like to play my mangrove as well, in unison is fine. Unsure how to word the script, any help is appreciated!

to send incoming MIDI notes to just friends over i2c you would do something like this:

#I
MI.$ 1 1

#1
L 1 MI.NL: JF.NOTE MI.NV MI.VV

since just friends supports 6 voice polyphony, this script will use all available voices. it also doesn’t process note off messages, since you would need to implement voice allocation in your script. in this case you control the note length on just friends itself.

for controlling a single voice via CV/TR you could ignore multiple notes played at once and always output the latest note played. you could do it by adding this line to script 1:

CV 1 MI.LNV; TR.P 1

in this case you also ignore note off messages, and note length is controlled by the pulse length of trigger 1 (set with TR.TIME op). if you want to use note off messages, add this line to the init script:

MI.$ 2 2

this will assign note off events to script 2. then instead of the line above, use this line in script 1:

CV 1 MI.LNV; TR 1 1

and this line in script 2:

TR 1 0

here is the complete script:

#I
MI.$ 1 1
MI.$ 2 2

#1
L 1 MI.NL: JF.NOTE MI.NV MI.VV
CV 1 MI.LNV; TR 1 1

#2
TR 1 0

you could also use CV 2 for velocity. modify script 1 like this (2nd line added):

#1
L 1 MI.NL: JF.NOTE MI.NV MI.VV
CV 2 MI.LVV
CV 1 MI.LNV; TR 1 1
1 Like

Thank you for the thorough explanation @scanner_darkly that is exactly what I needed!
Much Appreciated. Have tested Op 1 and Op Z, both work great. Hermod works aswell. Still trying to figure out how to use elektron devices, specifically digitakt.

people reported having issues with elektron samples as well. unfortunately, not all USB MIDI devices will work with teletype.

1 Like

I can confirm that the sensel morph works. And I wrote a small arpeggiator:

#I
MI.$ 1 1; MI.$ 2 1

#1
L 1 MI.NL: PN 0 MI.N 1
L 1 MI.NL: PN 0 MI.O 0

#2
L 0 63: PN.POP 1
L 0 63: $ 3
CV 1 N PN.NEXT 1
IF PN.MAX 0: TR.P 1

#3
IF PN 0 I: PN.PUSH 1 I

script 1 updates a bitset in pattern 0 with note on/off events.
script 2 & 3 transform the bitset to a sequence an plays it if at least one bit is set in pattern 0.

I wonder if it could be done with 2 scripts or one pattern.

is there a typo in the init script? i think you mean it to be MI.$ 1 1; MI.$ 2 1 (assign both note on and note off events to script 1).

not sure why you need to use pattern bank 1? if i understand correctly, you want to cycle through the notes that are pressed, correct? and you’re using trigger 2 as the arpeggiator clock?

Yes, the init script had a typo.

not sure why you need to use pattern bank 1? if i understand correctly, you want to cycle through the notes that are pressed, correct? and you’re using trigger 2 as the arpeggiator clock?

Yes, that is what I try to do.
Let’s say midi notes 2 3 and 7 a currently pressed, pattern 0 would look like this:
0 0 1 1 0 0 0 1 ...
The first 2 lines of script 2 transform that to pattern 1 which results in
2 3 7

I did not find a way to jump to the next 1 in pattern 0 (something like W EZ PN.NEXT 0: K PN.I is an infinite loop and slows down teletype extremely).
Storing only the second pattern would be even nicer for further manipulations.

ah i see. yeah, i don’t think you could copy non zero elements to a different bank in one script, you need a loop and a condition and you can’t combine both on one line. but you could implement it with one pattern bank: set the pattern length to 64 in the init script:

P.L 64

and change your scripts 2&3 to this:

#2
L 1 P.L: SCRIPT 3
IF P.HERE: CV 1 N P.HERE
IF P.HERE: TR.P 1
P.NEXT

#3
IF EZ P.HERE: P.NEXT

script 2 starts by finding the next non zero element by calling script 3 up to (length - 1) times (we don’t need to search more as we’ll end up on the same step). if we do find a non zero step, we set the CV and output a trigger and move to the next step.

Thanks a lot!

Second line of your script 2 should be P.I instead of P.HERE.

Also your script 3 can be added to script 1 (as it does nothing if it is also triggered by midi note events and the midi instructions do nothing if triggered by script 2)

final version with 2 scripts and 1 pattern would be

MI.$ 1 1; MI.$ 2 1
P.L 64

#1
L 1 MI.NL: P MI.N 1
L 1 MI.NL: P MI.O 0
IF EZ P.HERE: P.NEXT

#2
L 1 P.L: $ 1
IF P.HERE: CV 1 N P.I
IF P.HERE: TR.P 1
P.NEXT

With midi controller with less then 16 keys / pads, the same idea can be done with using variables and BGET / BCLR instead of a pattern.