acrostic
project name: acrostic
project url: https://github.com/schollz/acrostic
author: infinitedigits
description: chord sequencer and sampler
discussion url: https://llllllll.co/t/acrostic/53027
tags: sequencer sampler crow grid

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

gif

here are a few more demo performances:

https://vimeo.com/663740623

https://vimeo.com/663740704

https://vimeo.com/663740652

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

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.

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.

sampling context

sampling context

this context lets you queue tracks for recording. you are in the “sampling context” when the sample area is highlighted.

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:

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:

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:

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.

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:

https://vimeo.com/680660126

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</summary> !!! 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. </details>

Install

install with

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

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