Hi I played a bit with the new LPF ugen. Thanks alot for adding this, it's really, really great! Working with this made me think about how to control a filter over time. Supposed I want a really simple, classic sound of a SawOsc ran through a LPF controlled by a (dare I say it) envelope. I have an instrument like this: fun static void moog_bass(float note, float dynamic, dur length){ Event off; spork ~ moog_bass(note, dynamic, off); length => now; off.broadcast(); .2::second => now; } fun static void moog_bass(float note, float dynamic, Event off){ .13 => float volume; //0 => volume; SawOsc osc => LPF f => dac; Std.mtof(note) => osc.freq; 1 => f.Q; 400 => f.freq; Mixer.bass * volume => f.gain; while(f.freq() > 80){ f.freq() * .9 => f.freq; 10::ms => now; } off => now; while(f.gain() > .000001){ f.gain() * .99 => f.gain; .1::ms => now; } } This instrument works with both midi (where we don't know the length before noteoff) and from code (where I prefer to use a length). Only problem is that if the length is too short, the off-event is broadcast before the first while is finished. This means that the off-event is never received, which in turn makes the instrument click. Any ideas how to solve this? I still find myself wishing for ADSR's to be able to control stuff, but that won't happen, right? Another related situation: Supposed I want to modulate both panning, volume and filter by different predetermined "curves"s. I can't get my head around how that is done nicely. A multi breakpoint envelope that could controll stuff (like csounds expseg and linseg) would be really great in some situations, since they are so easy to setup and experiment with the different timings/levels. But how could something like this be solved with chuck? -- peace, love & harmony Atte http://www.atte.dk | quintet: http://www.anagrammer.dk | compositions: http://www.atte.dk/compositions