[chuck-users] New Thread: DSP in ChucK

Perry Cook prc at CS.Princeton.EDU
Sat Jun 11 14:20:41 EDT 2011


Yo all,

Based on discussions of DSP in ChucK, I thought I'd split it out into
a new thread.  The last time I taught my music DSP intro course (COS325
Transforming Reality Through Computer, named long ago by Paul
Lansky and Ken Steiglitz when they taught it on NeXT Machines!!),
I taught it in STK AND ChucK (with just a touch of MATLAB for completeness).

Most all examples are provided in C, C++ (via STK), and ChucK.

http://www.cs.princeton.edu/courses/archive/spr09/cos325/

Lately I've been doing a lot of intro ChucK lecturing (Cal Arts, ASU, etc.)
and have been showing them how to do things in at least 3 ways:
1)  Directly in the Language
2)  Using built-in Unit Generators (example, building a flute from delay lines)
3)  Using higher-level built-in Unit Generators (example, using the Flute UG)

For example, a two-pole feedback filter can be done directly in
the language, with arrays, and Step for output:

// *****************************************
// Two Pole Resonator directly in ChucK
Noise n => Gain input => blackhole;
Step output => dac;
[0.0, 0.0] @=> float outputs[];
[-1.977755, 0.998001] @=> float coeffs[];
0.001 => input.gain;

while (1)  {
    input.last() - outputs[0]*coeffs[0] - outputs[1]*coeffs[1] => float temp;
    outputs[0] => outputs[1];
    temp => outputs[0] => output.next;
    1 :: samp => now;
}
// *****************************************

or with Delay unit generators (by the way, this is a way to do a
UG based arbitrary order FIR/IIR filter):

// *****************************************
// Two Pole Resonator using Delays
Noise n => Gain output => dac;
output => Gain d1 => output;    // 1 sample delay
output => Delay d2 => output; // 2 sample delay
1 :: samp => d2.delay;               // feedback adds 1 sample of delay
1.977755 => d1.gain;
-0.998001 => d2.gain;
0.001 => n.gain;

while (1)  {
    1.0 :: second => now;
}
// *****************************************

Or, using the built-in TwoPole Unit Generator:

// *****************************************
// Two Pole Resonator Unit Generator
Noise n => TwoPole tp => dac;
1000.0 => tp.freq;
0.999 => tp.radius;
0.001 => tp.gain;

while (1)  {
    1.0 :: second => now;
}

// *****************************************



More information about the chuck-users mailing list