Book Review: Supercollider for the Creative Musician

Dom Aversano

Supercollider for the creative musician.

Several years ago a professor of electronic music at a London University advised me not to learn Supercollider as it was ‘too much of a headache’ and it would be better just to learn Max. I nevertheless took a weekend course, but not long after my enthusiasm for the language petered out. I did not have the time to devote to learning and was put off by Supercollider’s patchy documentation. It felt like a programming language for experienced programmers more than an approachable tool for musicians and composers. So instead I learned Pure Data, working with that until I reached a point where my ideas diverged from anything that resembled patching cords, at which point, I knew I needed to give Supercollider a second chance.

A lot had changed in the ensuing years, and not least of all with the emergence of Eli Fieldsteel’s excellent YouTube tutorials. Eli did for SuperCollider what Daniel Shiffman did for Processing/P5JS by making the language accessible and approachable to someone with no previous programming experience. Just read the comments for Eli’s videos and you’ll find glowing praise for their clarity and organisation. This might not come as a complete surprise as he is an associate professor of composition at the University of Illinois. In addition to his teaching abilities, Eli’s sound design and composition skills are right up there. His tutorial example code involves usable sounds, rather than simply abstract archetypes of various synthesis and sampling techniques. When I heard Eli was publishing a book I was excited to experience his teaching practice through a new medium, and curious to know how he would approach this.

The title of the book ‘SuperCollider for the Creative Musician: A Practical Guide’ does not give a great deal away, and is somewhat tautological. The book is divided into three sections: Fundamentals, Creative Techniques, and Large-Scale Projects.

The Fundamentals section is the best-written introduction to the language yet. The language is broken down into its elements and explained with clarity and precision making it perfectly suited for a beginner, or as a refresher for people who might not have used the language in a while. In a sense, this section represents the concise manual Supercollider has always lacked. For programmers with more experience, it might clarify the basics but not represent any real challenge or introduce new ideas.

The second section, Creative Techniques, is more advanced. Familiar topics like synthesis, sampling, and sequencing, are covered, as well as more neglected topics such as GUI design. There are plenty of diagrams, code examples, and helpful tips that anyone would benefit from to improve their sound design and programming skills. The code is clear, readable, and well-crafted, in a manner that encourages a structured and interactive form of learning and makes for a good reference book. At this point, the book could have dissembled into vagueness and structural incoherence, but it holds together sharply.

The final section, Large-Scale Projects, is the most esoteric and advanced. Its focus is project designs that are event-based, state-based, or live-coded. Here Eli steps into a more philosophical and compositional terrain, showcasing the possibilities that coding environments offer, such as non-linear and generative composition. This short and dense section covers the topics well, providing insights into Eli’s idiosyncratic approach to coding and composition.

Overall, it is an excellent book that every Supercollider should own. It is clearer and more focused than The Supercollider Book, which with multiple authours is fascinating, but makes it less suitable for a beginner. Eli’s book makes the language feel friendlier and more approachable. The ideal would be to own both, but given a choice, I would recommend Eli’s as the best standard introduction.

My one criticism — if it is a criticism at all — is that I was hoping for something more personal to the authour’s style and composing practice, whereas this is perhaps closer to a learning guide or highly-sophisticated manual. Given the aforementioned lack of this in the Supercollider community Eli has done the right thing to opt to plug this hole. However, I hope that this represents the first book in a series in which he delves deeper into Supercollider and his unique approach to composition and sound design.

 

 

Eli Fieldsteel - authour of Supercollider for the Creative Musician
Eli Fieldsteel / authour of Supercollider for the Creative Musician

Click here to order a copy of Supercollider for the Creative Musician: A Practical Guide

Dom Aversano is a British-American composer, percussionist, and writer. You can discover more of his work at the Liner Notes.

Move slow and create things

Dom Aversano

Over Christmas I took a week off, and no sooner had I begun to relax than an inspiring idea came to mind for a generative art piece for an album cover. The algorithm needed to make it was clear in my mind, but I did not want to take precious time away from family and friends to work on it. Then a thought occurred — could I build it quickly using ChatGPT?

I had previously resisted using Large Language Models (LLMs) in my projects for a variety of reasons. Would outsourcing coding gradually deskill me? Whose data was the system trained on and was I participating in their exploitation? Is the environmental effect of using such computationally intense technology justifiable?

Despite my reservations I decided to try it, treating it as an experiment that I could stop at any point. Shortly prior to this, I had read a thought-provoking online comment questioning whether manual coding might seem as peculiar and antiquated to the future as programming in binary does now. Could LLMs help make computers less rigid and fixed, opening up the world of programming to anyone?

While I had previously used ChatGPT to create some simple code for Supercollider, I had been unimpressed by the results. For this project, however, the quality of the code was different. Every prompt returned P5JS code that did exactly what I intended, without the need for clarification. I made precisely what I envisioned in less than 30 minutes. I was astonished. It was not the most advanced program, but neither was it basic.

Despite the success, I felt slightly uneasy. The computer scientist Grady Booch wrote that ‘every line of code represents an ethical and moral decision.’ It is tempting to lose sight of this amid a technological culture steeped in a philosophy of ‘move fast and break things’ and ‘it’s better to ask for forgiveness than permission’. So what specifically felt odd?

I arrived at what I wanted without much of a journey, learning little more than how to clarify my ideas to a machine. This is a stark contrast to the slow and meticulous manner of creation that gradually develops our skills and thinking, which is generally considered quintessential to artistic activity. Furthermore, although the arrival is quicker the destination is not exactly the same, since handcrafted code can offer a representation of a person’s worldview, whereas LLM code is standardised.

However, I am aware that historically many people — not least of all in the Arts and Crafts movement — expressed similar concerns, and one can argue that if machines dramatically reduce labourious work it could free up time for creativity. Removing the technical barrier to entry could allow many more people’s creative ideas to be realised. Yet efficiency is not synonymous with improvement, as anyone who has scanned a QR-code menu at a restaurant can attest.

The idea that LLMs could degrade code is plausible given that they frequently produce poor or unusable code. While they will surely improve, to what degree is unknown. A complicated project built from layers of machine-generated code may create layers of problems: short-term and long-term. Like pollution, its effects might not be obvious until they accumulate and compound over time. If LLMs are trained on LLM-generated code it could have a degradative effect, leading to a Model Collapse.

The ethics of this technology are equally complicated. The current lack of legislation around consent on training LLMs means many people are discovering that their books, music, or code has been used to train a model without their knowledge or permission. Beyond legislating, a promising idea has been proposed by programmer and composer Ed Newton-Rex, who has founded a company called Fairly Trained, which offers to monitor and certify different LLMs, providing transparency on how they were trained.

Finally, while it is hard to find accurate assessments of how much electricity these systems use, some experts predict they could soon consume as much electricity as entire countries, which should not be difficult to imagine given that the Bitcoin blockchain is estimated to consume more electricity than the whole of Argentina.

To return to Grady Booch’s idea that ‘every line of code represents an ethical and moral decision’ one could extend this to every interaction with a computer represents an ethical and moral decision. As the power of computers increases so should our responsibility, but given the rapid increases in computing power, it may be unrealistic to expect our responsibility to keep pace. Taking a step back to reflect does not make one a Luddite, and might be the most technically insightful thing to do. Only from a thoughtful perspective can we hope to understand the deep transformations occurring, and how to harness them to improve the world.

Strategies experts use to learn programming languages

Dom Aversano

"U.S. Army Photo" from the archives of the ARL Technical Library. Left: Betty Jennings (Mrs. Bartik), right: Frances Bilas (Mrs. Spence).

Learning a programming language – not least of all one’s first language – can feel intimidating, especially when observing others doing complex tasks with apparent ease. Furthermore, the circumstances in which one learns can vary greatly. One person might be 19 years old and entering a degree program with plenty of free time, while another is moonlighting on an old computer between childcare and other responsibilities. Regardless of our circumstances, we can adopt an attitude and approach to learning that allows us to make the best use of the time we have. What follows is some advice with tips from some leading music programmers and artists. 

Enjoy learning

It might sound trite, but it is essential. It is easy to motivate ourselves to do something we love. If learning is enjoyable you will do more with greater focus and energy. Create a beautiful environment to work in, inspiring projects to develop, and desirable long-term goals that are ambitious enough to keep you practising regularly. Create the conditions in which action comes naturally, since to borrow the words of Pablo Picasso, ‘Action is the foundational key to all success.’

Some people like learning by exploring and modifying existing code written by others. I envy them because I think they move faster. However I find more pleasure in learning from the ground up so I understand every line of code in my project. My preference is to follow a tutorial (e.g. Dan Shiffman’s) and do small exercises. – Tim Murray Browne

Learn through projects

We learn by doing. Tutorials are essential, but if they are not complemented with the development of projects you might experience ‘tutorial fatigue’, losing motivation and inspiration amid a constant reel of videos. Start with simple programs you can build quickly before working up to more complex ones. Small and simple is beautiful. 

I have a folder where I document and store all my ideas for projects. I write everything down in plain language describing what the program will do without any consideration for how it will work. Only after this do I give some consideration to how the program might work architecturally, before deciding if I should create it now, wait, or simply store it as an idea. Even if I never create the project, documenting my ideas demonstrates they have a value I would not entrust to just memory.

Love the one you’re with

It is better to learn one language expertly than five shallowly. Take time to decide what you want to learn rather than impulsively jumping in, after all, you might spend thousands of hours with the program so you want it to align with your character and needs. Give yourself a realistic amount of time to learn it before embarking on another language, unless you genuinely have the time to learn languages simultaneously. 

I learned Pure Data partly because I was attracted to the way it looked. That might seem superficial but I know visual aesthetics affect me, and if I was going to look at a program for hundreds or thousands of hours I wanted to like its appearance. I now prefer traditional code, but my love for Pure Data and its black-and-white simplicity taught me to think as a coder. 

Do not worry about being mocked for asking questions – asking others for help builds relationships, strengthens the community, and can even lead to employment. If people want to put you down for asking basic questions, it says more about them than about you, so always reach out! – Elise Plans

Build a physical library

A friend who worked as a programmer for a big technology company advised me not to read books about programming, arguing that learning to program is non-linear and therefore unsuited to books. This did not work for me. We all have the same access to digital information, but physical libraries reflect our interests, priorities, and values, and act as private mental spaces. 

Although Daniel Shiffman’s books and the SuperCollider book are available for free online, I bought physical copies as I find reading from paper conducive to a quieter, less distracted, and more reflective state of mind. As it happens I often read the books in a non-linear manner, reading the chapter that seems most appealing or relevant to me at that time. My library extends out in different directions, containing musicology and biography, as well as physics and philosophy, yet all feel somehow connected. 

Read other people’s code

A revelation for most people learning to code is that there is rarely a single correct way to do something. Coding is a form of self-expression that reflects our theories and models of the world, and as with all creative activities, we eventually develop a style. Reading other people’s code gives you exposure to other approaches, allowing us to understand and even empathise with their creative world. Just as when we learn a foreign language we read books to help us, reading code allows us to internalise the grammar and style of good code. 

Music technology and programming may seem limitless in possibility – but you quickly find limitations if you step outside of conventional concepts of what music has been defined as before. So if you aren’t running up against limitations, it’s likely you aren’t thinking in a way which is original or ambitious enough. – Robert Thomas

Be wary of the promises of AI

Machine learning is impressive, but as Joseph Weizenbaum’s famous program ELIZA created at MIT in 1964-66 demonstrated, we have a potentially dangerous tendency to project mental capabilities onto machines that do not exist. 

While learning SuperCollider I used ChatGPT to help with some problems. After the initial amazement at receiving coherent responses from a machine using natural language, a more sober realisation came to me that the code often contained basic errors, invented syntax, and impractical solutions that a beginner might not recognise as such. It was obvious to me that ChatGPT did not understand Supercollider in the meaningful sense that expert programmers did. 

Machine learning is undoubtedly going to influence the world hugely, and coding not least of all, but the current models have a slick manner of offering poor code with absolute confidence. 

Photo by Robin Parmar
For mistakes that I may have made – lots of them! All the time. It’s probably cliche to say, but understanding your mistakes can be the best way to learn something. Although you come to think of them less as mistakes and more as happy accidents. Sometimes typing the “wrong” value can actually give you an interesting sound or pattern that you weren’t intending but pushes you in a new creative direction. – Lizze Wilson, Digital Selves

Hopefully, some of the ideas and advice in this article have been helpful. There are of course as many ways to learn a programming language as there are people, but regardless of the path, there is always a social element to learning and collaboration. And in that spirit, if you have any advice or ideas that you would like to share, please feel free to do so in the comments below.

A guide to seven powerful programs for music and visuals

Dom Aversano

What should I learn? A guide to seven powerful programs for music and visuals.

The British saxophonist Shabaka Hutchings described an approach to learning music that reduces it down to two tasks: the first is to know what to practise, and the second is to practise it. The same approach works for coding, and though it is a simple philosophy that does not necessarily make it easy. Knowing what to practise can feel daunting amid such a huge array of tools and approaches, making it all the more important to be clear about what you wish to learn so you can then devote yourself without doubt or distraction to the task of studying.

As ever the most important thing is not the tool but the skills, knowledge, and imagination of the person using it. However, nobody wants to attempt to hammer a nail into the wall with a screwdriver. Some programs are more suited to certain tasks than others, so it is important to have a sense of their strengths and weaknesses before taking serious steps into learning them.

What follows is a summary and description of some popular programs to help you navigate your way to what inspires you most, so you can learn with passion and energy.

Pure Data

Pure Data is an open-source programming language for audio and visual (GEM) coding that was developed by Miller Puckette in the mid-1990s. It is a dataflow language where objects are patched together using cords, in a manner appealing to those who like to conceptualise programs as a network of physical objects. 

Getting started in Pure Data is not especially difficult even without any programming experience, since it has good documentation and plenty of tutorials. You can build interesting and simple programs within days or weeks, and with experience, it is possible to build complex and professional programs.

The tactile and playful process of patching things together also represents a weakness of Pure Data, since once your programs become more advanced you need increasing numbers of patch cables, and dragging hundreds – or even thousands – of them from one place to another becomes monotonous work.

Cost: free

Introductory Tutorial 

Official Website

Max/MSP/Jitter and Max for Live

Max/MSP is Pure Data’s sibling, which makes it quite easy to migrate from one program to the other, but there are significant and important differences too. The graphical user interface (GUI) for Max is more refined and allows for organising patching chords in elegant ways that help mental clarity. With Max for Live you have Max built into Ableton – bringing together two powerful programs.

Max has a big community surrounding it in which you can find plenty of tutorials, Discord channels, and a vast library of instruments to pull apart. Just as Pure Data has GEM for visualisation Max has Jitter, in which you can create highly sophisticated visuals. All in all, this represents an incredibly powerful setup for music and visuals.

The potential downsides are that Max is paid, so if you’re on a small budget Pure Data might be better suited. It also suffers from the same patch cord fatigue as Pure Data, where you can end up attaching cords from one place to another in a repetitive manner.

Cost: $9.99 per month / $399 permanent licence or $250 for students and teachers

Introductory Tutorial

Official Website

SuperCollider

SuperCollider is an open-source language developed by James McCartney that was released in 1996, and a more traditional programming language than either Pure Data or Max. If you enjoy coding it is an immensely powerful tool where your imagination is the limit when it comes to sound design, since with as little as a single line of code you are capable of creating stunning musical outputs. 

However, SuperCollider is difficult, so if you have no programming experience expect to put in many hours before you feel comfortable. Its documentation is inconsistent and written in a way that sometimes assumes a high level of technical understanding. Thankfully, there is a generous and helpful online forum that is very welcoming to newcomers, so if you are determined to learn, do not be put off by the challenge.

An area that SuperCollider is lacking in comparison to Max and Pure Data is a sophisticated built-in environment for visuals, and although you can use it to create GUIs, they do not have the same elegance as in Max.

Cost: free

Introductory Tutorial 

Official website

TidalCycles

Though built from SuperCollider, TidalCycles is nevertheless much easier to learn. Designed for the creation of algorithmic music, it is popular in live coding or algorave music. The language is intuitive and uses music terminology in its syntax, giving people with an existing understanding of music an easy way into coding. There is a community built around it complete with Discord channels and an active community blog.

The downsides to TidalCycles are the installation is difficult, and it is a somewhat specialist tool that does not have as broad capabilities as the aforementioned programs.

Cost: free

Introductory Tutorial 

Official Websit

P5JS

P5JS is an open-source Javascript library that is a tool of choice for generative visual artists. The combination of a gentle learning curve and the ease of being able to run it straight from your browser makes it something easy to incorporate into one’s life, either as a simple tool for sketching out visual ideas or as something much more powerful that is capable of generating world-class works of art.

It is hard to mention P5JS without also mentioning Daniel Shiffmen, one of the most charismatic, humorous, and engaging programming teachers, who has rightly earned himself a reputation as such. He is the authour of a fascinating book called The Nature of Code which takes inspiration from natural systems, and like P5JS is open-source and freely available. 

Cost: free

Introductory Tutorial

Official Website

Tone.js

Like P5JS, Tone.js is also a Javascript library, and one that opens the door to a whole world of musical possibilities in the web browser. In the words of its creators it ‘offers common DAW (digital audio workstation) features like a global transport for synchronizing and scheduling events as well as prebuilt synths and effects’ while allowing for ‘high-performance building blocks to create your own synthesizers, effects, and complex control signals.’

Since it is web based one can get a feel for it by delving into some of the examples on offer

Cost: free

Introductory Tutorial

Official website

TouchDesigner

In TouchDesigner you can create magnificent live 3D visuals without the need for coding. Its visual modular environment allows you to patch together modules in intuitive and creative ways, and it is easy to input midi or OSC if you want to incorporate a new visual dimension to your music. To help learn there is an active forum, live meetups, and many tutorial videos on this site. While the initial stages of using TouchDesigner are not difficult, one can become virtuosic with the option of even writing your own code in the programming language Python. 

There is a showcase of work made using TouchDesigner on their website which gives you a sense of what it is capable of.

Cost: All features $2200 / pro version $600 / free for personal and non-commercial use. 

Introductory Tutorial

Official Website

Ample samples – Introduction to SuperCollider for monome norns – On-demand

Level: Beginner (many fundamentals of SuperCollider will be covered)

SuperCollider is an amazing open-source audio synthesis and composition tool.

In this workshop we will focus on sampling and learn how to use SuperCollider to make a fully featured sample player + looper which can be used for triggering drum kits, sequencing partitions, or a chaotic breakbeat style system. We will also learn the basics of applying effects, and finally how to integrate the resulting SuperCollider code into a new script for monome norns.

Summary

  • Learn how to use SuperCollider,

  • Learn about sample playback in SuperCollider

  • Become familiar with sample playback and effect elements of SuperCollider

  • Integrate a playback engine into monome norns

By the end of this workshop, you will be able to:

  • Learn how to use SuperCollider starting from the basics

  • Understand SuperCollider UGens for sample playback and effects

  • Write SuperCollider code that can apply effects to sounds

  • Play SuperCollider samples in a monome norns script

Session Study Topics

  • Understanding UGens for sample playback

  • Develop SuperCollider code for effective sample playback

  • Use UGens to apply effects to samples

  • Norns integration with midi and samples

We have a number of sponsorship places,if the registration fee is a barrier to you joining the workshop please contact laura@stagingmhs.local.

 

Requirements

About the workshop leader

Zack Scholl is a Seattle, Washington based tinkerer who releases music and norns scripts as “infinite digits”.

He has been programming for 12 years as part of his job developing instrumentation and conducting experiments to understand biophysical properties of human proteins.

Tone to drone – Introduction to SuperCollider for monome norns – On-demand

Level: Beginner (many fundamentals of SuperCollider will be covered)

SuperCollider is an amazing open-source audio synthesis and composition tool. In this workshop we will gain understanding of SuperCollider while making a musical drone – a minimal sustained sound with dynamic harmonic variations, in the vein of Sunn O))) or La Monte Young. We will also learn how to add drones to the monome norns in your own drone script.

Summary: 

  • Learn how to use SuperCollider, starting from the basics

  • Learn about sound synthesis with SuperCollider

  • Become familiar with sound synthesis elements of SuperCollider

  • Integrate a SuperCollider script into a monome norns script

By the end of the workshop, you will be able to:

  • Understand the fundamentals of SuperCollider code

  • Understand SuperCollider UGens for audio synthesis and mixing

  • Design your own drone which you can run from SuperCollider

  • Add SuperCollider code into a norns script

Session Study Topics

  • Basics of coding in SuperCollider

  • Workings of audio synthesis UGens and how they can be combined

  • Adding UGens for sound modulation

  • Communication between norns scripts and SuperCollider

 

We have a number of sponsorship places,if the registration fee is a barrier to you joining the workshop please contact laura@stagingmhs.local.

 

Requirements

  • A computer and internet connection
  • A webcam and mic
  • A Zoom account
  • A norns device

About the workshop leader 

Zack Scholl is a Seattle, Washington based tinkerer who releases music and norns scripts as “infinite digits”.

He has been programming for 12 years as part of his job developing instrumentation and conducting experiments to understand biophysical properties of human proteins.

Live Coding Sound with TidalCycles – On demand

Level: Beginner

Live coding is the act of manipulating algorithms in real time to change an ongoing artistic process, like music or visuals. In this workshop, we will begin with an introduction to live coding, highlighting various technologies and artists, before learning how to live code sound using TidalCycles. This workshop aims to provide an introduction to live coding to encourage others to incorporate live coding technologies and techniques into their practice.

Session Learning Outcomes

By the end of this session, a successful student will be able to:

  • Create a variety of patterns

  • Use functions to vary sequences

  • Add effects to manipulate and process sounds

  • Identify various technologies and practitioners of live coding

Session Study Topics

  • An introduction to various live coding technologies and artists:

    • Sonic Pi

    • TidalCycles

    • FoxDot

    • Hydra

  • How to create various patterns and sequences

  • Functions for varying sequences

  • How to add effects to sound

Requirements

  • A computer and internet connection

  • A web cam and mic

  • A Zoom account

TidalCycles
Software to download:

Note: To run TidalCycles on your machine, you will need to install software in addition to the applications/packages listed above. Follow these instructions to see how to do this on your machine.

To use an online version of TidalCycles (*no installation required):

Visit the Estuary Live Coding Server. Select ‘MiniTidal’ as your language of choice.

About the workshop leader 

Melody Loveless is an artist, creative technologist, and educator based in Brooklyn, NYC. Her work ranges from live coding performance, generative sound installations, multisensory performance, and more. She currently teaches at Hunter College and Harvestworks and is part of Cycling 74’s Max Certified Trainer Program.

About
Privacy