> teletype: grid # code exchange

teletype

#102

here is the combined daemon + rhythmicon scene: daemonrhythm.txt (2.0 KB)

i’ve made some modifications to @ghost’s daemon, there are now 6 rows for chords and all 6 voices are supported. the bottom row is the rhythmicon part, if you press any button here it’ll play whatever is in that column with the frequency determined by the column number (in ratios to the main clock the rightmost column is 16/16, moving to the left 15/16, 14/16 etc - i have to correct myself in that it doesn’t actually work as the original rhythmicon which used 1/2, 1/3 etc - it’s difficult to implement this on teletype). the fun part is that the sequencer and the rhythmicon can be played either at the same time or separately.

alternatively instead of using rhythmicon you can switch the bottom row to work as transposition. this is controlled by the rightmost button in row 7 (next to the chord edit button). i had to reduce the total number of chords to 8 in order to accommodate the new controls.

since this scene uses just type there was no need to use CV and trigger outputs, so instead i used them for:

  • trigger 1 outputs sequencer clock
  • trigger 2 outputs sequencer reset
  • trigger 3 flips on sequencer reset
  • CV 1 goes from 0 to 5V following the current sequencer step
  • CV 2 generates a new random value between 0 and 5V on each sequencer reset
  • CV 3 generates a random voltage whenever the bottom row is pressed
  • CV 4 generates 0…5V voltage proportional to the button pressed in the bottom row

here is a quick demo:

and now i have to work on another programming assignment for an interview. implementing a grocery store cash register :roll_eyes:


#103

A huge thanks for do this - looks and sounds amazing! Thankyou so much :slight_smile:


#104

wait till you see the cash register! :joy:


#105

Do you think it’ll make v2.3 or is it going into 2.4? :slight_smile:


#106

this will require a whole new alternative firmware. it’ll keep track of how many modules you have in the system and provide you with an estimate of how much you’d save if you were to use a laptop instead! and an oblique strategy*.

*this last part would be kinda neat actually.


#107

I wonder, did anyone every get this working on a Txo?


#108

it’s pretty easy to adapt that to TXo:

  • remove JF.MODE and JF.SHIFT lines from the init script and add L 1 4: TO.CV I V 8 and L 1 4: TO.ENV.ACT I 1 instead
  • in script 4 remove JF.VOX line and replace it with TO.OSC A X; TO.ENV.TRIG A
  • since you have 4 voices instead of 6 change D 6 to D 4 in the init script.

that should do it! (i haven’t tested it so there might be gremlins)


#109

That is exactly what I tried before posting! Maybe I made an error elsewhere in the script, but I was unable to get the Txo to follow the pitch. I’ll give it another go today!

EDIT:
I went back and reloaded the scene. I was able to get a playable grid, but only after adding an offset to the note in script 4. I started with an octave, but the lowest notes were low enough to be silent. I ended up with +4 octaves… which seems like a lot… I’m not sure that I understand why it’s needed at all.

(SCRIPT 4) 
Y - 7 G.BTN.Y B
X N + * Y 5 G.BTN.X B
X + X V 4                                   /this is the line i added
TO.OSC A X; TO.ENV.TRIG A

#110

i seem to recall i had to do something similar with TXo before… it might be that N 0 corresponds to C0 instead of C3. glad you got it working!


#111

They say that with the Basimilus Iteritas Alter, you should just “feed it gate patterns.”

I don’t have a BIA (yet).

But I have binary math!

Meet:

ALTER BOYY

MAKES QUASI-RANDOM-OID
GATE PATTERNS

8 ROWS, 8 GATE OUTS (CVS ARE
PRETENDING TO BE GATES)

TR 1 IN: CLOCK

GRID, LEFT HALF: TWIDDLE BITS

GRID COLS 10-11: STORE ROW IN
ONE OF TWO BACKUPS

GRID COLS 12-13: SWAP ROW W/
ONE OF TWO BACKUPS

GRID COL 15: RANDOMIZE
GRID COL 16 (INVISO): FORCE
UPDATE



#1
M LAST 1

#2
B G.BTNX; C G.BTNY; P.N 0
IF G.BTNV: P C BSET P C B
ELSE: P C BCLR P C B

#3
IF ! G.BTNV: BREAK
X - G.BTNX 10; C LT X 1
IF C: X + X 2
B G.BTNY; PN 0 8 PN X B
PN X B PN 0 B
IF ! C: PN 0 B PN 0 8; $ 5

#4
IF ! G.BTNV: BREAK
PN 0 G.BTNY RRAND 0 255
SCRIPT 5

#5
B * G.BTNY 8; C + B 7
L B C: Z I; SCRIPT 8

#6

#7
T BGET PN 0 A D
IF LT A 4: TR + A 1 T
ELSE: CV - A 3 V * 5 T

#8
Y / Z 8; X % Z 8
G.BTN.V Z BGET PN 0 Y X

#M
D O
L 0 7: A I; SCRIPT 7

#I
M 125; A 0; X 0; Z 0; O.MAX 7
G.BTX 0 0 0 1 1 1 0 2 8 8
G.BTX 64 9 0 1 1 0 9 3 4 8
G.BTX 96 14 0 1 1 0 15 4 1 8
G.BTX 104 15 0 1 1 0 0 5 1 8
L 0 63: Z I; SCRIPT 8

#P
0	0	0	0
1	1	1	1
0	0	0	0
63	63	63	63

110	8	0	0
180	246	110	0
196	202	0	0
232	136	137	0
252	252	0	0
15	0	0	0
60	0	0	0
240	0	0	0
180	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
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
0111011000101101
0010001100010111
0011111111110000
0011110000001111
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

#112

nice to see the bit ops being used in a trigger sequencer, they’re super handy for that.

really like the idea of being able to store 2 extra sequences per row and “inject” them with momentary buttons, great idea!


#113

Thanks! In my limited playing with it so far I’m sort of not persuaded that the backup lanes are the UI I’m looking for - I seem to fat-finger it two thirds of the time and either lose a pattern I wanted to save, or just not end up in an interesting place. I may want to try just a single backup of the whole grid, and see if that frees up any space for some more mathy operations.


#114

yeah, i would use another button as a “save” button, so to save you would have to press both “save” and “backup” buttons at the same time. and then make it so that one of the backup sequences is active only while its button is pressed (which is how i initially thought it worked). there is just something cool about “injecting” sequences in this manner. the nice thing is it’s easy to tweak the scene to make it work whatever way works best for you!


i wanted to try your scene with just friends, here is the version i came up with: friends_with_alter_boyy.txt

6 rows instead of 8 to correspond to 6 just friends voices
the bottom row is where you select the note for currently selected voice
left 8 columns is the sequencer
columns 10-12 is preset selection
column 15 randomize row
column 16 select row

for backups (presets) i simplified it in this version, so basically you just select the current preset and that’s what’s played and edited. the bottom row is where you choose the note for currently selected row (selected and indicated by column 16). this version will still generate triggers, but since CV 3&4 are not used anymore they’re just set to random values on each step.


#115

riding the ansible earthsea frenzy: has anyone managed timed keypress recording and playback with TT grid integration? my starting point has been using TIME to timestamp entries and reading that as a DEL to recursively retrigger, but my implementation is not very clean.

edit: also, once TIME passes 32 seconds it goes to negative 32 seconds and counts down back to 0. is this the expected behavior?


#116

@ghost mentioned he couldn’t get accurate timing using TIME, i had a quick look at the code and it looks like for some reason the internal variable used for that only gets updated every 10ms, not sure why. i think it should be doable to make it as accurate as TT internal clock, i’ll give it a try (there might be specific reasons for why it was done this way so not 100% sure it’ll work).


#117

enjoy your travel, first. please!


#118

I’m struggling with altering Alter Boyy to have 16 columns. Here’s a test case:

#8
Y / I 16; C % I 16
A GT C 7; B C
IF A: B - B 8
G.BTN.V I BGET PN A Y B

#I
G.GBX 1 0 0 0 1 1 1 0 7 16 1
L 0 15: SCRIPT 8

#P
0 0 0 0
1 1 1 1
0 0 0 0
63 63 63 63


123 45 0 0
0 0 0 0
(etc.)

So that’s one row of buttons across the grid, and a loop through them that ought to set their value to the value of pattern [0 or 1, depending on how far we’ve gotten along the row] at index [the row number], bit [the column number, minus 8 if we’re far enough along in the row].

If it’s not clear, since TT doesn’t quite handle 16-bit numbers, I’m using two 8-bit numbers across two rows of the pattern. In theory it works great! In practice I can mash F10 all day and get nothing.

(This is all based on @scanner_darkly’s marvelous optimization of my original code, thanks again!)


#119

you should be able to use the bit ops for all 16 bits with no problem. you’ll get negative numbers in some cases but you just care about individual bits anyway. if this is not the case it’s a bug!


#120

but it’s… not even 32768 to -32767?

I just don’t want to poke anything I shouldn’t poke. Although graphics glitches would be fun.


#121

teletype numbers should indeed be in -32768…32767 range, so you should be safe.