Brainy Music #

There’s something I really like about the idea of mathematically and programmatically making music. As a result, I’ve harboured an interest in trackers for quite some time, but never got into attempting to actually use one. In a similar vein, I’ve looked at Hundred Rabbits' Orca every now and then, but once again couldn’t be bothered to figure it out.

That was until recently, due to unrelated circumstances, I got access to Ableton Live. This piqued my interest in Orca again and I decided to grit my teeth and learn the syntax. The result is that I have now produced some blobs of characters that – when paired with the right software – produce some really interesting noises.

I won’t go into detail on how everything works as the documentation is easy enough to read. The syntax is the biggest hurdle.

Patterns #

My favourite operator so far is U – the eUclidian rhythm operator. It takes a left and right argument – lets refer to them as X and Y respectively – and then attempts to produce a bang – that is to say pulse on X out of Y frames. So 3U8 attempts to produce 3 equally spaced bangs in 8 frames, which will fail. As a result, it spaces the bangs as close to equal as possible. This can lead to some really interesting patterns and rhythms.

Here’s an example of when I wrapped my head around it for the first time:

And the Orca code:

..nVC...........
................
5U9..Vn..4U9..Vn
.*:04C....*:03C.
................
3U5..Vn.........
..:05C..........
................
3U8..Vn.........
.*:06C..........

Here’s a variant with a different synth and where I’ve been messing around with the note being played while recording:

Numbers and stuff #

Because I suck at basic calculus and have been half arsedly learning BQN, I wrote a function to get a list of numbers to produce potentially interesting patterns for the U operator:

OrcaList{1(⊢⋈¨𝕩÷)1+↕𝕩}

This function requires a number and returns a list of all possible divisions from 1 up to the given number.

   Orcalist 9
┌─                          
 1 9                    
   2 4.5                  
   3 3                    
   4 2.25                 
   5 1.8                  
   6 1.5                  
   7 1.2857142857142858   
   8 1.125                
   9 1                    

Rough Haskell equivalent for readability’s sake:

orcaList x = map ((,) <$> id <*> (x/)) [1..x]

Recording from LMMS #

Since LMMS puts whatever MIDI notes it gets into a grid (by default at least), most of the intricacies of timing are lost. As a result, when using LMMS, I use pw-record to record the live audio output with timing still intact.

This audio journey has also lead me to appreciate Pipewire a lot more. In that regard, I have the following audio stack on NixOS:

{ config, ... }: {
  sound.enable = true;
  hardware.pulseaudio.enable = false;
  services.pipewire = {
    enable = true;
    alsa.enable = true;
    alsa.support32Bit = true;
    pulse.enable = true;
    jack.enable = true;
  };
}

And I use qwpgraph as patchbay.