acrostic

acrostic

sample and layer chords, one note at a time.

img

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).

Requirements

  • norns (version 220129+)
  • external midi or cv synth (optional)
  • grid/midigrid (optional)
  • crow (optional, requires v3)

Documentation

quick start

  1. (optional) plug in midi device or attach crow pitch to synth, route synth to norns input
  2. start script, wait for the ghost’s eyes to open.
  3. press K1+K3.

theory

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.

pages

the main UI is grouped into 4 pages. use K1+E1 to change pages. here are the four pages in acrostic:

  1. the matrix (control note values)
  2. the planets (control amp/pan)
  3. the bars (controls note gating)
  4. 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.

page 1) the matrix

matrix

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:

  1. chords
  2. notes
  3. phrase
  4. sampling

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.

chord context

chord context

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

note/phrase context

note context

phrase context

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

sampling context

sampling context

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.

page 2) the planets

planets

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

page 3) the bars

bars

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

page 4) the phantom

thephantom

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

crow

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)

grid

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.

tips and tricks and gotchas

melodies

there are two ways to add random melodies:

  1. turn up PARAMS > notes > inter-note probability.
  2. goto PARAMS > notes > melody generator and set it to yes.

if melodies are too “fast” you can turn down the gate probability (PARAMS > notes > note gate probability) to make them hold out longer.

playing “phrases”

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.

“tempo” gotchas

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.

non-sequencing

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.

regenerate often

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.

future

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.

Install

install with

;install https://github.com/schollz/acrostic

make sure to do SYSTEM > RESTART after installing or updating.

118 Likes

Woo hoo! Thank you! Looking forward to taking this out for a spin later!

1 Like

Thank you very much for this! The level of imagination in your scripts is astounding and inspirational.

7 Likes

Holy shit man, incredible work as always and can’t wait to try this one! :heart_eyes:

Glad I have a Strega but how does the tuning on Strega work? What should the “base frequency” of the oscillator on Strega be set to? Does acrostic have some sort of “tuning mode” that could send a constant pitch from Crow for tuning? Maybe I’m thinking too much into this, does this make sense? The Metropolix has this feature which is helpful for tuning the oscillators you are using with it.

3 Likes

I have a 0-coast, and a crow. Could I use that combination? If yes, where do I go from on Crow, and where do I go to on 0-coast?

This script looks great Zack!

1 Like

thank you so much <33

1 Like

it depends. if you don’t plan on having other instruments (which is often my mode of operation) then you can turn the base frequency to whatever you want. the one instrument (Strega in your case) will simply interact with itself and always be in the same key, no matter the base frequency you set it to. personally speaking, I like to set the base frequency so that the highest notes don’t sound too piercing.

but you might also want to multiple instruments to play together. in this case its good to know that acrostic is sending voltage based on midi - the formula is (note-24)/12, so that each “C” should be 0,1,2,3,… volts. so if you send 0,1,2 volts to Strega you should be able to tune it to a “C” note (some multiple of 32.7 Hz). like above, it doesn’t really matter which “C” you set it to - you can also choose one based on preferences.

yes it does! crow output 4 is an oscillator that outputs the current note from the sequencer. in the parameters you can set the octave of it. you can use this note as a tuning note - if you match its pitch then your Strega will be in tune. (also bonus, I also like to use this oscillator as a sub-oscillator into the input of Strega to bolster its low-end on low notes).

yes that should work wonderfully. you can plug crow output 1 into the 0-coast 1v/oct and then optionally plug in the crow output 2 (the envelope) somewhere (like a filter opening or amplitude). then make sure the 0-coast audio output is plugged into the audio input of the norns. that should be it! since 0-coast has MIDI input you could also not use the crow 1 output (pitch cv) and instead just use midi.

6 Likes

Ace! Thanks so much dude

1 Like

Excellent and thank you!

1 Like

This looks fantastic :sparkles:

I can see this being a very neat way to get deep, surprising results out of a very minimal ~40hp eurorack setup (Crow, Synth-voice and some other goodies).

1 Like

Awesome script! Thanks a lot! Going to try the buchla in full polyphony !
:heart_eyes:

I don’t know if it’s difficult or even possible but would be great to use a MIDI keyboard for selecting the notes/phrases

1 Like

Genius (20 characters)!

1 Like

@infinitedigits How did you hook the Monotron and the Shield together in acrostic-demo2? Am I right in thinking it’s audio out from Monotron to audio in on the Shield? And what’s going into (out of?) the Shield’s USB? A grid?
Asking because I have one of these groovy little multi units on the way and am kinda hoping I can use it as a sound source for acrostic

1 Like

Acrostic is absolutely fantastic!

I started exploring the scripts to look into adding more scales (phrygian, locrian, etc.) but stumbled upon the philipglass mode… My afternoon, and, realistically, probably the entire rest of the day, is forfeited to this deep and beautiful thing!

7 Likes

So, I’m not having a fantastic day at work.

Decided to load this up and just let it run in the background to help me get through the day.

Sounds fantastic right from the start.

Kudos, @infinitedigits

4 Likes

Just using the simple little box that is the NTS-1 and this script is making it sing!

Had to change the midi channel on the NTS-1 to 1.

I didn’t see a midi out channel select in the parameters, did I miss it or is it not there?

4 Likes

This is immense. Well done with this astounding script!

1 Like

another awesome addition! thank you for sharing :slight_smile:

1 Like

would you be interested in a live virtual acrostic workshop?

following in @jaseknighter’s footsteps who had some wonderful splnkr workshops, I would be happy to do a public workshop through twitch on using acrostic - going through workflows, tips+tricks, etc. if you’re interested just click yes and if we have a critical mass I can figure out some schedule options.

  • yes

0 voters

btw if you are getting error: init …

make sure to have your norns updated to the latest version (220129 as of this writing). acrostic uses @Dewb’s brilliant roman numeral chord generation system. (I’ve added this to the requirements up top).

:slight_smile: :heart: so glad its given you a lift.

the shield is actually talking to crow and crow is sending the volts to the monotron (via a hack where I soldered some wires to the back of the monotron pcb). the USB cable in that demo is the crow cable.

I think those should work great! do they accept MIDI? if so, you could simply plug in a USB cable from the shield into multi and then plug the audio cable from multi into the audio input of acrostic. turn on acrostic and press K1+K3 and sit back and relax :rainbow:

I like this - I’ll prototype this idea a little.

do you mean these lines? haha I’m glad you like those! maybe I should make them some presets. all those commented lines are actually chord patterns I was using when writing the generations album. some of the chord patterns were based off chord patterns I heard in other songs and liked (philipglass = Philip Glass Etude #6 for piano)

yeah exactly! my motivation for this was to really create as much complex harmony out of a simple system/synth.

11 Likes

Hey Zack!
ONE HUNDRED percent of people say “yes”…so surely it will happen?

5 Likes