> teletype: grid # code exchange

@nonverbalpoetry just added a demo :slight_smile:

@scanner_darkly yeah that was my friends idea I think. She came up w a bunch of rlly interesting ways to implement the features we wanted

1 Like

Wow! Thanks a lot for sharing this. Harmonies in the rack is always a topic that attracts me a lot. And this is quite a smart solution. It teached me a lot, when I read through the scripts. One thing I stumbled on is, that the first note of each sequence is not being triggered. It is meant to be a 6-note-strum but there are only 5, in both directions, up and down. It“s maybe, because of the Index-Position in Script 7 and 8. It should reset to a point, before the sequence will start strumming, which would mean, that the first step in Tracker 0 should be unused. Maybe I am wrong!? Thanks

1 Like

Nice! yes, if that’s true that would be where the mistake is. The PN.I index likely needs to be set to before the first note. Though you shouldn’t have to free up the first step of Tracker 0. I believe you can set the index to start at -1 which would make the first note index 0 of patt 0.

1 Like

Aaah, ok. Thanks. I will try it… great!

1 Like

A little demo of the virtual Grid and Teletype at work in VCV Rack. Thanks a bunch to scanner_darkly and Michael Dewberry !

Please advise if there’s a better place for this post, I’m mostly a lurker here.

6 Likes

Hi there. I just noticed this grid specific codex topic. I posted this in the teletype code exchange yesterday but it’s even more relevant here: > teletype : code exchange - #776 by jroo

1 Like

Hey Everyone, thank you for all of the wonderful feedback on the last script I posted here as well as my YouTube tutorial videos. Really appreciate it!

It’s been a while since I have posted, but I think it’s about time that I share the source code for my latest teletype + grid sequencer. Be aware, the code is messy and still a work in progress, but the sequencer is super fun to play with.

For anyone looking to grab parts of this code to use in their own sequencers I think the only really worthwhile part is the way I use the parameter knob along with buttons on the grid to store values in the tracker (see #8). I found that really convenient both for the code and in use!

Enjoy!

#1
G.CLR; A % + A 1 5
G.LED A 1 3; B % + B 1 12
EVERY 2: C % + C 1 8
EVERY 5: D % + D 1 12
L 0 11: G.LED I 0 * 2 PN 0 I
G.LED B 2 3; SCRIPT 5

#2
IF ! G.BTN.V + 72 T: BREAK
Y + G.BTN.V + 60 T TOSS
IF EQ Y 2: BREAK
IF ! G.BTN.V + 99 X: BREAK
TR.PULSE X; SCRIPT 4
SCRIPT 3

#3
Y + G.BTN.V + 48 T TOSS
IF ! EQ Y 2: BREAK
Y / TIME 2; Q X
DEL Y: TR.PULSE Q

#4
Z * 12 X
Y + G.BTN.V + 36 T TOSS
IF EQ Y 2: Z + Z 12
SCRIPT 6

#5
G.LED C 3 3; G.LED D 4 3
T A; X 1; SCRIPT 2
T B; X 2; SCRIPT 2
EVERY 2: T C; X 3; SCRIPT 2
EVERY 5: T D; X 4; SCRIPT 2
TIME 0

#6
Y PN 0 T; J 0
IF TOSS: J * 4 G.BTN.V + 24 T
Y + Y J; J 0
IF TOSS: J * 6 G.BTN.V + 12 T
Y + Y J
SCRIPT 7

#7
IF TOSS: J * 1 G.BTN.V T
Y + Y J
CV X N.S + Z 4 1 Y

#8
K G.BTNX
J SCALE 0 16383 0 6 PARAM
PN 0 K J

#I
G.RST; PN.L 0 12
G.BTX 0 0 1 1 1 1 0 0 12 7
G.BTX 100 12 1 1 1 1 2 0 1 4
G.BTX 120 0 0 1 1 0 0 8 12 1
L 0 11: PN 0 I 0
12 Likes

Woah - that is super impressive! Very expressive and powerful in such concise code.

2 Likes

Thanks man, really appreciate it! It’s not pretty yet, but I will get it there once I finish up the interface part :slight_smile:

1 Like

Hi, I’m working on my first teletype script:

JF Omnichord

I bought a Suzuki Omnichord a month ago, but the delivery got stucked due to the pandemic lockdown in Shanghai :frowning: So I made this.
It’s not finished yet, the code is kinda messy and some function’s missing… but please try it and let me know how do you think!

JF omnichord.txt (1.4 KB)

update:

Just Omnichord V1

Add 4 more 7th chords. CV in to auto harp, or use PARAM knob. And TR&CV out! And a keyboard.

Just Omnichord.txt (1.7 KB)

34 Likes

Hi all,

I wanted to share my first grid based teletype script below. I don’t have a fancy name for it, but for now I call it PS GRID SEQUENCER (PS meaning pattern selectable). I use it more for generative music, so by changing pattern length, and patterns, one can quickly add quite a bit of variation into the sequence.

Of course, I welcome any feedback on how things can get optimized. I’ll share a second script shortly as well where I’d love to get some feedback on optimizing the script/code.

Cheers,

Daniel
tt31s.txt (2.3 KB)

PS GRID SEQUENCER

PATTERN SELECTABLE SEQ
16 STEPS OR LESS

TRACK 1: CV1/TR 1 VOICE
TRACK 2: CV2/TR2 VOICE
TRACK 3: TRIGSEQ TR 3 JFT 3 4
JF1/2: OFF-BEATS TRACK1/2

GRID ROW 1: SEQ INDEX
GRID ROW 2: CV1/TR1/JF TR 1
GRID ROW 3: CV2/TR2/JF TR 2
GRID ROW 4: TR 3/JF TR 3 4
JF 6: CLOCK

GRID ROW 6: FDR FOR P LENGTH

LOWER LEFT: RESET TRACKS 1-3
MIDDLE LOWER BTN: SEQ OFF ON
LOWER RIGHT: SELECT P 0-3



#1
J G.BTN.V + Z 16
IF J: CV 1 N Y; TR.P 1
ELSE: JF.TR 1 1
JF.TR 6 1

#2
J G.BTN.V + Z 32
IF J: CV 2 N Y; TR.P 2
ELSE: JF.TR 2 1

#3
G.BTN.L Z 10
J G.BTN.V + Z 48
IF J: JF.TR 3 1
IF J: TR.P 3
EVERY 8: JF.TR 4 1

#4
G.GBTN.L 5 4 4
G.BTN.L G.BTNI 12
D - G.BTNI 124
C PN.L D
G.FDR.N 0 - C 1

#5
J G.BTNI
IF EQ J 112: G.GBTN.V 1 0
IF EQ J 113: G.GBTN.V 2 0
IF EQ J 114: G.GBTN.V 3 0
$ 6

#6
IF EQ G.BTNY 1: G.BTN.V 112 1
IF EQ G.BTNY 2: G.BTN.V 113 1
IF EQ G.BTNY 3: G.BTN.V 114 1
ELSE: BREAK

#7
PN.L D + G.FDR.N 0 1
M.ACT G.BTN.V 119

#8
J 124
G.GBX 5 J 12 7 1 1 0 4 4 4 1
L 112 114: G.BTN.V I 1
G.FDR 0 0 5 16 1 0 4 7
G.BTN 119 8 7 1 1 1 4 7
G.BTN.V 119 1

#M
Z WRAP + Z 1 0 15; $ 1; $ 2
L 0 3: G.GBTN.L I 4 4; $ 3
Y PN.NEXT D; M 1000
$ 5

#I
G.GBX 0 0 0 0 1 1 1 4 0 16 1
G.GBX 1 16 0 1 1 1 1 4 0 16 1
G.GBX 2 32 0 2 1 1 1 4 0 16 1
G.GBX 3 48 0 3 1 1 1 4 0 16 1
$ 8; J 112
G.GBX 4 J 0 7 1 1 1 4 0 3 1

#P
13	15	14	10
1	1	1	1
0	0	0	0
15	15	15	15

12	14	17	19
0	2	0	2
15	14	17	19
24	26	29	31
15	14	17	19
19	21	24	26
24	26	29	31
27	2	5	7
12	14	17	19
24	26	29	31
12	14	17	19
24	26	29	31
12	14	17	19
24	26	29	31
12	14	17	19
19	21	24	26
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0

#G
0000000000000000
0100100100100010
0010001000010000
1001010001000100
0000000000000000
0000000000000000
0000000000000000
1110000100000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000

12	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0

11 Likes

Oh, what a coincidence! I also made a sequencer has something in common.

It’s a start/end location changeable 32-step sequencer with 4 banks and a earthsea style keyboard. You can play keyboard and the sequencer at the same time, easily write the note by holding the step or change tempo with param knob. And different sequencer playback mode in forward, backward, freeze or random.

It’s mostly going with Just Friends, but there are two tr/cv outs for other synth. Unfortunately it’s mono and only run one sequencer at a time for now. I thought it would be much cooler if I could make 4 banks into different separate sequencers with different tr/cv outs, but it’s too difficult for me to code.

I call it Drawer cause the left part looks like a school desk I used when I was a kid.

DRAWER (SEQ + KEY)

RIGHT 8X8:
EARTHSEA STYLE KEYBOARD

DESKTOP (UPPERLEFT 8X4)
1-32 STEP SEQ
HOLD AND PLAY A NOTE TO WRITE

DRAWER (MIDLEFT 1X4):
4 BANKS

DESKLEG (2X4):
UP 2: START/END LOCTION
HOLD AND CHOOSE THE STEP
2 COLUMNS 1X3: OCTAVE
UP / DEFAULT / DOWN

PLAYBACK (LOWERLEFT 1X4)
START/STOP
FORWARD/BACKWARD
FREEZE
RANDOM

SAVE YOUR BANK BY SAVING SCENE



#1
G.BTX 1 8 0 1 1 0 1 2 8 8
G.BTX 65 0 0 1 1 0 2 3 8 4
G.BTX 97 0 7 1 1 1 5 4 4 1
G.BTX 103 6 4 1 1 0 5 4 2 1
G.BTX 105 6 5 1 1 0 2 5 2 3
G.FDR 1 1 5 4 1 2 5 6

#2
A + - 23 * G.BTNY 5 - G.BTNX 8
IF G.BTN.V X: PN D B + A T
IF G.BTNV: JF.NOTE N + A T V 5
IF G.BTNV: TR.P 2
IF G.BTNV: CV 2 N + A T

#3
B - G.BTNI 65
IF G.BTN.V 103: PN.START D B
IF G.BTN.V 104: PN.END D B
X G.BTNI

#4
IF G.BTN.V 97: M.ACT 1
ELSE: M.ACT 0

#5
IF G.BTN.V 106: T + T 12
IF G.BTN.V 108: T 0
IF G.BTN.V 110: T - T 12
IF G.BTN.V 105: Z + Z 12
IF G.BTN.V 107: Z 0
IF G.BTN.V 109: Z - Z 12

#6
D G.FDRN

#7
IF G.BTN.V 100: C PN.RND D
ELIF G.BTN.V 99: PN.WRAP D 1
ELIF G.BTN.V 98: C PN.PREV D
ELSE: C PN.NEXT D
JF.NOTE N + C Z V 5

#8
G.BTN.L Y 2
Y + PN.I D 65
DEL + M 10: G.BTN.L Y 15

#M
M BPM PARAM
SCRIPT 7
SCRIPT 8
TR.P 1
PN.L D 32

#I
M.ACT 0
JF.MODE 1
SCRIPT 1
PARAM.SCALE 20 1000

#P
32	20	24	32
1	1	1	1
0	0	0	0
31	5	0	0

-12	0	0	0
-5	0	0	0
-7	0	0	0
4	0	0	0
2	0	0	0
-7	0	0	0
-5	0	0	0
7	0	0	0
-7	0	0	0
0	0	0	0
2	0	0	0
9	0	0	0
11	0	0	0
12	0	0	0
7	0	0	0
2	0	0	0
-8	0	0	0
-1	0	0	0
2	0	0	0
7	0	0	0
9	0	0	0
7	0	0	0
5	0	0	0
4	0	0	0
-10	0	0	0
-3	0	0	0
4	0	0	0
5	0	0	0
12	0	0	0
5	0	0	0
4	0	0	0
2	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0

#G
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000

0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0
0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0

Drawer (SEQ & KEY).txt (2.1 KB)

21 Likes

@daniel @Kiaaaaan - amazing work!! i love seeing such complex scripts - a proof you really can create an advanced UI in the space of a teletype scene.

added both to the codex

4 Likes

@scanner_darkly thanks so much! @Kiaaaaan I will have to check out your script/scene, looks very cool.

2 Likes

Hey friends, here’s my chord sequencer and arpeggiator called Minim.

I figured I’d take this opportunity to finally learn how to use GitHub (I’m decidedly not a developer) so the scene and further info is hosted there. Hopefully I did it right.

30 Likes

20 characters of awe.

1 Like

Can’t wait to try it. Your demo alone is quite amazing.

1 Like

This really is an extraordinary piece of design even if it weren’t somehow magically fit within the constraints of TT’s code space. Really fantastic and inspirational!

I did have a little worry about your use of stackcables to combine triggers though… I would be careful about recommending that in general because you’re also sending voltage to an output which may be risky depending on your trigger source. Really it would be safer to use a mixer for that purpose I think. (Would be good to hear from folk who know about the electronics than I do whether this is safe in the particular case of teletype’s trigger outs.)

1 Like

Thx! I shared your concern and inquired about this on a separate thread where I believe desolationjones confirmed that there are current-limiting resistors on the TT trigger outs.

FWIW, I believe the concern here is not actually with sending more voltage downstream as the voltage of two sources combined like this gets averaged. Rather, it’s the potential for current to flow to a module’s output when it may not be designed for such a thing.

2 Likes

amazing work! added to the codex

1 Like