ChucK

Unit Generators

Unit generators (ugens) can be connected using the ChucK operator ( => )

adc => dac;

the above connects the ugen `adc' (a/d convertor, or audio input) to `dac'  (d/a convertor, or audio output).

Ugens can also unlinked (using =<) and relinked (see examples/unchuck.ck).

A unit generator may have 0 or more control parameters.  A Ugen's parameters can be set also using the ChucK operator (=>, or ->)

//connect sine oscillator to dac
SinOsc osc => dac;
// set the Osc's frequency to 60.0 hz
60.0 => osc.freq;
 (see examples/osc.ck)

All ugen's have at least the following four parameters:

  • .gain - (float, READ/WRITE) - set gain.
  • .op - (int, READ/WRITE) - set operation type  
    • 0: stop - always output 0.
    • 1: normal operation, add all inputs (default).
    • 2: normal operation, subtract all inputs starting from the earliest connected.
    • 3: normal operation, multiply all inputs.    
    • 4 : normal operation, divide inputs starting from the earlist connected.
    • -1: passthru - all inputs to the ugen are summed and passed directly to output.  
  • .last - (float, READ/WRITE) - returns the last sample computed by the unit generator as a float.
  • .channels - (int, READ only) - the number channels on the UGen
  • .chan - (int) - returns a reference on a channel (0 -N-1)
  • .isConnectedTo( Ugen )  returns 1 if the unit generator connects to the argument, 0 otherwise.

Multichannel UGens are adc, dac, Pan2, Mix2

Pan2 p;    
// assumes you called chuck with at least --chan5 or -c5    
p.chan(1) => dac.chan(4);

Audio output

dac

Digital -> analog converter abstraction for underlying audio output device

  • .left - (UGen) - input to left channel
  • .right - (UGen) - input to right channel
  • .chan( int n ) - (UGen) - input to channel N on the device (0 -N-1)
  • .channels - (int, READ only) - returns the number of channels open on device

adc

Analog -> digital converter abstraction for underlying audio input device. Note that this is system-wide and so all outputs can be read from as well, for example to record the signals that ChucK is generating to a wave file.

  • .left - (UGen) - output to left channel
  • .right - (UGen) - output to right channel
  • .chan( int n ) - (UGen) - output to channel N on the device (0 -N-1)
  • .channels - (int, READ only) - returns the number of channels open on device

blackhole

Sample rate sample sucker ( like dac it ticks ugens, but no more ). Useful for generating modulation signals that aren't ever send to the soundcard. While it is system-wide like dac it can't be read from; it's output will always be zero.

see examples/pwm.ck

UGen

Utility class that all other ugens inherit from. Useful in some cases to abstract sets of ugen types.


wave forms

Impulse

Pulse generator - can set the value of the next sample. Default for each sample is 0 if not set

  • .next - (float, READ/WRITE) - set value of next sample

see examples/impulse_example.ck

Step

Step generator - like Impulse, but once a value is set, it is held for all following samples, until the value is set again

  • .value - (float, READ/WRITE) - set the current value
  • .next - (float, READ/WRITE) - set the step value examples/step_example.ck

see examples/step.ck

basic signal processing

Gain

Gain control (NOTE - all unit generators can themselves change their gain) (this is a way to add N outputs together and scale them). Gain is in fact identical in function to the UGen mother class that all other UGens extend.

  • .gain - (float, READ/WRITE) - set gain ( all ugen's have this) examples/gain_example.ck
Used in examples/i-robot.ck 

 

HalfRect

Half wave rectifier for half-wave rectification. Only passes the signal if it's values positive, outputs zero otherwise 

FullRect

Full wave rectifier. Transparent for positive input values, inverts negative ones.

ZeroX

Zero crossing detector. Emits a pulse lasting a single sample at the the zero crossing in the direction of the zero crossing.

(see examples/zerox.ck)

filters

Before using filters in ChucK, for the sake of your ears and your speakers, please read the following thread http://www.electro-music.com/forum/topic-37921.html

BiQuad

BiQuad (two-pole, two-zero) filter class. examples/ugen/BiQuad.txt

  • .b2 (float, READ/WRITE) filter coefficient
  • .b1 (float, READ/WRITE) filter coefficient
  • .b0 (float, READ/WRITE) filter coefficient
  • .a2 (float, READ/WRITE) filter coefficient
  • .a1 (float, READ/WRITE) filter coefficient
  • .a0 (float, READ only) filter coefficient
  • .pfreq (float, READ/WRITE) set resonance frequency (poles)
  • .prad (float, READ/WRITE) pole radius (<= 1 to be stable)
  • .zfreq (float, READ/WRITE) notch frequency
  • .zrad (float, READ/WRITE) zero radius
  • .norm (float, READ/WRITE) normalization
  • .eqzs (float, READ/WRITE) equal gain zeroes

BPF

Band pass filter.  2nd order Butterworth. (In the future, this class may be expanded so that order and type of filter can be set.) extends FilterBasic
  • .freq (float, READ/WRITE) center frequency (Hz)
  • .Q (float, READ/WRITE) Q (default is 1)
  • .set (float, float WRITE only) set freq and Q

BRF

Band reject filter.  2nd order Butterworth. (In the future, this class may be expanded so that order and type of filter can be set.) extends FilterBasic

  • .freq (float, READ/WRITE) center frequency (Hz)
  • .Q (float, READ/WRITE) Q (default is 1)
  • .set (float, float WRITE only) set freq and Q

Filter

STK filter class.

  • .coefs (string, WRITE only)

examples/ugen/Filter.txt

FilterBasic

base class, don't instantiate.

  • .freq (float, READ/WRITE) cutoff/center frequency (Hz)
  • .Q (float, READ/WRITE) resonance/Q
  • .set (float, float WRITE only) set freq and Q

HPF

Resonant high pass filter.  2nd order Butterworth. (In the future, this class may be expanded so that order and type of filter can be set.) extends FilterBasic

  • .freq (float, READ/WRITE) cutoff frequency (Hz)
  • .Q (float, READ/WRITE) resonance (default is 1)
  • .set (float, float WRITE only) set freq and Q

LPF

Resonant low pass filter.  2nd order Butterworth. (In the future, this class may be expanded so that order and type of filter can be set.) extends FilterBasic

  • .freq (float, READ/WRITE) cutoff frequency (Hz)
  • .Q (float, READ/WRITE) resonance (default is 1)
  • .set (float, float WRITE only) set freq and Q

OnePole

STK one-pole filter class. examples/ugen/OnePole.txt

  • .a1 (float, READ/WRITE) filter coefficient
  • .b0 (float, READ/WRITE) filter coefficient
  • .pole (float, READ/WRITE) set pole position along real axis of z-plane

OneZero

STK one-zero filter class.

  • .zero (float, READ/WRITE) set zero position
  • .b0 (float, READ/WRITE) filter coefficient
  • .b1 (float, READ/WRITE) filter coefficient

examples/ugen/OneZero.txt

PoleZero

STK one-pole, one-zero filter class. examples/ugen/PoleZero.txt

  • .a1 (float, READ/WRITE) filter coefficient
  • .b0 (float, READ/WRITE) filter coefficient
  • .b1 (float, READ/WRITE) filter coefficient
  • .blockZero (float, READ/WRITE) DC blocking filter with given pole position
  • .allpass (float, READ/WRITE) allpass filter with given coefficient

ResonZ

Resonance filter.  Same as BiQuad with equal gain zeros. extends FilterBasic

  • .freq (float, READ/WRITE) center frequency (Hz)
  • .Q (float, READ/WRITE) Q (default is 1)
  • .set (float, float WRITE only) set freq and Q

TwoPole

STK two-pole filter class.

  • .a1 (float, READ/WRITE) filter coefficient
  • .a2 (float, READ/WRITE) filter coefficient
  • .b0 (float, READ/WRITE) filter coefficient
  • .freq (float, READ/WRITE) filter resonance frequency
  • .radius (float, READ/WRITE) filter resonance radius
  • .norm (float, READ/WRITE) toggle filter normalization

see examples/powerup.ck examples/ugen/TwoPole.txt

TwoZero

STK two-zero filter class.

  • .b0 (float, READ/WRITE) filter coefficient
  • .b1 (float, READ/WRITE) filter coefficient
  • .b2 (float, READ/WRITE) filter coefficient
  • .freq (float, READ/WRITE) filter notch frequency
  • .radius (float, READ/WRITE) filter notch radius

examples/ugen/TwoZero.txt

sound files

LiSa

live sampling utility by Dan Trueman.

LiSa provides basic live sampling functionality. An internal buffer stores samples chucked to LiSa's input. Segments of this buffer can be played back, with ramping and speed/direction control. Multiple voice facility is built in, allowing for a single LiSa object to serve as a source for sample layering and granular textures.
  • .duration - ( dur , READ/WRITE ) - sets buffer size; required to allocate memory, also resets all parameter values to default
  • .record - ( int , READ/WRITE ) - turns recording on and off
  • .getVoice - ( int READ ) - returns the voice number of the next available voice
  • .maxVoices - ( int , READ/WRITE ) - sets the maximum number of voices allowable; 10 by default (200 is the current hardwired internal limit)
  • .play - ( int, WRITE ) - turn on/off sample playback (voice 0)
  • .play - ( int voice, int, WRITE) - for particular voice (arg 1), turn on/off sample playback
  • .rampUp - ( dur, WRITE ) - turn on sample playback, with ramp (voice 0)
  • .rampUp - ( int voice dur, WRITE ) - for particular voice (arg 1), turn on sample playback, with ramp
  • .rampDown - ( dur, WRITE ) - turn off sample playback, with ramp (voice 0)
  • .rampDown - ( int voice, dur, WRITE ) - for particular voice (arg 1), turn off sample playback, with ramp
  • .rate - ( float, WRITE ) - set playback rate (voice 0). Note that the int/float type for this method will determine whether the rate is being set (float, for voice 0) or read (int, for voice number)
  • .rate - ( int voice, float, WRITE ) - for particular voice (arg 1), set playback rate
  • .rate - ( READ ) - get playback rate (voice 0)
  • .rate - ( int voice, READ ) - for particular voice (arg 1), get playback rate. Note that the int/float type for this method will determine whether the rate is being set (float, for voice 0) or read (int, for voice number)
  • .playPos - ( READ ) - get playback position (voice 0)
  • .playPos - ( int voice, READ ) - for particular voice (arg 1), get playback position
  • .playPos - ( dur, WRITE ) - set playback position (voice 0)
  • .playPos - ( int voice, dur, WRITE ) - for particular voice (arg 1), set playback position
  • .recPos - ( dur, READ/WRITE ) - get/set record position
  • .recRamp - ( dur , READ/WRITE ) - set ramping when recording (from 0 to loopEndRec)
  • .loopRec - ( int, READ/WRITE ) - turn on/off loop recording
  • .loopEndRec - ( dur, READ/WRITE ) - set end point in buffer for loop recording
  • .loopStart - ( dur , READ/WRITE ) - set loop starting point for playback (voice 0). only applicable when 1 => loop.
  • .loopStart - ( int voice, dur , WRITE ) - for particular voice (arg 1), set loop starting point for playback. only applicable when .loop(voice, 1).
  • .loopEnd - ( dur , READ/WRITE ) - set loop ending point for playback (voice 0). only applicable when 1 => loop.
  • .loopEnd - ( int voice, dur , WRITE ) - for particular voice (arg 1), set loop ending point for playback. only applicable when .loop(voice, 1).
  • .loop - ( int , READ/WRITE ) - turn on/off looping (voice 0)
  • .loop - ( int voice, int, READ/WRITE ) - for particular voice (arg 1), turn on/off looping .bi - ( int , READ/WRITE ) - turn on/off bidirectional playback (voice 0)
  • .bi - ( int voice, int , WRITE ) - for particular voice (arg 1), turn on/off bidirectional playback .
  • voiceGain - ( float , READ/WRITE ) - set playback gain (voice 0) .voiceGain - ( int voice, float , WRITE ) - for particular voice (arg 1), set gain
  • .feedback - ( float , READ/WRITE ) - get/set feedback amount when overdubbing (loop recording; how much to retain)
  • .valueAt - ( dur, READ ) - get value directly from record buffer
  • .valueAt - ( sample, dur, WRITE ) - set value directly in record buffer
  • .sync - (int, READ/WRITE) - set input mode; (0) input is recorded to internal buffer, (1) input sets playback position [0,1] (phase value between loopStart and loopEnd for all active voices), (2) input sets playback position, interpreted as a time value in samples (only works with voice 0)
  • .track - (int, READ/WRITE) - identical to sync
  • .clear - clear recording buffer

See examples/special (various files)

SndBuf

sound buffer ( now interpolating ) reads from a variety of file formats see examples/sndbuf.ck

  • .read - (string, WRITE only) - loads file for reading
  • .chunks - (int, READ/WRITE) - size of chunk ( of frames) to read on-demand; 0 implies entire file, default; must be set before reading to take effect.
  • .write - (string, WRITE only) - loads a file for writing (currently unimplemented)
  • .pos - (int, READ/WRITE) - set position (0 p .samples)
  • .valueAt - (int, READ only) - returns the value at sample index .loop - (int, READ/WRITE) - toggle looping
  • .interp - (int, READ/WRITE) - set interpolation (0=drop, 1=linear, 2=sinc)
  • .rate - (float, READ/WRITE) - playback rate (relative to the file's natural speed)
  • .play - (float, READ/WRITE) - play (same as rate)
  • .freq - (float, READ/WRITE) - playback rate (file loops/second)
  • .phase - (float, READ/WRITE) - set phase position (0-1)
  • .channel - (int, READ/WRITE) - select channel (0 x .channels)
  • .phaseOffset - (float, READ/WRITE) - set a phase offset
  • .samples - (int, READ only) - fetch number of samples
  • .length - (dur, READ only) - fetch length as duration
  • .channels - (int, READ only) - fetch number of channels

WvIn

STK audio data input base class. examples/ugen/WvIn.txt

  • .rate (float, READ/WRITE) playback rate
  • .path (string, READ/WRITE) specifies file to be played


WaveLoop

STK waveform oscillator class. see examples/dope.ck   examples/ugen/WaveLoop.txt

  • .freq (float, READ/WRITE) frequency of playback (loops/second)
  • .addPhase (float, READ/WRITE) offset by phase
  • .addPhaseOffset (float, READ/WRITE) set phase offset

WvOut

STK audio data output base class. examples/ugen/WvOut.txt

  • .matFilename (string, WRITE only) open a matlab file for writing
  • .sndFilename (string, WRITE only) open snd file for writing
  • .wavFilename (string, WRITE only) open WAVE file for writing
  • .rawFilename (string, WRITE only) open raw file for writing
  • .aifFilename (string, WRITE only) open AIFF file for writing
  • .closeFile () close file properly 

network

netout

UDP-based network audio transmitter

  • .addr (string, READ/WRITE) target address
  • .port (int, READ/WRITE) target port
  • .size (int, READ/WRITE) packet size
  • .name (string, READ/WRITE) name

netin

UDP-based network audio receiver

  • .port (int, READ/WRITE) set port to receive
  • .name (string, READ/WRITE) name

mono <- -> stereo

Pan2

Spread mono signal to stereo see examples/stereo/moe2.ck

  • .left (UGen) left (mono) channel out
  • .right (UGen) right (mono) channel out
  • .pan (float, READ/WRITE) pan location value (-1 to 1)

Mix2

Mixes stereo input down to mono channel. Note that without this UGen or gain adjustment chucking stereo signals into a mono input will result in summing them, which may cause clipping.

  • .left - (UGen) left (mono) channel in
  • .right - (UGen) right (mono) channel in
  • .pan - (float, READ/WRITE) mix parameter value (0 - 1)
STK - Delay

Delay

STK non-interpolating delay line class

see examples/netrelay.ck

  • .delay (dur, READ/WRITE) length of delay
  • .max (dur, READ/WRITE) max delay (buffer size)

DelayA

STK allpass interpolating delay line class. examples/ugen/DelayA.txt

  • .delay (dur, READ/WRITE) length of delay
  • .max (dur, READ/WRITE) max delay (buffer size)

DelayL

STK linear interpolating delay line class.

  • .delay (dur, READ/WRITE) length of delay
  • .max (dur, READ/WRITE) max delay (buffer size)

see examples/i-robot.ck

Echo

STK echo effect class.  

  • .delay (dur, READ/WRITE) length of echo
  • .max (dur, READ/WRITE) max delay
  • .mix (float, READ/WRITE) mix level (wet/dry)

STK - Envelopes

Envelope

STK envelope base class.

  • .keyOn (int, WRITE only) ramp to 1.0
  • .keyOff (int, WRITE only) ramp to 0.0
  • .target (float, READ/WRITE) ramp to arbitrary value
  • .time (float, READ/WRITE) time to reach target (in second)
  • .duration (dur, READ/WRITE) time to reach target
  • .rate (float, READ/WRITE) rate of change
  • .value (float, READ/WRITE) set immediate value

see examples/sixty.ck

ADSR

STK ADSR envelope class.

  • .keyOn (int, WRITE only) start the attack for non-zero values
  • .keyOff (int, WRITE only) start the release for non-zero values
  • .attackTime (dur, WRITE only) attack time
  • .attackRate (float, READ/WRITE) attack rate
  • .decayTime (dur, READ/WRITE) decay
  • .decayRate (float, READ/WRITE) decay rate
  • .sustainLevel (float, READ/WRITE) sustain level
  • .releaseTime (dur, READ/WRITE) release time
  • .releaseRate (float, READ/WRITE) release rate
  • .state (int, READ only) attack=0, decay=1, sustain=2, release=3,done=4

see examples/adsr.ck

STK - Reverbs

JCRev

John Chowning's reverberator class. 

  • .mix (float, READ/WRITE) mix level

NRev

CCRMA's NRev reverberator class.

  • .mix (float, READ/WRITE) mix level

PRCRev

Perry's simple reverberator class. 

  • .mix (float, READ/WRITE) mix level

STK - Components

Chorus

STK chorus effect class.

  • .modFreq (float, READ/WRITE) modulation frequency
  • .modDepth (float, READ/WRITE) modulation depth
  • .mix (float, READ/WRITE) effect mix
  • .baseDelay( dur ) sets current base delay

PitShift

STK simple pitch shifter effect class. 

  • .mix (float, READ/WRITE) effect dry/wet mix level
  • .shift (float, READ/WRITE) degree of pitch shifting

 

Dyno

Dynamics processor by Matt Hoffman and Graham Coleman. Includes limiter, compressor, expander, noise gate, and ducker (presets)

 preset slopeAbove
slopeBelow
tresh
attackTime
releaseTime
ext.side
limiter
0.1
 1.0 0.5
5::ms
300::ms
false
compressor 0.5
1.0
0.5 5::ms 300::ms
false
expander
2.0
1.0
0.5
20::ms
400::ms
false
 noise gate
1.0
 10000000 0.1
11::ms
100::ms
false
 ducker 0.5
 1.0 0.1
100::ms
second
true
 
(control parameters)
  • .limit - () - set parameters to default limiter values
  • .compress - () - set parameters to default compressor values
  • .expand - () - set parameters to default expander values
  • .gate - () - set parameters to default noise gate values
  • .duck - () - set parameters to default ducker values
  • .thresh - ( float, READ/WRITE ) - the point above which to stop using slopeBelow and start using slopeAbove to determine output gain vs input gain
  • .attackTime - ( dur, READ/WRITE ) - duration for the envelope to move linearly from current value to the absolute value of the signal's amplitude
  • .releaseTime - ( dur, READ/WRITE ) - duration for the envelope to decay down to around 1/10 of its current amplitude, if not brought back up by the signal
  • .ratio - ( float, READ/WRITE ) - alternate way of setting slopeAbove and slopeBelow; sets slopeBelow to 1.0 and slopeAbove to 1.0 / ratio
  • .slopeBelow - ( float, READ/WRITE ) - determines the slope of the output gain vs the input envelope's level in dB when the envelope is below thresh. For example, if slopeBelow were 0.5, thresh were 0.1, and the envelope's value were 0.05, the envelope's amplitude would be about 6 dB below thresh, so a gain of 3 dB would be applied to bring the output signal's amplitude up to only 3 dB below thresh. in general, setting slopeBelow to be lower than slopeAbove results in expansion of dynamic range.
  • .slopeAbove - ( float, READ/WRITE ) - determines the slope of the output gain vs the input envelope's level in dB when the envelope is above thresh. For example, if slopeAbove were 0.5, thresh were 0.1, and the envelope's value were 0.2, the envelope's amplitude would be about 6 dB above thresh, so a gain of -3 dB would be applied to bring the output signal's amplitude up to only 3 dB above thresh. in general, setting slopeAbove to be lower than slopeBelow results in compression of dynamic range
  • .sideInput - ( float, READ/WRITE ) - if externalSideInput is set to true, replaces the signal being processed as the input to the amplitude envelope. see dynoduck.ck for an example of using an external side chain.
  • .externalSideInput - ( int, READ/WRITE ) - set to true to cue the amplitude envelope off of sideInput instead of the input signal. note that this means you will need to manually set sideInput every so often. if false, the amplitude envelope represents the amplitude of the input signal whose dynamics are being processed. see dynoduck.ck for an example of using an external side chain.

See examples/special/Dyno-limit.ck