My answer is kind of a hack, but, it's working quite well.
Use a Step waveform set to 1 at all times, have THAT 1 divided by the ADSR for the filter, then, my above code works like a charm!
You could also, for example, spork off a different function that randomly triggered the filter's ADSR independently from the amplitude's ADSR, giving you all sorts of trance techno type patterns.

 Hope this helps you out, Josh, and other users.

-Edward

// Filter Wooby Wooby Woo

BlitSaw bs;
LPF lpf;
ADSR amp;
ADSR filt;
Gain fg;
amp.set( 1::ms, 350::ms, .2, 500::ms );
filt.set( 15::ms, 550::ms, 0, 400::ms );

Step s;
s => filt;
// 1 => s.value;
1 => s.next;

bs => amp => lpf => dac;
filt => fg => blackhole;
10 => fg.gain;

500 => lpf.freq;
2 => lpf.Q;

spork ~ filteradsr ();

for (int l; l < 32; l++)
{  
    <<<"L;",l,"">>>;
    spork ~ playanote ( Std.rand2(30,60) );
    800::ms => now;
}
   
fun void  playanote (int nnum)
    {  
        int mstodie;
        <<<"\n\n",nnum,"">>>;
        nnum => Std.mtof => bs.freq;
        <<<"On","">>>;
        amp.keyOn();
        filt.keyOn();
        Std.rand2(150,300) => mstodie;
        mstodie * 1::ms => now;           
        <<<"Off","">>>;
        amp.keyOff();
        filt.keyOff();
    }

fun void filteradsr ()
    {
            while (true)
                {
                    float currfilt;
                    filt.last() * 800 + 250 => currfilt;
                    currfilt => lpf.freq;
                    //if (maybe) <<<filt.last(),currfilt>>>;
                    1::ms => now;       
                }
        }