sclass RenderFrequencySample_SquareWave extends Meta 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); } //@Override public void __subtractPeriodFrom(IAddPlateau 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); bool highFirst = goHigh < goLow; double min = min(goHigh, goLow), minPos = t1+min*n; double max = max(goHigh, goLow), maxPos = t1+max*n; double val = highFirst ? -abs : abs; if (metaGet("scaffolding") != null) printVars(+t1, +t2, +goHigh, +goLow, +abs, +minPos, +maxPos, +n); audio.subtractPlateau(t1, minPos, val); audio.subtractPlateau( minPos, maxPos, -val); audio.subtractPlateau( maxPos, t2, val); } }