Parallel processing in SuperCollider using SuperNova

The SuperCollider sound server scsynth is one of the most finely tuned and efficient synthesis engines out there. For most people on most modern computers, they will rarely meet limitations in terms of effeciency. That said, scsynth does have one potential for optimization: Parallelization. And this is where supernova comes into the picture. The original scsynth sound server in SuperCollider, like lots of other audio software, runs on one core and so your computer’s single core performance is a big limitation for the possibilities of scsynth.
Read more →

Neovim as a SuperCollider IDE

SuperCollider is my favourite programming language for music and sound and I use it all the time. The programming language comes with an IDE that is quite capable, but I for one prefer doing all of my coding in one editor (sometimes I write C++, lua and SuperCollider in one and the same project and this allows me to do it in just one editor instance) and that editor for me is NeoVim.
Read more →

Getting started with Faust for SuperCollider

Update February 2022: faust now comes with the faust2sc.py tool to make this all a lot easier. The instructions below have been updated to reflect that. I recently started toying around with Faust. Faust is a functional programming language specifically designed for audio manipulation. One of the many strengths of Faust is it’s compiler backends that allows the user to compile Faust code to almost any end target - including microcontrollers, JUCE/VST plugin projects, Pure Data, Max and SuperCollider - with the same Faust code.
Read more →

Tutorial: How to write plugins for SuperCollider using C++

My amazing workplace allowed me time during the Covid-19 lockdowns in Oslo to spend time improving my C++ and DSP skills. The result of this is a bunch of plugins for SuperCollider, some of which are already released as well as a trunk of Notam plugins that are to be announced. The process of creating server plugins (aka UGens) for SuperCollider is one of the most fun and gratifying ways one can experiment with DSP and C++ in my opinion.
Read more →

Automatically build, compile and release SuperCollider plugins using Github Actions

Since the main SuperCollider github repository moved to using Github Actions to automatically build, compile and release cross platform, I felt intrigued to use the same technology to do the same for SuperCollider plugins. There is a number of amazing SuperCollider plugin repositories on Github - a lot will demand that the user compiles the sourcecode themselves to use the plugins. For people used to CMake and/or a Linux-ey workflow of compiling, this is not a big problem but for a lot of others (most people perhaps), it really is a doorstopper.
Read more →

A midi controller in a box of screws

I recently built version 2 of a “master volume control” midi controller that I had made before. This version is slightly improved on the former, the main improvement being that if you press the button while booting the device it goes into 14 bit midi mode (leveraging 13 of the Teensy’s bits for this) to allow high resolution on the potentiometer’s input. The controller is very cheap and simple to make.
Read more →

Helpful SuperCollider plugin macros

This is a transcription of Dan Stowell’s very helpful table in the SuperCollider Book (MIT), slightly edited and transcribed for the “new” c++ style for writing plugins. It contains some of the macros available when writing UGens/Plugins in c++ in SuperCollider. This repo contains example code for writing plugins in both the “old” and “new” style which I found helpful in understanding this subject. Also check out this cookiecutter template for generating plugins and the Server Plugin API.
Read more →

Notes on writing SuperCollider plugins

This post is a collection of notes on how to write plugins for SuperCollider. This post will be updated as I go along. Useful links # This repo contains example code for writing plugins in both the “old” and “new” style which I found helpful in understanding this subject. Also check out this cookiecutter template for generating plugins and the Server Plugin API. The two different styles # There are two different headers that contain SuperCollider’s plugin boiler plate code.
Read more →

Esp32 Simple Osc Receiver

Lately I have started experimenting with the very cheap and powerful ESP32 microcontrollers. Today I made a simple example of a firmware which receives OSC from a computer and then blinks the on-board LED according to the incoming message and I packaged it all as an easy to clone/copy/use platformio project (mostly for myself). The firmware uses CNMAT’s OSC library: #include "Arduino.h"#include "WiFi.h"#include <OSCMessage.h> WiFiUDP Udp; // A UDP instance to let us send and receive packets over UDP int LED_BUILTIN = 2; // Options int update_rate = 16; // Network settings char ssid[] = "wifiname"; // your network SSID (name) char pass[] = "wifipassword"; // your network password unsigned int localPort = 8888; // local port to listen for OSC packets void setup() { pinMode(LED_BUILTIN, OUTPUT); /* setup wifi */ WiFi.
Read more →

Working with 14bit Midi using a Teensy microcontroller and Supercollider

Lately I have been experimenting with 14bit MIDI and found it to be a huge revelation for my work with SuperCollider. Often, the regular data range of MIDI (0-127) is way too choppy and coarse for nice interactions with your systems and instruments in SuperCollider, but 14 bit MIDI provides a resolution of 16384 steps which is great. This is actually achieved quite cleverly by combining two MIDI CC signals in to one.
Read more →

Sketch for a granular cloud generator in SuperCollider

A cloud generator is basically a synthesis process that generates a lot of micro sound events (grains) at the same time. This as a whole becomes a bigger textural structure called a “cloud” generally. I have done a lot of experiments lately using SuperCollider’s pattern library to sequence micro compositions on a per-sound-particle basis, but to take a break from that work (which rarely leads to succesful results I have to say), I challenged myself a bit and tried to make an audio rate granular synthesis cloud generator.
Read more →

Control voltage and SuperCollider: Using the open source module Ornament & Crime as a midi-cv interface

My Ornament & Crime build (the Mini OC version). The USB connector on the Teensy on the back of the module has been rewired to a Neutrik USB connector attached to a panel next to it (the grey panel). I have tried quite a few different approaches to integrating my modular synthesizer with my SuperCollider workflow and I have found most them to be disappointing, extremely expensive and or inflexible.
Read more →

Networked audio using Raspberry Pi 4 (zita-njbridge and SuperCollider)

Jack is an incredibly flexible piece of software for making audio connections. It’s mostly used to connect and patch virtually within one computer but it has a range of amazing extra features for connecting things in alternative ways. This is exploited to it’s fullest in the zita-njbridge package. To quote from the manual on zita-njbridge: The zita-j2n (sender) and zita-n2j (receiver) applications allow to exchange up to 64 channels of full-quality uncompressed audio streams between two or more systems running the Jack audio server.
Read more →

Notes for setting up a Raspberry Pi 4 for audio work

These are notes for setting up a Raspberry Pi 4 single board computer for pro audio work. Specifically for running SuperCollider programs for interactive installations. I used Raspbian Lite for this, since my intention is to run the Raspberry Pi in headless mode, meaning using no display and no desktop environment (to save resources). It is presumed that you have installed Raspbian on an SD card, with ssh enabled (allowing you to log in to the pi over the network and execute commands using a terminal), and that you are logged in.
Read more →

Awesome SuperCollider: A curated list

A while ago I started compiling a list of links to SuperCollider based things that I found interesting and wanted to save for later. The list grew and at one point I organized it all in one public repository where the SuperCollider community could help curate links to awesome SuperCollider things and it has since then become a truly rich resource for things like tutorials, reading material, nice projects and tools.
Read more →

SuperCollider workshop at Notam, january 2020: Algorithmic composition using patterns

Here are the slides for the SuperCollider workshop at Notam, january 2020. Download slides Algorithmic composition using patterns # Notam, january 2020 # About me # Name: Mads Kjeldgaard Occupation: Composer and developer Work: The Norwegian Center for Technology and Art (Notam) Notam # Development for art projects (hardware, software, tech and artistic guidance) Communities / meetups (SC meetup among others), see website notam.
Read more →

Pattern workshop, Herlev Bibliotek 2019

Here are the materials for the SuperCollider workshop at Herlev Bibliotek, Denmark, November 2019. The SynthDef used for the workshop [can be downloaded here.][1] Download slides here. SuperCollider workshop # Herlev Bibliotek, Denmark, 2019 # About me # Name: Mads Kjeldgaard Occupation: Composer and developer Work: The Norwegian Center for Technology and Art (Notam) Notam # Development for art projects (hardware, software, tech and artistic guidance) Communities / meetups (SC meetup among others) Studios / 3D sound / VR / Visuals Courses My practice # Computer music / livecoding Field recording 3D sound composition Sound environments Contact info # mail: mail@madskjeldgaard.
Read more →

How to change the default synth in SuperCollider

The default synth sound in SuperCollider is a cheesy old piano sound. If you have ever tried the event pattern examples in the documentation of SuperCollider or been in the process of testing some pattern specifics of your own, you will have heard this extremely unconvincing synthesizer: A nice alternative: A triangle wave synth with a low pass filter # Imagine a utopian world where the default cheese-piano-synth has been replaced by a nicer, kind of gameboy like synth.
Read more →

Introduction to SuperCollider, Notam 2019

Here you will find the material for the introductory workshop held at Notam, Oslo in late summer 2019. The slides may be used as a sort of cheatsheet as well as notes for remembering the topics covered: • An overview: What is SuperCollider and what can you do with it? • The design and architecture of SuperCollider • Language basics: syntax, variables, expressions and functions • Learning resources: How to proceed from here
Read more →

SuperCollider tutorial: Mass producing SynthDefs

In SuperCollider, one of the most common ways of making sounds is by first defining a sort of recipe for a UGEN patch in a SynthDef and then from that recipe produce Synths that make sounds. But when you write a SynthDef, the patch architecture cannot change after the definition (as opposed to changing arguments in the patch). This becomes annoying when working with UGens that want to know the exact number of channels used, eg.
Read more →

SuperCollider tutorial: Easily render generative compositions as sound files using NRT

One of the many powerful features of SuperCollider is it’s ability to render sounds offline. This is called Non-Realtime Synthesis (NRT). NRT is for example useful for fast, offline processing of sounds, doing sound analysis or rendering generative compositions. NRT works like this (normally): First you write a list of server OSC messages (stored in a Score usually) which will tell the (offline) server what to do at what point in time when you decide to render it.
Read more →

GDB and SuperCollider plugins

We will assume that you already have SuperCollider running and that you have booted the server. Now you’d like to attach the GDB debugger to that process to see what happens when / if it crashes. Attach GDB to an already running scsynth process # First, we need to find the pid of the running process: ps -C scsynth -o pid h Then, we can use the number output from the command above to attach gdb:
Read more →