To recap, as I understand it Disch is essentially generating a master square wave and then sampling one of its band-limited transitions at several offsets, then reusing these to generate band-limited transitions. To implement low-pass with this scheme you just reduce the amplitude of the higher sine wave harmonics to whatever profile you want as you add them when generating the master square wave. A simple algorithm is to scale each harmonic by an exponential "rolloff" factor, where the first harmonic is at normal amplitude, the second at 0.98 the usual, the third at 0.98*0.98, the fourth at 0.98*0.98*0.98, etc. This is in addition to the normal scaling of square wave harmonics, of course, where the first is at 1.0, the second at 1/3, the third at 1/5, fourth at 1/7, etc.

**Code:**

double period = 100;

double scale = 1.0;

double rolloff = 0.98;

for ( double harmonic = 1; harmonic <= period / 2; harmonic = harmonic + 2 )

{

add_sine( period / harmonic, scale / harmonic );

scale = scale * rolloff;

}

Here are a few square waves with progressively lower rolloff factors:

If you still have trouble with this, I'll finish working on the demo code tutorial I've been wanting to complete for a while.