Cantre'r Gwaelod

Cantre’r Gwaelod is a constantly changing piece of music, based on the famous story and using elements of the poem Boddi Maes Gwyddno. The music alters according to the weather and tide conditions, reaching a climax at the high tide as the rising sea endangers the land.

Horns and bells herald the high tide, low tide reveals bony drones. Guitar loops and piano play with the intensity of the rain and wind. Things move slower as the temperature falls.

The original piece ran online for a period of around two months in August and September 2017 as part of Arad Goch’s “Hen Linell Bell/Old Far Line” festival. I’ve since deactivated it for lack of funds. The website is still up, but there’s no streaming.

However, it can still be heard on Bandcamp: a relatively brief snippet has been produced using a compressed set of weather data from a week of stormy and sunny weather in September 2017.

Technology

Technology:

  • Linuxsampler piano
  • Supercollider for loops, drones and bells
  • zynaddsubfx for more drones
  • Boss looper pedal to put together the 20 or so guitar loops.
  • Everything is tied together with Jack and controlled through a custom set of programs in Python, Angort and C++.
  • A lot of data is shuffled between the programs using a publish/subscribe system called Diamond Apparatus.
Data flow diagram. Blue is MIDI, red is OSC, green is my own Diamond Apparatus comms, and black is Jack audio data.

Data flow:

  • The camera is monitored by custom Qt/C++ program VisualMuse. This is configured to watch for motion in certain parts of the image. Motion causes an increase in the output values, which dies down over time. This data is fed to the amplitude of various loops, stored as topics in another custom system, Diamond Apparatus, for use by other programs. The overall brightness, amount of motion and amount of very rapid motion is also stored in a Diamond topic. If there’s no camera present, this all gets faked with random data from a Python script.
  • A Python script scrapes a local weather station and tide data website, again storing the value in Diamond Apparatus.
  • Much of this data is read by an Angort program called magic.ang. This is a frankly insane script that reads all the “environmental” data and converts it into “music” data (so, for example, “amount of movement” and “temperature” might be combined into “loudness of loop number 3”). This music data is published in Diamond Apparatus.
  • A simple Python script called relay reads this information and converts it into OSC, where it is read by a SuperCollider script which actually makes music, using a set of guitar loops and various synths.
  • Another “program”, written using my Stumpy visual programming system (it’s a bit like Pure Data or Max, but works on entities like chords and notes) reads the root note of the key (generated by magic.ang) data and produces constantly playing loops of notes, as MIDI events. These are fed into LinuxSampler, playing a nice piano, three ZynAddSubFx synthesizers, and a drone in SuperCollider.
  • The magic.ang script also produces MIDI control data, which is used to control the amplitude of the synthesizers and piano.
  • The sounds are mixed together in another custom program - a mixer system called Jackmix, for mixing jackd audio data streams. This was written because I needed a simple system with a Curses user interface which could also run headless.
  • And that gets output to Darkice streaming software.
James Finnis
James Finnis
Lecturer in Computer Science

Research interests: artificial neuroendocrine systems, unusual neural network architectures, autonomous off-road driving, image processing.

Related