What can I do with these loops?

In my weekends (and the occasional evening) I like to jam with plugins and MIDI, edit up samples, and make little loops. This is a low-pressure outlet for my creativity. In the last few years this has meant I've had a lot more fun, accumulated lots of rendered audio, and almost stopped releasing music. I'd been looking for a way to combine all these loops into some kind of generative audio wallpaper.

Landscapes are nice

A wee while ago I came across @SoftLandscapes (see also web twitter). I like experimenting with primitive (minimalist?) animation, and I wondered if I could implement something similar in canvas or SVG, so I did some prototyping on codepen.

Press play to hear it! Leave it going for an hour or so to hear everything, or leave it going for a week! Full site here, so you can full screen it in a dark room.

Let's learn about new web tech

I was also looking to get more experience with the Web Audio API, Redux, and React. So I combined all these things into a project that I can focus on and then ship (because real artists ship).

What is it? How does it work?

There are a handful of songs, each split into four layers. The algorithm cycles through all the songs, and gradually adds in, and then removes layers. Each of the layers corresponds to one of the scrolling parallax mountain ranges, so they fade in and out too.

When switching to the next song, as layers are removed, the code decides how soon to bring in the next song - how much the parts overlap. The code also randomly chooses different ways for parts to enter and exit – simple start stop, low and high-pass filter sweeps, or volume sweeps.

There's also a selection of texture/field recording samples which are played over each transition – a random section of the sample is selected and then looped, and filtered in and out as the song changes.

Sometimes, to mark changes, there's a little bit of punctuation – a randomly-selected "hit" sample, such as an air horn or cymbal. These are sent to a dub delay using a Web Audio DelayNode and BiquadFilterNode (hat tip Chris Lowis). Gotta have an air horn. No cowbell though (not this time).

The colours of the mountains are randomised – a front and a back colour are chosen, and then these are interpolated for the middle two mountain ranges.

There's a range of styles in there, things that you might call instrumental east-coast hip hop, dubstep, dark ambient electronica, subdued moody piano, break beat.

Look out!

If I make nice sounds when noodling or jamming, I'll add new songs periodically, so check back in :)

One of the many neat little touches in Figure (a fun music app/toy for iPhone/iPad/iOS) is how it names documents.

Instead of using the typical "Untitled 1" (or similar) approach, it generates a nonsense word. I like this because you're not forced to think up a name but you still still get a "meaningful" name/handle to use to refer to your lil song doodle thing. Examples: Dukadygo, Hudolyka, Tejugy.

I really liked this idea, and wanted to use it in SuperCollider, so I wrote a little String extension to generate pseudowords.

+ String {
  // Generate a random "word" between 2-5 syllables.
  * randomWord { | minSyllables=2, maxSyllables=5 |
    var
    consonants = "bcdfghjklmnpqrstvwxyz",
    vowels = [
      'a', 'e', 'i', 'o', 'u'
    ],
    longvowels = [
      'ee', 'oo'
    ],
    dipthongs = [
      'ae', 'ai', 'ao', 'au',
      'ea', 'ei', 'eo', 'eu',
      'ia', 'ie', 'io', 'iu',
      'oa', 'oe', 'oi', 'ou'
    ],
    word = Array.fill(rrand(minSyllables, maxSyllables).round, {
      var syllableMode = 20.rand;
      case
      // 10% chance of a diphthong vowel
      {syllableMode >= 18} {consonants.choose ++ dipthongs.choose}
      // 10% chance of a long vowel
      {syllableMode >= 16} {consonants.choose ++ longvowels.choose}
      // 5% chance of no vowel!
      {syllableMode == 6} {consonants.choose}
      // otherwise "typical" syllable (75% chance)
      {syllableMode >= 0} {consonants.choose ++ vowels.choose}
      ;
    }).flatten.join;
    ^word
  }
}

I'll be using this in SuperCollider for naming little midi patterns, song sections etc, as opposed to beat, bass1, bridgechords etc.

Other potential applications of this concept:

  • blog post 'slug' - the url key for a post (coming soon to drongo)
  • names of characters, technologies, plants or animals in creative writing
  • name for your new company/brand.