I’ve translated tutorial 4! That was several months longer than I intended to wait. There were extenuating circumstances.

My Clojure skills, as well as my understanding of both SuperCollider and Overtone, have improved dramatically since I tried translating Tutorial 3. This only took me an afternoon, and everything worked as expected.

The only thing I got stuck on for a couple hours is triggered params. In SCLang, you can prepend a ‘t_’ to a parameter name on the synth-form function (the second argument to SynthDef) and it will automatically create a triggered control Ugen. Overtone does not do this, and from a design perspective I think that’s a good call. But how on earth do I get, say, a gate to automatically revert to 0 after I set it to something else?

I went reading source code, but all I really needed to do was re-read the doc string for Overtone’s defsynth.

 

Params can also be given rates. By default, they are :kr, 
however another rate can be specified by using either a 
pair of [default rate] or a map with keys :default and rate:

(defsynth foo [freq [440 :kr] gate [0 :tr]] ...)
(defsynth foo [freq {:default 440 :rate :kr}] ...)

Anyway, all you have to do to get a TrigControl instead of a Control Ugen is to set the parameter’s rate to :tr using either syntax demonstrated above. See also: http://doc.sccode.org/Classes/SynthDef.html

I’m really loving Overtone. Once I really started to understand how SuperCollider works, I found that Overtone is usually pretty faithful to its design. You just write the same thing in Clojure. Sometimes there are small differences like the one above, but they’re typically improvements and they’re documented.

My code is here.

I can’t wait to get to buffers. Yeehaw.

More soon!

Being a musician is what brought me to computing in the first place. I tell prospective employers and clients ‘computing is my other guitar’ and it goes over well. It also happens to be true. Within 5 years I see myself working in pro audio, or perhaps writing some sonar computer vision type wizardry. Of course, I’ll also be making and performing music on a regular basis for the rest of my life.

So my interest brought me to SuperCollider and the like, but I lack classical math training. I dropped out of high school and didn’t even develop serious tech skills until I was 22 or so.

The concepts of DSP are implicit in working with SuperCollider and making music in general. Though I have long felt I needed a more explicit understanding, at the same time I felt daunted about teaching myself math as it relates to DSP the same way I’ve taught myself to code. I dunno what my block was, but I’d always lose momentum. Perhaps I wasn’t driven by the same obsessive curiosity. I have glossed over and understood it conceptually, but if I’m gonna do the kind of work I want to end up doing I’m going to need to walk through the concepts step-by-step and internalize them.

At a Clojure meetup recently, I mentioned my interest in DSP and lamented that I was gonna have to figure out some way to get to school in order to get the math I need. A fellow attendee said “Oh you can teach yourself that too.”  and told me to read the book ‘Understanding Digital Signal Processing’ by Richard Lyons. He told me it lays out all the math concepts you need and it’s very easy to digest without a prior background.

So far I have found that to be true, and I’ve got the momentum I’ve been searching for. In addition to taking notes, I’m gonna write code that demonstrates to myself the ideas being presented.

I’ve published my first such exercise on github:

https://github.com/beatboxchad/dsp_exercises/blob/master/muzak.c

At the end of September I lost my big sister, and although I have continued work on my Supercollider, Clojure, and other projects, I’ve done a terrible job of documenting it. I retreated back to Seattle from the Bay Area to mope among friends. I could say a lot on this subject, but this blog is intended to be more of an account of my professional and hobby work than a personal writing space. Suffice it to say that I had a bit of trouble functioning for most of October and November and had to change the timelines on my plans both personal and professional. I’ve played a lot of music and spent most of my time on friends’ couches. I am starting to get my wind back; hence this post.

I didn’t end up completing the work of translating SuperCollider tutorials into Overtone yet, though I will. My chops are up to the point where I could do it in a few days’ coding (I have stayed busy). But there seems to be a bug in how the Ugens get compiled and sent to the SC server. I haven’t done the legwork of verifying it (which could turn into the legwork of fixing it), but I intend to get to that soon as well. *EDIT* there’s no such bug. I was making several different kinds of mistakes in my early attempts at translating SC code into Overtone.

I was just really excited to make some noise, so I instead pored over the Overtone code until I could figure out how to instantiate nodes for synthdefs already loaded on the server, and still take advantage of Overtone’s studio system with all the groups, the mixer synth, the FX chain and other conveniences. Thus, I’m currently writing all my effects and synths in SuperCollider and just controlling everything from Overtone. It’s a hack, but at the time it was the path of least resistance and allowed me to continue to develop my skills.

So I got some code written and a rig built up to the point where I could take it to a jam session and get sound in one end and out the other with a couple simple effects. Having achieved that milestone, I’m currently in a long grind of just building up a library of nifty effects and synth tones. In addition I have begun an earnest study of DSP, am making music with Renoise and some VST plugins (just to get used to designing synths without simultaneously thinking about code, though I will mess around with using SuperCollider synthdefs as well), and showing up at jam sessions with my guitar and trumpet.

I’m going to start with the rig as my personal effects rig for the trumpet. But where before I was chasing it obsessively, I’m currently letting the project breathe a little. A band/project has formed around all this with a skilled drummer and his music-producer brother, but I’ll let that project speak for itself as it develops (I mention it here because it accounts for my more relaxed pace on the technical side of things — there’s writing and rehearsing afoot).

Around October it started to become especially urgent that I find work, so that’s divided my attention a little. In that pursuit I have:

  • written a toy in Clojure to mess around with large XML data sources, teaching myself how to use transducers in the process.
  • worked on a couple of Rails projects
  • wrote a Python script that fingerprints the website of all businesses retrieved from the Google Places API looking for issues I can call them about.
  • written a Luminus-based webapp with Vue.js on the frontend to track my contacts with these prospects
  • intermittently panicked

I think that more-or-less covers everything I’ve been up to that I’d like to share. As always, expect more soon, but for real this time.