View Raw SPL
sqrwave(t, duty)
{
        local s, sqr, t0;

        if (argc < 2)
        {
                if (argc < 1) error("sqrwave - input series required");

                duty = 50;
        }

        duty /= 100;

        t0 = t / (2 * pi);

        s = t0 - floor(t0);

        sqr = (s < duty);

        /* rescale -1 to 1 */
        sqr = 2 * (sqr - 0.5);

        if (isarray(t))
        {
                sqr = xy(t, sqr);
        }

        return(sqr);
}