Versions of and change logs for the saugns program and SAU language. The history page has a more broad and big-picture description, which also goes back before the tagged versions from 2019 and later.
The CHANGELOG included with saugns covers all tagged versions. Below, links for tags and a log focused only on the SAU language can be found.
Per version, concise summaries of changes are written in plain
git tags from v0.3.3 and on. Viewing the difference between versions is easy to do using the git command-line tool; git diff old-version new-version
shows the whole thing at once for any two versions, but the diff may be large.
Below is a shorter list of only changes that impact how scripts in the language are written – changes which often affect what's covered on this website. It may be updated ahead of new versions being tagged (see "stable branch" below). For fuller change notes for the saugns program, instead read its CHANGELOG.
This listing of changes is not completely exhaustive; some bugfixes, changes to undocumented behavior, and other small details affecting some possible scripts may go unlisted. The oldest tagged version v0.3.0 is compared to the historical (last 2012) sgensys-20120401.tgz version.
[]
list rather than in {}
. They can be placed at the beginning of a list also used to assign modulators, for assigning both in one go.[]
list to a parameter now appends the new list, instead of replacing any old items with it. To clear old items instead of appending to them, a dash can be added before the [
, as in -[
.c[]
panning-AM modulators, in addition to value sweeps. Produces a stereo placement AM-like effect that disappears on mono downmix.Most older scripts did not remove modulators by setting new lists; those that do will require adjustment. Apart from that, a perl one-liner can be used to upgrade the sweep syntax in scripts. Deprecated support for the old sweep syntax is kept in the short term.
perl -pi -e 's/{/\[/g; s/}/\]/g; s/\]\[/ /g;' paths...
b
alias (f
still supported).d
and half-sharp z
.v
and sharp-and-a-half k
.w
and double-sharp x
.S f.s
tuning systems c
(classic 5-limit JI) and p
(Pythagorean 3-limit JI).R
mode m
flags h
(half-shape waveform, for sawtooth-like waves) and z
(zig-zag flip, adds jaggedness with randomness).sin
, 3 × 3 complementary types, and 2 extras.par
and mto
– with saw
, forms trio of wave types with all harmonics.ean
, cat
, and eto
– forms trio of wave types with added even harmonics.ahs
to spa
(sine parabola), adjust phase offset to match other wave types.hrs
to hsi
(half-rectified sine), adjust phase offset to match other wave types.ssr
, an extra all-harmonics wave type with little use.saw
decreasing instead of increasing, to match other wave types; flip the amplitude or the frequency for the same result.sqe
(square polynomial envelope), a softer alternative to xpe
.cub
(cubic polynomial segment), with steep ends and a flat middle.S f.s
toggle with the previous justly intoned scale as the other option (j
value).Cf4
as belonging to the octave above C4
(2011 behavior), instead change default octave for Cf
to 5 when using key C
.S f.k
, for handling of default and relative octave numbers (and rotating the microtonal small letter scale).=
, whitespace or a math symbol between it and math value/ID. Used to allow named constants for a paramater, for channel, frequency as note, or phase.<...>
, useful for wrapping around use of S
.Old scripts using Wssr
will no longer work as expected; if that wave type is wanted, it could be re-added. Most other old scripts will produce equivalent results after adjusting saw
uses, and adjusting phase p
for and renaming the old hrs
and ahs
.
R
(Random segments generator), an oscillator-like value noise generator.O
to W
(Wave oscillator). E.g. each Osin
should change to Wsin
.r
before line shape (formerly "Ramp type") to l
. E.g. an rexp
becomes lexp
.Backward-compatibility aliases have been added so scripts with type O
, and (in the shorter term) sweep parameter r
, still work with deprecation warnings.
R
without line type (use default cos
) and W
without wave type (use default sin
).R
mode m
flag v
– for selecting from a set of violet noise functions instead of white noise functions. (Currently, violet versions of g
and t
are missing.)uwh
(uniform white noise) – makes a sweep use uniform random numbers in the start–goal range, and R
produce chunks of noise with a random amplitude and DC offset each (if using the default mode).uwh
amplitude when used for sweep.nhl
(noise hump line), a medium line-plus-noise type.ncl
(noise camel line), a softer line-plus-noise type.This version fixes a bug affecting some builds of the program (x86-64 platform with clang compiler) – this fixes the mt
and mvb
modes for the R
generator.
S
options lexically scoped, restoring the values from outside a []
list when the list is exited.S a
amplitude multiplier set inside a []
list to any modulators which follow at the same list level. Previously this value only applied to top-level carriers. Separate this particular setting at each list level, making the multipliers independent, except apply it to sublists of the new a[]
variety.S
option n
to f.n
.hold
to sah
(sample and hold).sin
back to cos
.'name=...
variation of the syntax for variable assignment, for assigning a number. Variables are now dynamically typed. (The old and other value type is reference to object.)$name
expression, for using a variable in a numerical expression..
is used, require digit(s) after. A lone trailing 0 can no longer be skipped but a lone leading 0 can still be skipped. (E.g. 0
, 0.0
, and .0
are all still fine for the number zero – but 0.
no longer is.).
-prefix instead of a ,
-prefix. Furthermore, ,w
was renamed to use the letter r
. (This means .f
instead of ,f
and .r
instead of ,w
.)<...>
.X,Y~[...]
to Xw,Y[...]
.+
after p
and place to set phase value.\number
subshift to ;number
gapshift, since the two ;
compound step syntaxes go together.v
for goal value to g
.c
before ramp name to r
.cos
to sin
(and use more accurate polynomial).%
remainder operation. Make ^
(to the power of) right-associative.cos(x)
, rand()
, rint(x)
, seed(x)
, sin(x)
, time()
.mf
, pi
.Xw,Y[...]
to X,wY[...]
.,
just before f[...]
. This is now the case for all such subparameters.*
) for expressions like (X)Y
too, not only X(Y)
.t
parameter with literal d
in place of the *
feature v0.3.10 removed.{...}
, and/or modulator list, in one go, where available. When written together they can only be written in that particular order.v
(start value), as alias for the ordinary value before the {...}
; allow use of one of them.{...}
. Changing goal before old goal is reached now updates the start/ordinary value to the point reached on the prior trajectory. What remains of an unexpired time set for a ramp will now always be the default for its time until it runs out. And a ramp shape set is kept for any new updates for the parameter.;
.)\
to /
. Remove special value with literal t
.s
silent time padding parameter with new, more flexible \
subshift syntax.|
reset, not add, delay to add for next step to prior duration.t
parameter with literal *
.G
for golden angle.p+f[...]
syntax, for frequency-linked PM.sha
to ahs
, szh
to hrs
, and ssr
to srs
.ssr
.sqr
, saw
. Use new oscillator with DPW-ish aliasing reduction.saw
increasing rather than decreasing.esd
to xpe
, and lsd
to lge
.cos
.abs(x)
, exp(x)
, log(x)
, met(x)
, sqrt(x)
.[...]
to <...>
, still only for testing and further development.P
keyword with channel mixing parameter c
and S c
default, with named constants C
, L
, R
.[...]
for testing and further development.shh
. Use rounded corner shaped sqr
, saw
. Make saw
decreasing, not increasing, by default.#
with #!
, remainder of file comment Q
with #Q
.fX f!Y[...]
change to fX,Y~[...]
.<...>
, change to inside [...]
.[...]
, change to inside {...}
.p!
, change to p+
._
.:name
changed to @name
.S a
disables it.a
(amplitude) parameter for AM and FM modulators too.r
(relative frequency).exp
to esd
, and log
to lsd
.exp
, log
, and new hold
.srs
to ssr
.sha
, szh
, shh
./*...*/
and C++-style //
comments.