Axe thing one (ER-301 and Teletype combo)

axe thing one

For the guitarist in you. This is an ER-301 quicksave, plus a Teletype scene. Hopefully the video will serve as a quick manual.


axe thing (3.2 MB)


  • axe thing one.txt is the teletype file. rename it to ttXX.txt where XX is the scene number you want to load it into. copy to your USB drive root, and load on teletype
  • slot1 is an ER-301 quicksave. copy the files in the folder to one of the quick save folders on your ER-301 SD card. then load that quicksave

other notes

  • the ER-301 quicksave comes with 6 acoustic guitar samples inside the quick save folder, so it should load ready to play
  • the first 6 or so default chord presets are in the key of G major. you might have to select a preset button other than #1 to get things started the first time
  • some fun stuff to try would be using something other than acoustic guitar samples, trying some different tunings (e.g. bottom two strings doing bass)

WOW!!! now that is impressive!

1 Like

Most impressive :smiley:

Really creative UI design - I really like it.

My first thought was to swap the UI around a little bit and place the main playable controls on either side of the Grid so you could pick it up and play it, perhaps a little like an accordion; but having tried it it’s really not that comfortable to hold and play at all like that (at least not the walnut version in my hands). The second row in is most comfortable to reach but only for a few buttons. Having said that, perhaps it may be an idea worth exploring a little?

Second thought was to put the tunings on a second page, not sure if that is possible with GridOps?

Finally, how about treating the columns as frets, so the lit buttons are actual guitar chord shapes? Would you need to hold the chord down? Perhaps a separate hold button so you can hold the chord shape after you have removed your fingers. On release, dampen the sound with a LPF / VCA and pitch shift down to default string tuning - kind of like what would happen if you released a chord on a guitar.

Apologies if any of this is totally impossible with whatever you have done so far, I can see how some of it might be tricky to implement, it’s just some random ideas.

Once again, I really think this is great - good work - I’m looking forward to trying it out and reading your scripts :smile:


Interesting ideas! Perhaps there will be an axe thing two. :grin:


I was typing with my thumbs before. Yep, that’s totally possible using the groups feature. @scanner_darkly packed a lot in there!

You can essentially create groups of buttons, faders, etc., and you can enable/disable groups, which adds or removes them from the grid display. So by doing that in response to a button press or some other event, you can make it appear like there are pages.

Pretty impressive Joe!

Are grid ops units (for want of better nomenclature) operable without a grid?

Yes, you can fully use them with just a teletype by pressing ALT+G from the command line. ALT+G a second time will take you to more of a full screen grid view. ALT+G a third time will get you back out.

ALT+arrow keys will move you around the grid. ALT+space will press the grid button.

In the full screen view the ALT key isn’t necessary. Just arrow keys and space.

How much fun this one will be without the grid is pretty sketchy, but you can certainly at least try it out.

Yeah, I was thinking about revising my question…i was wondering if you could operate those button presses/values with triggers/CV…

Thank you. Regardless it remains impressive! :smiley:

1 Like

I’m curious if with the 16n Faderbank if we’ll be able to play the slide guitar…

1 Like

Oh, I gotcha now. You could certainly go into the variable players and replace the SC.TR units with some kind of CV gate source connected in through the ER-301’s jacks. But that would just let you pluck each string. The rest of the buttons fire off complex events, so I don’t think you could do much there.

1 Like

I thought that was the case from my own explorations, hoping I’d missed something :smiley:

Brilliant, Joe! :heart_eyes_cat:

I really have to get the project packaging functionality up so that sharing quicksaves is easier…

FYI: I recommend fading out those samples to silence because they end on clicks.


Looking forward to the packaging system when it arrives.

Thanks for the tip. I recorded that video 3 times trying to figure out where the clicks were coming from. I couldn’t hear them in my studio monitors so I assumed something was screwy in my recording chain, and never suspected the samples. Time for some new monitors I guess.

I had a look at the scripts for the TT scene and I must admit I clearly have things to learn.

I know this is a BIG ask, but is there any chance of you doing a walkthrough of the code explaining what you are doing please?

No obligation/pressure/anything, I can sit and do this myself, but it would be good to hear you do it :slight_smile:

Sure. Actually not a bad exercise for me while it’s fresh in my head. I have found these things make less sense if you look at them 6 months later. Let me know if you have questions.

A SCALE 0 16383 20 500 PARAM  // scale the param knob to values 20-500.  These are msec delays between each string pluck on a down/up strum

G.GBX 1 1 0 7 1 1 1 2 1 9 1  // creates 9 the tuning preset buttons at the bottom.  these fire script 1
G.GFX 1 1 0 0 9 1 6 24 2 1 6  // creates the 6 tuning faders.  these fire script 2
G.GBX 2 10 10 0 1 1 0 3 3 1 6 // creates the 6 individual note pluck buttons.  fires script 3
G.GBX 3 20 11 0 1 1 0 3 4 2 6  // creates the two columns for down/up strum.  fires script 4
M 50  // set metro to 50ms for updating param knob
L 1 6: SC.CV.SLEW I 200  // set a slew on each sample player pitch cv

#1  // this script handles recalling the tunings for each string when a tuning preset button is pressed
G.GBTN.V 1 0; G.BTN.V G.BTNI 1  // dim all of the preset buttons and brigten the one that was pressed so that it appears to be selected
J * 6 G.BTNI  // store the pattern index root for the selected preset in local script variable J.  presets are stored in pattern 1 starting at index 6-11, then 12-17, 18-23, etc.
L 1 6: G.FDR.N I + 12 P + J I  // recall the current tuning for each string from pattern memory and set the tuning fader values to match
L 1 6: SC.CV I N P + J I // set the CV pitch for each sample player on the ER-301 from pattern memory.

#2  // handler for when one of the tuning faders is changed
X - G.FDRN 12  // the tuning faders have 24 values.  they are set up so that the tunings can be semitones up or down.  so fader value of 12 is zero semitones, fader value of 10 is -2 semitones
SC.CV G.FDRI N X  // when a tuning fader is changed, immediately change the pitch on the sample player
J * 6 G.GBTN.I 1 0  // determine which pattern index needs to be updated
P + G.FDRI J X  // store the semitone pitch offset in the pattern

#3  // handler for when of the individual string pluck buttons is pressed
IF NZ G.BTNV: SC.TR.P G.BTNI  // when one of the pluck buttons is pressed, trigger the corresponding sample player (only when pressed down, not when released)
X G.BTNI  // I think this was just for debugging

#4  // router for when the strum up/down column buttons are pressed
$ - G.BTNX 6  // for the strum columns, determine which was selected based on the X position of the button pressed.  downstroke, fire script 5, upstroke script 6

#5  // strum down handler.  determine which string was selected to strum down from, and call script 7 in a loop to set up the ratcheted string plucks
IF EZ G.BTNV: BREAK  // only strum on button press, not release
Y G.BTNY  // determine which button was pressed (verticaly) so we can start strumming down from that string
Z + 11 G.BTNY // determine the starting SC.TR port #
L 0 G.BTNY: $ 7 // call script 7 for as many times as needed, depending on which string was selected to start the downward strum

#6  // strum up handler.  determine which string was selected to strum up to, and call script 8 in a loop to set up the ratcheted string plucks
IF EZ G.BTNV: BREAK  // same as script 5 except Z is always the top string (high E string on guitar)
Z 9
L 0 G.BTNY: $ 8

#7  // ratcheting string plucker for down strum - called in a loop from script 5
DEL * I A: Z - Z 1 // using the delay between pluck value set by the param knob, decrement Z.  by multiplying I (which is inhereted from the calling script), the amount of delay is increasing with each successive call from the loop in script 5
DEL * I A: SC.TR.P Z // and then trigger the SC.TR port for each string

#8  // ratcheting string plucker for up strum - called in a loop from script 6
DEL * I A: Z + Z 1  // same as script 7 except this time counting upward

6	0	0	0
1	1	1	1
0	0	0	0
63	63	63	63

0	0	0	0  // not used
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0
0	0	0	0  // tuning preset 1, values are +/- semitones
5	0	0	0
1	0	0	0
0	0	0	0
0	0	0	0
2	0	0	0
3	0	0	0  // tuning preset 2
2	0	0	0
2	0	0	0
2	0	0	0
2	0	0	0
0	0	0	0
0	0	0	0 // tuning preset 4, etc.
4	0	0	0
1	0	0	0
-1	0	0	0
0	0	0	0
2	0	0	0

This is great - super helpful - thanks @Joe

1 Like

So I’m just getting around to playing with this and I’m not getting sound out of the ER-301. I’ve certainly got i2c connectivity between the TT and the ER-301. The Grid is illuminated in the same pattern as yours. The ER-301 appears to have the six samples loaded up fine, but it seems like I’m missing some very basic step here.

Sorry you’re having trouble. First troubleshooting step would be to go into any mixer channel s1-s6. Go to the Variable Speed Player and hand trigger it’s gate using the fire button. Does it make sound?

If it does, enter the gate subchain and look at the signal out of the SC.TR unit. Press the 6th button down on the second trigger column on TT to strum down all strings. Turn the param knob all the way down for the fastest possible strum. Is there a trigger signal coming out of the SC.TR unit?

Also - just to confirm you are running TT beta 3.0 firmware linked above with the local J and K script variables available? It uses those.

So the first problem is that none of the mixer channels have the Variable Speed Player. After entering one of the mixers I have to hit Edit Controls and then I’m presented with Input Meter and Pan GainBias. I’ve tried copying your files into Slot1 and Slot24. I’m also on Brian’s latest firmware which I think is 0.4.11.

Next, I have the latest beta installed figuring the ScannerDarkly built it with the Local J and K variables. I’ll try loading up that specific firmware you linked to in a couple of hours when I get back to my synth.

scanner_darkly’s latest build that fixes the occasional scene wiping issue should include the enhancements that alphacactus made. It’s easy enough to test, I think. Just go into an empty scene and put something like J 1 on script 1 and see if it accepts it. Don’t see a need to “downgrade” the TT firmware.

Very strange that the mixers don’t have the VSPs. I will try saving as a channel chain and sharing that when I get back in front my rig.

1 Like