Mike Wilson's Blog

I was a MA/MST student at Stanford's Center for Computer Research in Music and Accoustics.

This is my weblog.

Click here for my main page.


I finally got a bit of time to do some programming at home for fun.

I started off by generating bandlimited square and triangle waves for
use with MilkyTracker.  I've been wanting to track a module for a
while now and this is another step towards getting my instruments

I used simple additive synthesis in Octave.  MilkyTracker supports
sixteen samples per instrument, so I generated sixteen different
bandlimited waveforms which each could scale over six notes.  The
bandlimiting was set so that the highest harmonic was below half the
final output sampling rate for the highest note in each group of six.

Tim Stilson and Julius Smith wrote a paper on bandlimiting that had
a good survey of other techniques as well.  Making pulse trains with
different duty cycles isn't as straightforward to do with additive
synthesis; at least it's not as clear to me.  I might try some of the
other techniques if I can't get this to work out.

Still definitely a work in progress but once I get something good I
will try to write a tutorial and of course I will make some music
(retro chiptune style).

The paper noted that pitch error should be less than one tenth of a
percent in order to be imperceptible.  I was able to control the error
to some degree by adjusting the sampling rate of the samples I
generated (which in turn changed the number of samples that were
generated per period).  I'm not sure if MilkyTracker is doing some
compensation for me, but they sound pretty good when I play them
against other pieces of music.

After that I threw together a simple effects chain in ChucK and
re-wrote a polyphonic MIDI wrapper to the STK instruments that are
built in to the language (forgot to copy my development version before
I left the States).  Having a more powerful laptop means I can run
more effects, and have polyphony greater than 8, even with the
standard kernel!  It was a lot of fun to play around with.

I've really come to like how easy it is to throw things together in
ChucK.  Its live-coding focus really shows.

I also bought the SuperCollider book and have been meaning to dig into
it at some point.  SuperCollider is another computer music language,
with a great history and large userbase.  People from CCRMA have
started a small group for going through the book, but since I'm in a
different timezone I haven't been (virtually) attending.  Still, it
seems like it might offer a powerful way to think about some computer
music concepts so I want to give it a shot.

It's good to have various languages and APIs to tackle different types
of problems with.  ChucK is good for rapidly prototyping and
time-dependent interactions.  Faust is good for designing filters, and
as I have learned at CCRMA "everything is a filter."  And for things
that are worth the extra time, manual LADSPA/DSSI/VST/LV2 (the last of
which I have yet to really dig into) can provide something more
"packaged" and efficient.

Really what I feel like I'm missing the most is a higher-level
compositional environment.  I like Rosegarden a lot, but using a MIDI
sequencer imposes certain constraints.  Module trackers are great but
I would say they have an even stronger influence on how the process
feels.  Full-fledged DAWs like Ardour or Pro Tools are nice for
working with recordings but have limited synthesis control ability.
And doing things manually in code, even in ChucK, can get pretty

Of course, all of these are appropriate for certain types of problems
or compositions and not for others.  I still feel like there is a
problem domain that I don't have a good tool for, and I'm hoping that
SuperCollider can fill that gap.  In the end we are all forced to use
the best tools we have available (or create our own).  So it's always
good to know about more tools.

And to use them to make music.

email mwilson@alumni.caltech.edu
Disclaimer: the views herein are my own and do not represent the views of Stanford University. All material copyright Michael J. Wilson.