sample and layer chords, one note at a time.
acrostic lets you stack monophonic sound sources into chords with subtle melodies. basically, it is a sequencer that sends out one note at a time from specified chords while simultaneously recording those notes into individual tracks that are randomly modulated (wrt amplitude/pan). I used this script to record an entire album “generations” - every song on that album is an example of this script. this script originated as an addition to the norns oooooo script, which itself originated from an idea I had while recording an entire album from a cheap monophonic synthesizer.
you can read more about the theory below, but the gist of acrostic is that it will play a series of chords one note at a time at different octaves. the sequenced notes are then fed back into acrostic and are sampled in quantized loops that will combine to form the semblance of bass, pad, and melody lines. you can add up to six tracks, with up to eight chords with any number of beats per chord. you can use any instrument you want - midi, CV, or the internal engine (the “phantom” - the voice when no other voices are present). like oooooo each of the six tracks have random lfos in their amplitude/pan so it sounds as if they are “swirling” around.
I recorded a tutorial that includes a demo, a quick start and a in-depth overview (note: some of the terminology changed since recording this and also there is no tutorial on the grid yet):
here are a few more demo performances:
I want to express a huge thanks to Takahiro for implementing the eyes in their wonderful three-eyes norns script and thanks to Ezra for helping me integrate some softcut code to record single loops. thanks to Dewb for implementing the roman numeral chord generation which was super useful for this script. also big thanks to Jonathan who was a big inspiration for the demo video (I literaly took a page out his book displaying video text on a physical notebook).
- norns (version 220129+)
- external midi or cv synth (optional)
- grid/midigrid (optional)
- crow (optional, requires v3)
- (optional) plug in midi device or attach crow pitch to synth, route synth to norns input
- start script, wait for the ghost’s eyes to open.
- press K1+K3.
basically “acrostic” is a script that lets you sequence and record very simple voice leading. the idea behind “acrostic” is to take several chords and then rearrange the notes in the chords to create a semblance of melody. for example: first suppose you chose four chords: Am, F, C, G. acrostic will first determine the notes for each chord in a separate column:
Am F C G --------------- A F C G C A E B E C G D
then acrostic will rearrange the notes of each chord in each column according to a particular algorithm (several algorithms are available and they are randomly selected). for example, the above might be re-arranged into the following:
Am F C G --------------- C C C D A A G G E F E B
the nature of the re-arrangement can help to induce natural melodies. acrostic re-arranges in many ways - trying to keep similar notes grouped together or minimizing distances (as in example above), maximizing distances, random, etc. the next step is to simply play each row, one note at a time, and over-dub the notes atop each other so that they form chords. also by putting notes in different octaves you can spread the chord around and get “bass” and “lead” lines.
the main UI is grouped into 4 pages. use K1+E1 to change pages. here are the four pages in acrostic:
- the matrix (control note values)
- the planets (control amp/pan)
- the bars (controls note gating)
- the phantom (controls internal engine)
the matrix does the sequencing and sampling and lets you modulate both. the planets lets you modulate the lfos for the volume and pan of the samples. the bars lets you gate and add interstitial notes. the phantom is a voice that you can use if you have no other voice.
the matrix is what lets you specify note pitches and their duration. you can pick chords, re-arrange the notes in the chord, and re-arrange/change the notes in the individual phrases. this particular UI has four “contexts”. use E1 to change “context” within this page. they are as follows:
the chords context lets you pick the chords and allocate the beats. the notes context lets you rotate and change octave of notes in a chord. the phrase context lets you rotate notes and change octave in a phrase. the sampling context is where you initiate recording and can do some leveling.
this context lets you modify the chords. you are in the “chord context” when the bar around the roman numerals is highlighted.
- E2 or K1+E2 select chord position
- E3 change chord
- K1+E3 change beats of chord
- K2 regenerate notes
- K3 start/stop
- K1+K3 stop all
this context lets you mainpulate/rotate/change pitches. you are in the “note context” when the columns are highlighted and you are in the “phrase context” when a row is highlighted. both of these contexts have the same controls/share controls.
- E2 select notes in chord
- E3 select phrase
- K1+E2 rotate notes in chord
- K1+E3 rotate phrase
- K2/K3 lower/raise octave of currently selected
- K1+K3 reset octaves of currently selected
this context lets you queue tracks for recording. you are in the “sampling context” when the sample area is highlighted.
- E2 select sample
- K3 queues recording
- K3 dequeues recording
- K1+K2 erase recording
- K1+K3 queue unrecorded samples
- E3 change level
- K1+E2 changes pre
- K1+E3 chagnes rec
when you queue a recording (K3) it will begin recording at the next loop. you can queue multiple samples, even while one is recorindg.
the planets are representations of the current volume/pan for each track. they are automatically given random LFOs, but there are adjustments you can make manually. adjust parameters in
PARAMS > loop X or from the phantom UI:
- K3 switches between loops
- E1 adjusts volume
- E2 adjust volume lfo amplitude
- E3 adjusts volume lfo period
- K2+E1 adjusts pan
- K2+E2 adjusts pan lfo amplitude
- K2+E3 adjusts pan lfo period
the bars lets you modify the gating of notes and add new notes. adjust parameters in
PARAMS > notes or from the phantom UI:
- E2 adjusts interstitial note probability
- E3 adjusts gate probabilty
the phantom is a voice when there are no other voices. it is driven by an internal engine which is automatically used when no crow or midi device is detected (if midi/crow is detected, then the volume of the phantom is set to 0 by default). adjust parameters in
PARAMS > phantom or from the phantom UI:
- E1 adjusts LPF lfo frequency
- E2 adjusts LPF minimum cutoff
- E3 adjusts LPF maximum cutoff
- K1+E2 adjusts volume (by default its 0!, turn it up)
- K1+E3 adjusts feedback
the crow output is used to send out sequences. pitch 1 is the current sequencer pitch (1v/oct, but that can be modified in the parameters). the pitch will be the matrix sequencer, but switches over to the grid if the grid sequencer is active. crow output 2 is an envelope, which is by default activated when a chord change occurs (or when each note plays if the grid is active). crow output 3 is a clock which can be used to sync other instruments. crow output 4 is an oscillator which can be used to as a sub-oscillator to mix in bass.
- crow output 1 is pitch
- crow output 2 is envelope
- crow output 3 is clock
- crow output 4 is oscillator (I like to use as a sub-oscillator / tuner)
the grid is meant as a performative sequencer. in the parameters you can set whether the sequence resets every chord or not (
PARAMS > midi/grid/crow > reset every chord). using the grid will “takeover” the crow outputs. when the grid stops playing, the crow will output as normal. tip: if you sequence a single note you and just change notes and use it as a simple keyboard. here is a tutorial:
rows 1-6 controls pitch. you can use two finger gestures to draw shapes. the note shapes are applied the note matrix. the rows 1-3 notes that are always the same that come from each chord, 4 columns per chord (I mis-spoke in the tutorial and said 3 columns per chord). the rows 4-6 are notes that change with every chord. pressing a note again will transpose it, alternating up/down.
row 7 controls duration. pressing a step twice will cause that note to hold. pressing two steps will reset their duration to the default (1/16th note).
row 8 controls gates. pressing two gates will invert all gates in between.
there are two ways to add random melodies:
- turn up
PARAMS > notes > inter-note probability.
PARAMS > notes > melody generatorand set it to
if melodies are too “fast” you can turn down the gate probability (
PARAMS > notes > note gate probability) to make them hold out longer.
you can change the octave of phrases, while they are playing, to get higher/lower notes in case you want something to go into a “lead” sound or “bass” sound. actually, moving around the note/phrase stage will hold the note to that position.
acrostic does not handle tempo changes well. its best to set the tempo you want and then start acrostic. if you do change the tempo, make sure to change the beats of a chord (you can change it from and back to) which will trigger acrostic to re-assign the sample lengths.
its fun to unplug all devices (midi/crow) and turn down the phantom and record in sounds played by you directly. just follow along with the notes specified in the matrix and let your own human sequencing unfold the layers.
you can re-generate the notes in the matrix by going to the first page, turning E1 all the way CCW (to select the chord context), and then pressing K2. this will provide a whole new bed of notes which is useful if you are soloing and want the notes to be different than what is already recorded.
- fix problems with softcut.rec_once, an addition to softcut better utilizes softcut to make fade-able loops (current acrostic uses clocks+recpre slew to accomplish the same thing).
- option to introduce ambisonics with head transfer functions for more “swirling” for each track.
dev only - installing with softcut.rec_once!!! do not follow these instructions unless you know what you are doing !!!
I created a patch for softcut that simplifies the recording and creating cross-fading loops.
requires a special patch to softcut and to norns.
first rebuild norns:
sudo systemctl stop norns-jack.service; sudo systemctl stop norns-matron.service; sudo systemctl stop norns-crone.service && \ cd ~; ~/norns/stop.sh; rm -rf ~/norns; \ git clone https://github.com/schollz/norns && \ cd ~/norns && git checkout id && \ git submodule update --init --recursive && \ cd ~/norns/crone/ && rm -rf softcut && \ git clone https://github.com/schollz/softcut-lib softcut && \ cd softcut && git checkout id && \ cd ~/norns/crone/softcut/softcut-lib && \ ./waf configure && \ ./waf && \ cd ~/norns && \ ./waf configure --enable-ableton-link && \ ./waf build && \ sudo systemctl restart norns-jack.service; sudo systemctl restart norns-matron.service; sudo systemctl restart norns-crone.service
then install acrostic:
rm -rf ~/dust/code/acrostic && \ git clone https://github.com/schollz/acrostic ~/dust/code/acrostic
then restart norns:
sudo systemctl restart norns-jack.service; \ sudo systemctl restart norns-matron.service; \ sudo systemctl restart norns-crone.service
don’t do this unless you know what you are doing.
make sure to do
SYSTEM > RESTART after installing or updating.