topics: generative music, beginning programming, code sketching
Iāve been playing modular synth now for almost 2 years, though itās really only in the past 3 or 4 months that itās become a daily studio practice for me. Meanwhile, for the past several years Iāve mainted a daily code sketching practice, where I often (sometimes daily, sometimesā¦..not) make short little projects: games, generative visual art, strange visualizations, collage via code, and the like.
Bless this mess
Iāve made experimental music in fits and starts for the past 20 years or so. Iāve been programming for perhaps the past five or six.
One of the reasons I got into playing modular synth is to enter the music hardware world, as opposed to using software. I wanted to make intuitive changes by twirling knobs, hitting buttons. I wanted to hit a switch and things turned on and away I go. Itās not quite that simple. Itās taken me a good year and a half to fully feel like I am comfortable with the basics of control voltage, which operates very differently from pure audio synthesis. And now that Iām comfortable, I still want to say that thereās a lot thatās still magical. As I teach intro programming classes at uni, I can tell for many beginner students that there are moments where something works, or doesnāt work, and the students canāt say exactly why. Often this comes down to syntax issues, though not always. Iām sometimes in a similar place with my modular, and for this reason, I would definitely say Iām not an expert. And in fact, although I do a lot of teaching, Iād probably want maybe 6 more months under my belt to feel like Iām ready to publicly teach a synthesis class.
But the process of creating music on my eurorack almost daily for the past 3 months has paid off, and Iāve made rapid improvements to my music output as well as my understanding and my studio workflow. I have a flexible and intuitive ability to rapidly make music and little experiments now, so things have almost switched to where Iām more comfortable on the synth and wish coding could become even more like this. When you do a few lines of experimental code sketching, you MAY create something beautiful. But more than likely, it may just not run. You start with debugging. In hardware synthesis, when you turn on and plug in a cable or two, even if itās not beautiful, itās something! Thereās sound. And you can immediately patch in a cable and filter the sound or modulate it for example.
We can try to replicate this by having prebuilt libraries, functions (aka ābase codeā) to be used in our code sketches. A modular synth approach to creative coding can be found in Max/MSP/Jitter for example, or VVVV, or TouchDesigner, or PureData, which are all node-based āpatchableā environments for creating interactive art and music. Maxās roots go back almost 30 years, and were originally audio patching only, though includes visual tools. VVVV is a younger development environment, which has taken hold in Europe. TouchDesigner is a more commercial tool, also patchable, used for stage, concert, installations, or corporate āactivationsā.
Glitch.com is a current corporate website with development environment, the ability to share and collaborate on code and to deploy to a server. Though not an art and music-focused environment per se, it can be used for creative coding, by using the p5.js library, for example with Ted Davisās p5live, or Olivia Jackās Hydra for livecoding as another example. I mention Glitch.com because one thing it does well is support the idea of starting with base code. You can browse someone elseās or your own past hosted project, then click remix to make a new copy of this running program that you can then modify and see updates live in the browser. Itās a nice way to work. Itās still not quite as instant as turning a knob in a modular synth, but it does speed up a bit our previous process of write code, save, wait for server to notice, re-render/display.
To be honest, I havenāt put enough time into Max to see if it is a good translation of hardware synthesizers into a soft similar coding environment. When I try to use Max, I simply donāt know all the possible commands that are available, and how to plug them together. Itās not quite as visually obvious to me what to do the way a synth is when laid out in front of me. But people do share their Max patches, and you can copy and paste them in. Maybe itās time for me to become a student and learn the basics. Then I imagine I should try out PD (PureData), its open-source cousin. Iāve found it fairly intuitive to jump between the basics of object-oriented programming languages. Perhaps jumping between these two wonāt be that difficult either.
To wrap up here:
Hardware where you have the full ecosystem laid out entirely in front of you can be overwhelming but at least gives you the full map of potentialities. There is a built-in āstarterā when working with hardware that is nice to try replicate when working in code. All of these things take time to learn; youāre not an expert when you first start. But expertise is not necessarily the goal at the beginning: developing some kind of ongoing practice of expression is the goal. From this practice gradually over time one develops the intuition thatās needed to be a better practitioner and creator.