#saugns v0.5.7 adds the "a.l" ladder effect distortion at last, 2 years after I experimented with it.

There were many things that seemed silly not to have, while adding the le, so I did all those other things first. Including frequency filter for audio generators in general, instead of placing a filter only inside the distortion.

Now a line like this at the top of a SAU script sets a Sega MD-like sound:
"S a.lC a.f2840 c.pf"

#LadderEffect #YM2612 #SAUlang

Now the shortest script using PM (with 2 oscillators) in my language will be this:

W[W]

Or with self-modulation:

W.a1

Now to bundle up the new PD options in the coming v0.5.0 so that more than one can be written without requiring the " p." prefix for those after. They can go first, before an oscillator, in W[...] -- there's nothing else using that context.

#SAUlang

I recently figured out that I have a clunky asymmetric clipper in my SAU language.

The recipe is "A0.r+1[A0[...]]" to half-rectify the "..." -- where "A-1.r+1[A1/2[S a1/2 ...]]" avoids such clipping and is like just "...". In-between values like "A-1/3.r+1[A1/4[S a3/4 ...]]" clips only below -1/3 amplitudes, as in -(1/4)/(3/4).

"A" makes DC offset. Same result is got using a square wave at 0 Hz and phase inside the positive half in place of "A", setting the number to amplitude "a".

#SAUlang

Phase self-modulation a.k.a. "feedback FM" now added to #saugns / #SAUlang as "p.a" parameter for both wave and random line segment oscillators.

I use stronger filtering than Yamaha did, trivial 1-pole + 1-zero filters both, allowing roughly twice the feedback without too much noise.

Self-PM sawtooth-ifies all smooth noise types nicely. I made the level of self-PM sweepable and modulatable in turn.

Straightforward implementation for random line oscillator, but ~4x slower than no self-PM code.

Another #SAUlang #syntax change coming up, merging '{...}' subparameters (currently only used for sweeps) into '[...]' lists, where they come first.

To make that work, modulator '[...]' lists when assigned, will be appended to the previous list, instead of replacing it. Unless a dash is written before the opening '[', for the old behavior.

I'm thinking of further expanding list features -- assigning them to variables, concatenation more generally, and insertion of objects from list variables.