Skip to content
Colin Clark edited this page Mar 5, 2016 · 28 revisions

Flocking at Five Years Old

Five years ago today, on March 5, 2011, I made the first commit to Flocking. At the time, I thought I was just making a demo showing how to use the HTML5 canvas element with the then-new Firefox Audio Data API. Over the years, amidst a lot change in the Web platform, Flocking has grown into an amazing little community of musicians and artists, and is gradually evolving into a very unique kind of computer music system.

Flocking is a framework that is designed to support harmonious authorship across different representations, meaning it aims to be usable with both code (or, more accurately, data) and graphical tooling. It is designed to be interoperable at all levels so that its programs aren't limited to a single environment or "walled garden" collaborative tool. Flocking is also really fast and is intended to scale up and down, so that it can also be used on little devices like the Raspberry Pi or Chromebooks.

My goal with Flocking is a new kind of materiality, one in which a software artifact (like a composition or an instrument) can serve as the medium for new works within a creative community, without requiring forking, cut-and-paste, or knowledge of specialized computer programming languages. A metaphor for this is Amy Twigger Holroyd's re-knitting, in which existing knitted garments are modified or transformed in ways that were unanticipated by their original designers. It is this ability to be worked on by multiple creators, serendipitously added to, subtracted from, grafted onto, or unravelled in a form not already planned for and designed into the object that is missing from software today, and which I aim to provide in Flocking.

Achieving these goals will take time, patience, and a lot of creativity. Inspired by Alan Kay with his Dynabook, as Flocking grows I always try to keep a mental cardboard mockup of how I dream its programs will be in the future: highly authorable, connected to lots of different devices and other creative systems, supportive of an open ecosystem of shared artifacts and practices, live and performative without the accompanying code worship and "eat your broccoli" mindset of computational thinking. We're not there yet, but Flocking is slowly moving towards each of these goals.

Throughout Flocking's development, I have used it extensively in my own creative practice to make videos, music, sound installations, and film soundtracks. Developing Flocking has been a huge creative catalyst for me. It has pushed and pulled my work in strange directions: sometimes towards complex sound and video modulations that combine Flocking with Aconite; at other times, working on Flocking has driven me away from computational art entirely, seeking a break from programming in quiet, meditative observations with my camera. Even when I'm not using Flocking to make art, I still feel its presence in and influence on my way of seeing and hearing the world.

Recently, I've used Flocking to create:

Development on Flocking has been quiet recently, largely on account of my finishing an MFA thesis while launching a major new personalized accessibility project. However, as my time starts to free up over the next few months, I will be working more on Flocking again. I have a number of major new features planned in the next year, including:

  • Integration of Bergson, a new scheduler I wrote specifically for Flocking. Bergson will provide a much more robust scheduling subsystem for Flocking, driven by the primary sample generation clock so that block-accurate actions can be easily synchronized.
  • A complete refactoring of the Flocking SynthDef format, introducing wire specifications, which will finally allow for an easy and declarative way to define "diamond-shaped" signal graphs and other types of multiple input/output connections between unit generators in a Flocking synth.
  • Greater support for the Web Audio API, including the ability to interleave Web Audio nodes with Flocking's JavaScript unit generators. This will provide a larger palette of signal processing algorithms and greater performance when using Flocking in graphics- or interaction-heavy applications.
  • A vastly improved live development environment, which will support the creation of Flocking instruments with multiple, synchronized representations; both JSON5-based code and visual boxes-and-wires editing will be supported simultaneously. Valid changes to playing synths will be heard immediately without having to stop and start playback. You can imagine where this might lead in terms of a different approach to live "coding," where changes can be targeted to synths on-the-fly as JSON5-based diffs, enabling the creation of performance environments that symmetrically blend both GUIs and live "data merging."
  • Vastly improved documentation, so that getting started with Flocking doesn't require newcomers to puzzle through obscure examples and sift through comments in the source code.

Flocking wouldn't have lasted this long without its community. I am frequently surprised to learn about and and listen to the projects that others have built with Flocking, and these have been a real source of inspiration for me. In particular, I want to thank a few specific people who have influenced and supported Flocking over the years:

  • Antranig Basman, whose ideas are everywhere in Flocking, and who patiently watched me make all-too-familiar mistakes so that I could learn them on my own, yet was always full of supportive ideas along the way.
  • Adam Tindale, whose immediate enthusiasm for and adoption of Flocking at an early phase in the project gave me incentive to fix bugs, and his encyclopedia knowledge of computer music systems gave me a a comparative framework with which to develop new features. Not to mention his always-virtuosic performances and compositions made with Flocking!
  • Alex Geddie, who has patiently answered endless questions about signal processing, SuperCollider, and computer music usability over the years. His aesthetic sensibility is everywhere in Flocking.
  • Darcie Clark, who waited patiently on countless occasions for me to finish writing a unit test or tracing a bug before eating dinner, and for recognizing the importance of Flocking on my creative and social life.

Happy birthday, Flocking. Here's to five more years of weird and wonderful creative explorations!

Clone this wiki locally