ChucK is a music programming language (and compiler/synthesizer) written by a professor (Perry Cook) and his students at Princeton University. I'm learning how to use it; I thought that writing about how to use it would help...

Thursday, August 25, 2005

Version (dracula) released

[chuck] version (dracula) released

Dear All,

chuck- is released. (Sorry.) This is the "v2" major release.
Additions include arrays, objects and classes, events, and more. A
full list of new and updated features can be found at the end of this

We have also put together a draft of a language specification
(finally). It is not complete yet and will be improved as (real) time
is advanced:

We have been testing this release along the way. However, since this
is the initial release, there is probably a healthy amount of egregious
bugs! Please let us know if you run into anything fishy (email one of
us directly, post to chuck-dev or the newly created chuck-users list).
Same goes for the documentation. Actually, any type of feedback would
be greatly appreciated.

Many thanks to the great people who have contributed ideas, code, and
time to this release! Thanks to everyone for being so patient with
this release.

Development shall continue as we fix the bugs, add new features (and
more bugs).

Please let us know if you run into any problems. HappY ChucKing!

ChucK Team
(Perry, Ananya, Phil, Adam, Ajay, Ge ...)


- (added) +=>, operator : 2 +=> i; (also) -=>, *=>, /=>, %=>
- (added) @=> for explicit assignment
this is the only way to make object reference assignments
- (added) implicit int to float casting
- (changed) cast now look like: 1.1 $ (int) => int i;
- (added) function call by chucking :
// call
(1,4) => math.rand2f => result;
// same as
math.rand2f(1,4) => result;

- (fixed) type system for existing types
- (added) forward lookup of classes and functions (mutual recursion)
- (added) stack overflow detection for massive recursion

- (added) language specification:

- (added) --probe prints all audio and MIDI devices
- (added) --log or --verbose logs compiler and virtual machine
- (added) --logN or --verboseN multi level logging
1 - least verbose
10 - most verbose

- (added) 'class' definitions : class X { int i; }
- (added) 'extends' keyword : class Y extends Event { int i; }
- (added) virtual/polymorphic inheritance
- (added) added pre-constructors - code at class level
gets run when object is instantiated
- (added) function overloading :
class X { fun void foo() { } fun void foo( int y ) { } }
- (added) base classes (can be extended):
Object, Event, UGen
see below
- (added) base classes (cannot be extended):
array, string
see below
- (added) member data
- (added) static data
- (added) member functions
- (added) static functions

- (added) base Event class : Event e;
can be used directly
can be extended to custom events
- (added) waiting on event, chuck to now :
e => now; // wait on e
- (added) e.signal() wakes up 1 shred, if any
- (added) e.broadcast() wakes up all shreds waiting on e
- (added) class MidiEvent (see
alternative to polling.
- (added) class OSCEvent

- (added) arrays : int a[10]; float b[20]; Event e[2];
- (added) multidimensional arrays : int a[2][2][2];
- (added) associative arrays : int a[10]; 0 => a["foo"];
all arrays are both int-indexed and associative
- (added) array initialization : [ 1, 2, 3 ] @=> int a[];
- (added) .cap() for array capacity
- (added) .find() test if item is associative array
- (added) .erase() erase item in associative array

- (added) class UGen
can be extended
- (changed) all ugen parameters are now also functions:
// set freq
440 => s.freq => val;
// same as...
s.freq( 440 ) => val;
- (changed) left-most parameters must now be called as functions
// no longer valid
f.freq => float val;
// valid
f.freq() => float val;
// still ok
440 => s.freq => float val;

- (added) class Shred
- (added) .yield() .id()

- (added) class string

- (added) stereo
all stereo unit generators have .left, .right, .pan functions
- (changed) stereo ugen: dac (2 in, 2 out)
- (changed) stereo ugen: adc (0 in, 2 out)
- (added) stereo ugen: pan2 take mono or stereo input and pans
- (added) stereo ugen: mix2 mix stereo input into mono


[chuck] spork ~ chuck-users ( new mailing_list + more )

Dear All,

Along with the new release, we have made a new mailing list
(chuck-users), intended for specific questions and discussions about
using chuck. This list (chuck) will (soon) become a moderated,
low-traffic mailing list intended for updates, announcements,
tutorials, and low-bandwidth discussions.

Hopefully the folks that are interested in chuck can remain on (chuck)
without being potentially spammed too much, and those that have
specific questions can fire away on (chuck-users) with a clean

Additionally, we have been graciously given permission to abuse an
entity called 'soup kitchen'. It is the state-of-the-art in
anti-social networking. It contains many nice features (all
conversations are by default world-readable, optional email
notification of new replies to topics, and is rather elegant) that may
be to useful as a semi-realtime semi-anonymous forum. The author,
Visnu Pitiyanuvath, will work with us to further enhance the site to
make it more useful and fun.

Links to all the lists and soup kitchen can be found here:

Join, if you like. Have fun!

ChucK Team