This "algorithm" such as it is came from an old amplifier. I think it was a Carver amp circa 1978. It used all analog circuitry to do the following (never actually heard the beast, but always wanted to implement this to see what it sounded like). Now, thanx to chuck, I have. I'm sure the original implementation didn't have randomly varying delay line lengths! <smile> The idea is that you feed the right channel back to the left inverted and with delay. Do the same to the left. Its supposed to cancel out the "crosstalk" between the channels thus subjectively "widening" the image. Try it with headphones. If you crank up the gain, then you'll hear it better through speakers. Thanx to the person who helped me with the inversion (sorry I forget your name, but you know who you are <smile>). Here's the code: // gain (higher produces more noticable effect) 0.4 => float gain; // whether to invert 1 => int invert; // delay time range 1.0 => float minDelay; 10.0 => float maxDelay; // sound file "music.wav" => string sourceFile; if (me.args()) me.arg(0) => sourceFile; // the patch SndBuf l, r; Step lInverted,rInverted; DelayL dl, dr; l => dac.left; if (invert) l => lInverted => dl => dac.right; else l => dl => dac.right; r => dac.right; if (invert) r => rInverted => dr => dac.left; else r => dr => dac.left; // set initial delay length, gain, and max delay times .2::second => dl.max => dr.max; 4::ms => dur lDelayTime => dur rDelayTime => dl.delay => dr.delay; gain => dl.gain => dr.gain; // load the file sourceFile => l.read; sourceFile => r.read; 1 => r.channel; // start the inverters if (invert) spork ~ inverter(l, lInverted); spork ~ inverter(r, rInverted); // time loop 0 => float whichDelay; while( true ) { .4::second => now; Math.rand2f(0,1) => whichDelay; //<<<whichDelay>>>; if (whichDelay > .5) { Math.rand2f(minDelay,maxDelay) * 1::ms => dl.delay; //<<<"left">>>; } else { Math.rand2f(minDelay,maxDelay) * 1::ms => dr.delay; //<<<"right">>>; } // which channel to affect } // main loop fun void inverter(UGen in, Step out){ while(true){ - in.last() => out.next; 1::samp => now; } }