On 5/31/07, Josh Lawrence <hardbop200@gmail.com> wrote:
Last night I sat down and was able to modify polyfony.ck to use a
SawOsc instead of the Mandolin.

Cool!

 

  My next step was to try to connect
that oscillator to a filter, but how do I do that?  My thinking was
after I get done with defining my SawOsc parameters, I could just
chuck the oscillator to the filter, like so?

s => moog;

(s is my SawOsc, and moog is Moog.)

Ah, yes. "moog" in this case refers to a emulation (a simple but fun one) of a Moog synth, not to the Moog filter (think Minimoog v.s. Moogerfooger). What you are looking for would run something like this;

SawOsc osc => LPF filt => ADSR env => dac;

That would be the basic layout of a traditional single oscilator synth. You could elaborate on that, for example by adding a second oscilator and a filter modulation envelope if you'd like to get more fancy.
 

Does anyone have any examples of a more complete subtractive
synthesizer that I can model mine after?

How about starting with the layout above? You can look up the Ugens used in the manual and see how far those get you.

 
Final question:  Is monophonic operation with glide out of the
question with ChucK?

No, not at all, that's quite possible and indeed would likely be more simple then polyphonic operation. The glide bit would be the hardest. How about this;
-----------------------
//warning, unchecked code, might contain typos

//example signal
SawOsc s => dac;

//modulation source
//you might want to look up "blackhole" to see what it does,
//blackhole is quite usefull when using modulation.
Envelope slide => blackhole;

//this will be a 303-style slide that takes a second to reach any given target
second => slide.duration;

//set initial frequency
330 =>  s.freq;
//making sure the modulation source fits this
330 => slide.value;

//let it sound for a bit
second => now;

//the actual slide starts here.
440 => slide.target;

//we run this untill the slide has reached it's goal
while(slide.value() != slide.target)
    {
    //this is where the actual modulation occurs
    slide.value() => s.freq ;

    //this represents the "controll rate"
    //shorter values produce a smoother glide at a higher cpu cost
    10::ms => now;
    }

//let the new frequency sound for a bit too
second => now;
----------------------------
Hope that gets you started?

Kas.