sclass RenderFrequencySample_SquareWave is RenderFrequencySample { public double get(Complex c, double frac) { double abs = c.abs(); if (abs == 0) ret 0; frac = frac_nonNeg(frac + c.fracAngle()); ret abs * (frac < .5 ? 1 : -1); } public void subtractPeriodFrom(AudioAdder audio, DoubleRange period, Complex intensity) { double goHigh = fracNonNeg(-intensity.fracAngle()); double abs = intensity.abs(); double goLow = fracNonNeg(goHigh+.5); double t1 = period.start, t2 = period.end, n = l(period); printVars(+t1, +t2, +goHigh, +goLow, +abs, +n); if (goHigh < goLow) { audio.subtractPlateau(t1, t1+goHigh*n, -abs); audio.subtractPlateau( t1+goHigh*n, t1+goLow*n, abs); audio.subtractPlateau( t1+goLow*n, t2, -abs); } else { audio.subtractPlateau(t1, t1+goLow*n, abs); audio.subtractPlateau( t1+goLow*n, t1+goHigh*n, -abs); audio.subtractPlateau( t1+goHigh*n, t2, abs); } } }