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.
A concise summary of changes is 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 summary of only the changes that impact how scripts in the language are written. This list may be updated ahead of new versions being tagged. The oldest tagged version v0.3.0 is compared to the historical (last 2012) sgensys-20120401.tgz version.
This listing of changes is not exhaustive, e.g. some smaller changes such as changes for default value handling are not listed.
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.Old scripts using Wssr
will no longer work; if that wave type is wanted, it could be re-added. All 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 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.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
.#
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.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.