Skip to content
saugns v0.3.11. Fixes, cli features, syntax tweaks & more.

Adjust default time behavior, document lengthening
based on time of nested objects. Some smaller bugs
remain, a further redesign needed. But fix two for
modulation lists combined with timing syntax (file
'devtests/defaulttime3.sau'). Previously durations
could lengthen past the play time based on that in
nested lists; also, for ';'-separated (numberless,
older syntax) sub-steps, gaps mistakenly produced.

This also includes a bugfix for a timing
issue added in v0.3.10b. A one-line bug,
in a new time conversion function (added
close to that release) made longer times
roll over and become too short. (Example
scripts had too short "t"s to catch it.)

Syntax changes:
 * Rename '\' with number to ';' with number. The same use.
 * Newlines in the top scope will no longer end the current
   step, handling now becoming more regular and permissive.
   (Previously, an exception to the rule was new sub-steps,
   allowed on the line after a linebreak. '\' was different
   and not included in that exception. Now top and subscope
   handling is more similar and should be less surprising.)
 * For modulation with value range, change delimiters
   between the parts from "X,Y~[...]" to "Xw,Y[...]".
 * For phase modulation (normal, frequency-amplified)
   remove "+" after "p" and place to set phase value.
 * Ramp '{...}' sub-parameters:
    - Rename 'v' to 'g' (goal).
    - Rename 'c' to 'r' (ramp).
 * Rename ramp 'cos' to 'sin' (sinuous curve). It's
   maybe more intuitive. Also use a new polynomial,
   producing a reasonably high-fidelity sine curve.
 * Numerical expressions:
    - Allow number signs and arithmetic operations
      (full expressions) outside parentheses, with
      any whitespace ending the expression. Undoes
      a change from v0.3.0, restoring old feature.
    - Make '^' right-associative.
    - Add '%' remainder parsed similar to division.
    - Add functions:
       + sin(x), cos(x)
       + rand(), seed(x), time()
       + rint(x)
    - Add constants:
       + mf, pi

Old scripts can be converted to the new syntax
using in part simple search-and-replace steps:
 1. Each old '\' should become ';'.
 2. Each ',' should become 'w,'; if
    there's a new 'w,' before a '~'
    the '~' should be removed, else
    it should be replaced with 'w'.
 3. Each '+[' should become '[' and
    every '+f[' should become 'f['.
 4. Each 'v' inside a '{...}'
    should be changed to 'g'.
 5. For ramp arguments 'cexp', 'clog', etc.,
    replace string with 'rexp', 'rlog', etc.
    Except for 'ccos', which becomes 'rsin'.

A smaller change included is that the 'O f'
and 'S n' default values are now 440. Seems
less awkward than the older, whimsical 444.

Add '--mono' and '--stdout' cli options.
Also support '-o -' audio to stdout with
AU format header. (Unlike WAV, AU always
allows headers without a known length. A
file written with a name (not using '-')
is still written as a WAV file however.)