Mash up of REPL and Looper/Sequencer (Updated 2022-01-08)
The idea here starts with building a code-analogy to a guitar looper pedal. Start recording, execute commands, and those commands get recorded along a loop timeline. Each row of the grid is one loop (aliased to single-letter variables ‘a’-‘h’). The medium lends itself to further exploration around generating sequences, commands stopping/starting other loops, loop lengths dynamically changing, merging/splitting loops, local ui visualizations, etc.
One of the biggest next-changes is refining the engine, which is currently a mash up of Timber, Molly The Poly, and Goldeneye. The next-gen engine will likely be all of that AND have some loop-level controls for volume, pan, and high/lowpass filter.
I developed this to perform at FlashCrash, which went smashingly and will go even better in February. I put this out to share ideas. The README lists a lot of inspirations and ideas. I’ll record a walk-through soon.
The biggest change is that the three sub-engines (Timber, Molly, Goldeneye) now route to per-loop mixers. So if you have a loop d with a variety of events you can do d:amp(0, 10) to fade them all out over 10 seconds.
The second biggest, and related, thing is that now you can have several Molly instances (8 are predefined). You can do molly:note('c') and then molly2:note('d') and they are completely independent.
loop:align(other_loop) to slide events into alignment
loop:slice(s1) now takes sample-variable instead of sample-variable-name
Fix loop:split(other_loop) to work more reliably and take a base-command
Fix loop:merge(other_loop) to keep relative timings (using the new loop:align)
Embedded Goldeneye - add pan, lowpass; fix rate
Lay out long loops on the grid by zooming-out (more steps-per-button)
Rename ALL to all
Next thing I’ll probably work on is to live record into samples that then get sliced so you can use this as like … a normal audio looper. Then I’ll hook it up to a midi pedal to start/stop recording.