I made a grid-enabled teletype scene today that I call chordboard. It uses the N.C operator in teletype to create a performance-friendly interface for playing with chord progressions. It supports four different voices.
The top row buttons correspond to 16 memory locations. Each memory location stores a chord-type (one of the 12 that N.C offers), a root note and a root note octave.
Each TR and CV pair correspond to a voice.
The first voice always outputs the root note of the chord at the octave set by the left column of buttons along the bottom of the grid.
The second voice outputs a random note from the current chord when a trigger is received on input 5. This voice has its own octave buttons next to the root note octave buttons. The param knob also changes the range of the random notes from 1 octave at full ccw to 4 octaves at full cw.
The third voice will output a note from the current chord based on the external CV input when a trigger is received at input 6. In this track, I’m using a looping smooth random channel from Pamela’s New Workout that is 6 beats long so it phases a bit with the bars of the chord changes. Each octave of the chord spans 1v of CV, but it’s not quantizing the voltage itself, just using its value for lookups.
The fourth voice is played manually on a 4x4 grid of buttons on the bottom left corner of the grid. Each row corresponds to the notes of the chord at successive octaves.
I slapped on a really basic script for the 8th input to let me go through the first four memory slots, but I’m hoping to come up with something more flexible for looping sequences of the memory slots.
p.s. can someone remind me how you do the cool monospace indented formatting for teletype code?
Chordboard code (how do I format this the cool way?)
CHORDBOARD
#1
G.BTN.SW G.BTNI; A G.BTNX
G.BTN.SW + PN 0 A 16
G.BTN.SW + PN 1 A 32
G.BTN.SW + - 3 PN 2 A 64
C PN 1 A; B PN 0 A; D PN 2 A
CV 1 + V D N.C C B 0; TR.P 1
#2
G.BTN.SW G.BTNI; X G.GBTN.X1 1
PN 0 X G.BTNX; B G.BTNX
#3
G.BTN.SW G.BTNI; X G.GBTN.X1 1
PN 1 X G.BTNX; C G.BTNX
CV 1 + V D N PN 1 X; TR.P 1
#4
Z && EZ G.BTNV EZ G.GBTN.C 4
IF NZ Z: TR 4 0
IF EZ G.BTNV: BREAK
TR 4 1; X V - 7 G.BTNY
CV 4 + N.C C B G.BTNX X
#5
PARAM.SCALE 0 3; Z PARAM
X - 7 G.GBTN.Y2 7; Y RRAND 1 4
X + RRAND 0 Z X
CV 2 + V X N.C C B Y; TR.P 2
#6
IN.SCALE 0 40; X IN
Y V / X 4; Z % X 4
CV 3 + N.C C B Z Y; TR.P 3
#7
X ? == G.BTNX 5 2 3
Y - 7 G.BTNY; G.BTN.SW G.BTNI
PN X A Y
IF == X 2: D Y; TR.P 1
CV 1 + V D N.C C B 0
#8
X % + G.GBTN.I 1 0 1 4
G.BTN.PR X 1
#M
M.ACT 0
#I
G.GBX 1 0 0 0 1 1 1 3 1 16 1
G.GBX 2 16 0 1 1 1 1 3 2 12 1
G.GBX 3 32 0 2 1 1 1 3 3 12 1
G.GBX 4 48 0 4 1 1 0 3 4 4 4
G.GBX 5 64 5 4 1 1 1 3 7 1 4
G.GBX 7 80 7 4 1 1 1 3 7 1 4
#P
0 0 0 0
1 1 1 1
0 0 0 0
63 63 63 63
2 1 0 2
1 5 0 1
0 4 0 3
2 8 0 1
2 1 1 0
1 5 1 0
0 4 1 0
2 8 1 1
8 6 0 0
9 2 0 0
10 11 0 0
11 4 0 0
7 8 0 0
8 9 0 0
10 11 0 0
10 11 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
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
0100000000000000
0100000000000000
0000010000000000
0000000000000000
0001100000000000
0010000000000000
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
tt03s.txt (1.9 KB)