Solo Diary: write a piece with Gibber that has three algorithmic parts: drums, bass and lead.

This week we flip the switch to making computer music with a text-based programming system. Depending on your background, this could feel freeing, confusing or a bit of both.

The programmng system we will use now is called Gibber. It’s a web-based programming system for live-coding music. Gibber first appeared in 2012, but it’s still under development as the capabilities of web audio have changed a lot since then (in contrast, Pd, released in 1996, hasn’t changed all that much over the last 10 years).

The broad idea of live-coding is to set up musical processes in a text-based programming system, and then edit your program over time to create a changing piece of music. Rather than triggering notes and sounds directly with a keyboard, they are likely to be triggered by an algorithm, so you’ll be making algorithmic music.

Music making in Gibber tends to be at a somewhat higher level than in Pd. Gibber comes with pre-made synths and the craft of live-coding tends to be in creating algorithms to control those synths. You can still build your own synths from the ground up, just like in Pd (and it’s pretty interesting), but that’s not our focus this week.

In this week’s workshop you will use some of Gibber’s algorithmic music feature to create music with multiple parts. To get started on this task we suggest running through a Gibber tutorial which introduces the music making concepts.

Goals for this week

  1. complete the Gibber tutorial here.

  2. see how musical concepts (pitch, velocity, duration) can be represented & manipulated in a textual computer music language

  3. create some algorithmic processes which generates music and modifies the musical concepts listed above.

Pd and Gibber are both great systems for musical expression but their design tends to emphasis different kinds of music. It might be better to lean into Gibber-y music this week rather than to replicate what you were doing in Pd.

Hints for live coding

  • Gibber has no concept of “saving” code, we suggest you create some text files in your laptop ensemble GitLab repository to store your work. Gibber uses the javascript programming language so you could create files like “2022-09-01-live-coding.js”.

  • Gibber can do a lot of exciting stuff, but it’s a bit experimental and the documentation is still in progress. Be gentle on it and yourself and if you can’t work something out, ask on Teams.

  • Gibber works fine on the web (Chrome/Chromium preferred, then other modern browsers), but if you want to run it locally, you can clone the github repository, and use VSCode’s live server. This is the preferred method for loading your own samples (next week).

  • Gibber’s source code is a bit confusing. There are (at least) six important repositories:

  1. The gibber playground: Gibber’s user interface, clone this repo to run Gibber locally.
  2. gibber.audio.lib: Audio components for Gibber, most of this wraps gibberish (see below), but it does include the presets.
  3. gibber.graphics.lib: Graphics components for Gibber.
  4. gibber.core.lib: A few shared objects and function for Gibber, mostly for sequencing. euclid, seq, and tidal are defined here.
  5. gibberish: a “fast JavaScript DSP library”. If you want to know where Synth or Sampler are defined, look here (actually look in gibberish/js/instruments).
  6. genish: this is a lower-level DSP library for doing “per-sample audio processing” (inspired by the gen~ object from Max/MSP). To understand why this is cool, look at the genish tutorial.

Why are there six repos? Gibber is provides much higher level musical tools than Pd as well as graphics. If we provided Pd, plus Gem (Pd’s usual graphical sidekick), plus 5-6 externals, plus the ComputerMusicIntro repo, there would be a lot of code to get across as well!

Resources

There are a couple of maths-y/music-y pre-reqs which you’ve probably already seen before, but are often helpful in algorithmic composition:

  • pitch classes provide a way to think about which notes fit with which other notes (scales, intervals, chords)

  • modular arithmetic is handy for both rhythmic and harmonic (pitch) algorithms

  • all the music theory crash course stuff mentioned in week 1 will be helpful here as well, especially because now you’re working in a textual programming langugage you might be interested in doing more “note-based” stuff

Algorithmic Composition Resources

A few more places to get ideas for algorithmic composition:

Creative Notes

bars search times arrow-up