[chuck-users] module chugen

Michael Heuer heuermh at gmail.com
Fri Nov 30 22:56:54 EST 2012


I knew I was going to get to this eventually; I have always wanted to
be able to ChucK a ugen to a parameter, similar to control voltages in
modular synths I suppose.

With this

public class Module extends Chugen
{
    Gain _cv;

    {
        _cv => blackhole;
    }

    fun float tick(float in)
    {
        return tick(in, _cv.last());
    }

    // subclasses override this function
    fun float tick(float in, float cv)
    {
        return in;
    }
}

I can do this, which interpolates the cv to a frequency between 2.0 and 8.0

class SinModule extends Module
{
    SinOsc sin;

    {
        sin => blackhole;
    }

    fun float tick(float in, float cv)
    {
        Interpolate.linear(cv, -1.0, 1.0, 2.0, 8.0) => sin.freq;
        return sin.last();
    }
}

and then this, which uses a SinOsc at a frequency of 0.25 as the cv to
modulate the frequency of the SinModule which modulates the gain for a
tremolo effect.

class TremoloModule extends Module
{
    SinModule gainLfo;
    SinOsc rateLfo;

    {
        1.0 => gainLfo.sin.gain;
        gainLfo => _cv;

        0.25 => rateLfo.freq;
        1.0 => rateLfo.gain;
        rateLfo => gainLfo._cv;
    }

    fun float tick(float in, float cv)
    {
        Interpolate.linear(cv, -1.0, 1.0, 0.0, 1.0) => gain;
        return in;
    }
}

SinOsc sin => TremoloModule trem => dac;
0.4 => sin.gain;
220.0 => sin.freq;
1::hour => now;

https://github.com/heuermh/lick/blob/master/examples/moduleExample.ck

I am wondering if others have cleaner ways of doing this, because this
example isn't even easy for me to follow.

   michael


More information about the chuck-users mailing list