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.

- v0.3.0
- v0.3.1, v0.3.1b, v0.3.1c
- v0.3.2, v0.3.2b
- v0.3.3
- v0.3.4, v0.3.4b
- v0.3.5, v0.3.5b, v0.3.5c
- v0.3.6, v0.3.6b, v0.3.6c, v0.3.6d, v0.3.6e, v0.3.6e-2, v0.3.6f
- v0.3.7, v0.3.7b, v0.3.7c
- v0.3.8, v0.3.8b
- v0.3.9
- v0.3.10, v0.3.10b
- v0.3.11, v0.3.11b, v0.3.11c
- v0.3.12

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.

- Wave types. Rework into collection of
`sin`

, 3 × 3 complementary types, and 2 extras.- Add
`par`

and`mto`

– with`saw`

, forms trio of wave types with all harmonics. - Add
`ean`

,`cat`

, and`eto`

– forms trio of wave types with added even harmonics. - Rename
`ahs`

to`spa`

(sine parabola), adjust phase offset to match other wave types. - Rename
`hrs`

to`hsi`

(half-rectified sine), adjust phase offset to match other wave types. - Remove
`ssr`

, an extra all-harmonics wave type with little use. - Make
`saw`

decreasing instead of increasing, to match other wave types; flip the amplitude or the frequency for the same result.

- Add
- Line types.
- Add
`sqe`

(square polynomial envelope), a softer alternative to`xpe`

. - Add
`cub`

(cubic polynomial segment), with steep ends and a flat middle.

- Add

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`

.

- Signal generator types.
- Add
`R`

(Random segments generator), an oscillator-like value noise generator. - Rename
`O`

to`W`

(Wave oscillator). E.g. each`Osin`

should change to`Wsin`

.

- Add
- Sweep syntax (formerly "Ramp syntax"). Rename
`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.

- Signal generator types. Allow
`R`

without line type (use default`cos`

) and`W`

without wave type (use default`sin`

).

- Signal generator types. Add
`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.) - Line types. Add
`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).

- Line types.
- Correct
`uwh`

amplitude when used for sweep. - Add
`nhl`

(noise hump line), a medium line-plus-noise type. - Add
`ncl`

(noise camel line), a softer line-plus-noise type.

- Correct

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.

- For amplitude/ring and frequency modulation, add support for simple additive modulator lists directly under the main parameter name, like for PM. Can be used together with the older value range feature, and is then applied after it.
- Script options.
- Make the
`S`

options lexically scoped, restoring the values from outside a`[]`

list when the list is exited. - Apply the
`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. - Rename
`S`

option`n`

to`f.n`

.

- Make the
- Ramp syntax.
- Rename ramp
`hold`

to`sah`

(sample and hold). - Rename ramp
`sin`

back to`cos`

.

- Rename ramp
- Variable syntax.
- Add
`'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.) - Add
`$name`

expression, for using a variable in a numerical expression.

- Add
- Numerical expressions.
- In numbers, if a decimal
`.`

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.)

- In numbers, if a decimal
- Subnames. Each name under another name is now separated by a
`.`

-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`

.)

- For modulation with value range, change delimiters between the parts from
`X,Y~[...]`

to`Xw,Y[...]`

. - For phase modulation (normal and frequency-amplified) remove
`+`

after`p`

and place to set phase value. - Rename
`\number`

subshift to`;number`

gapshift, since the two`;`

compound step syntaxes go together. - Newlines no longer end steps at the top scope, the new rules simpler and more consistent.
- Ramp syntax.
- Rename
`v`

for goal value to`g`

. - Rename
`c`

before ramp name to`r`

. - Rename ramp
`cos`

to`sin`

(and use more accurate polynomial).

- Rename
- Numerical expressions.
- Allow arithmetic and number signs outside parentheses. (Undoes part of a
*v0.3.0*change, restoring old feature.) - Add
`%`

remainder operation. Make`^`

(to the power of) right-associative. - Add functions
`cos(x)`

,`rand()`

,`rint(x)`

,`seed(x)`

,`sin(x)`

,`time()`

. - Add constants
`mf`

,`pi`

.

- Allow arithmetic and number signs outside parentheses. (Undoes part of a

- For modulation with value range, change delimiters between the parts from
`Xw,Y[...]`

to`X,wY[...]`

. - For frequency-amplified PM, require a
`,`

just before`f[...]`

. This is now the case for all such subparameters. - Numerical expressions. Allow shorthand multiplying (leaving out a
`*`

) for expressions like`(X)Y`

too, not only`X(Y)`

.

- Timing syntax.
- Add special value for main time
`t`

parameter with literal`d`

in place of the`*`

feature*v0.3.10*removed.

- Add special value for main time
- Ramp syntax.
- Allow ordinary value, and/or subvalues in
`{...}`

, and/or modulator list, in one go, where available. When written together they can only be written in that particular order. - Add
`v`

(start value), as alias for the ordinary value before the`{...}`

; allow use of one of them. - Allow setting just any one subvalue, or any combination, within
`{...}`

. 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.

- Allow ordinary value, and/or subvalues in

- Timing syntax. (Also a big-issue fix for
`;`

.)- Rename forward-shift
`\`

to`/`

. Remove special value with literal`t`

. - Replace
`s`

silent time padding parameter with new, more flexible`\`

subshift syntax. - Make
`|`

reset, not add, delay to add for next step to prior duration. - Remove special value for
`t`

parameter with literal`*`

.

- Rename forward-shift
- Add phase named constant
`G`

for golden angle.

- Add new
`p+f[...]`

syntax, for frequency-linked PM.

- Wave types.
- Rename
`sha`

to`ahs`

,`szh`

to`hrs`

, and`ssr`

to`srs`

. - Add
`ssr`

. - No longer use rounded corner shaped
`sqr`

,`saw`

. Use new oscillator with DPW-ish aliasing reduction.

- Rename
- Ramp types.
- Rename
`esd`

to`xpe`

, and`lsd`

to`lge`

. - Add
`cos`

.

- Rename
- Numerical expressions.
- Add functions
`abs(x)`

,`exp(x)`

,`log(x)`

,`met(x)`

,`sqrt(x)`

.

- Add functions

- Nesting syntax. Rename undocumented generic
`[...]`

to`<...>`

, still only for testing and further development.

- Replace panning
`P`

keyword with channel mixing parameter`c`

and`S c`

default, with named constants`C`

,`L`

,`R`

.

- Nesting syntax. Add undocumented generic subscope
`[...]`

for testing and further development.

- Wave types. Remove
`shh`

. Use rounded corner shaped`sqr`

,`saw`

.

- Comment syntax. Replace line comment
`#`

with`#!`

, remainder of file comment`Q`

with`#Q`

.

- AM and FM modulator list syntax, and related parameter values. Expressions like
`fX f!Y[...]`

change to`fX,Y~[...]`

.

- Nesting syntax.
- List of operators and steps for them.
From inside
`<...>`

, change to inside`[...]`

. - Compound value (e.g. ramp arguments).
From inside
`[...]`

, change to inside`{...}`

. - PM modulator list prefix.
From
`p!`

, change to`p+`

.

- List of operators and steps for them.
From inside
- Label syntax.
- Names can now only contain alphanumeric characters and
`_`

. - Referencing syntax
`:name`

changed to`@name`

.

- Names can now only contain alphanumeric characters and
- Numerical expressions.
- Only allow arithmetic and number sign within parentheses. (This went along with big fixes and more changes.)

- Amplitude handling.
- Add downscaling of output amplitude by voice count, enabled by default. Using
`S a`

disables it. - Allow
`a`

(amplitude) parameter for AM and FM modulators.

- Add downscaling of output amplitude by voice count, enabled by default. Using
- Disable multiplicative inverse for
`r`

(relative frequency). - Ramp types.
- Renamed
`exp`

to`esd`

, and`log`

to`lsd`

. - Added changed
`exp`

,`log`

, and new`hold`

.

- Renamed
- Wave types.
- Renamed
`srs`

to`ssr`

. - Added
`sha`

,`szh`

,`shh`

.

- Renamed
- Comment syntax.
- Also recognize C-style
`/*...*/`

and C++-style`//`

comments.

- Also recognize C-style