Tags: saugns/saugns
Tags
saugns v0.4.8c. Fix minor bug, refactoring. Fix v0.4.8b bug which gave junk results when a 0 Hz oscillator has an `f` modulator with `r` frequency ratio. (Normally useless, but valid in scripts.) Was due to use of uninitialized data for that specific case only. This script made noise with the buggy v0.4.8b, is correctly silent now: `W f0[W r10 a1000] t10`
saugns v0.4.8b. Value range modulation for more parameters. For consistency, allow "Modulation with value ranges" for every parameter which accepts value sweeps. That's all with modulators, except the main phase & PM parameter `p` and its frequency-scaled PM subparameter `p.f`, where range-mapping doesn't make sense. This means it's now supported for `c` (channel mixing) and for self-PM `p.a` as well.
saugns v0.4.8. Add long-form value range modulation syntax. Modulation with value range. Add a new variation on the syntax with greater flexibility, for both `a` (amplitude) and `f`/`r` (frequency) parameters. Below `X` and `Y` denote optionally included range endpoint values, while `A` and `B` are the newly introduced modulator lists whose outputs are added for the endpoints only. The `C` and `D` modulator lists work as before. The old syntaxes remain as short forms unchanged: - `X[A]..Y[B].r[C].a[D]` - `X[D].rY[C]` - `X[D]` The use of the '..' changes the meaning of the first modulator list prior if included, so that it plays the part of `A` rather than of `D`. (If no `C` list is used for the generator the results of `A` and `D` modulators are identical, but the lists are built and cleared separately.)
saugns v0.4.7c. Bugfixes for "r" rel. freq handling. Fix bugs for `r...` relative frequency parameters in AM modulators when placed inside `A` or `N`. (Latter types don't have frequency parameters, so use of `r` inside can't apply to them as the carriers outside.) When possible, make `r1` be better than `f1`. * A script `N a0[W]` now has a default frequency of `f440` for the inner `W`, not `r1` (which is like `f1` here, as there's no carrier frequency). But, in `W a0.r1[N[W]]` it's `r1`, effectively `f440`. * A separate bug affected e.g. `W a0.r1[A0[W r1]]`, where the `r1` acted like `f1` instead of passing the nearest outer frequency from the other `W`. A pointer wasn't passed along, a typo made it NULL. * Don't allow `r` for a modulator with all carriers being of types lacking a frequency parameter. Now such modulators are more like 1st level carriers. Clarify `r` behavior fully in the `README.SAU` file.
saugns v0.4.7. Improved named note frequencies. Language changes: * Add generator type `A` (Amplitude generator), for sweepable amplitude offsets i.e. DC offsets, plus adding and/or multiplying its AM modulators. * Frequencies as notes. - Support MIDI note number constants (`M0` to `M127` where `M69` by default corresponds to 440 Hz). All tuning systems are supported, but for just intoned notes, numbers which don't map to any natural note get the average of the two surrounding ones. Other options include flats and sharps (which for a just note are never exactly between two notes) like for C-D-E-F-G-A-B notes. - For just intoned tuning modes, rotate scale ratios with key selection, so that the note for a key has the first ratio. Makes tuning good for non-C keys. Generator `A` is yet of limited use, but will take a greater role when distortion options etc. are added.
saugns v0.4.6. Added `R` flag `p` for 1D Perlin noise modes. Language changes: * Signal generator types. `R` mode `m` flags: - Add `p` (Perlin noise mode) to reshape the waveform for 1D Perlin noise, combinable with all noise functions and other flags. - Change updating of flags when adjusting mode; now every flag set is kept until setting a function, which clears old flags. Before, any change to mode cleared old flags. (Makes especially the use of parameter `.a` less clunky.) Also fix `m.a... ma`, now handled like `ma.a...`. * Line types. - Add `smo` (Smoothstep degree 5), a sinuous curve traditionally used for Perlin noise. * Seed parameter. Make `s` recognize the same numerical constants as `p` (phase), currently `G`.
saugns v0.4.5. Added self-PM/"feedback FM". New 'R' mode 'a'. Language changes: * Add `p.a` amplitude feedback parameter for phase, for phase self-modulation. Accepts both sweep and modulators within `[]`. Default value is 0.0. * Signal generator types. `R` mode `m` noise functions: - Add `a` (additive recurrence, low-discrepancy a.k.a. quasirandom sequence) by default based on the golden ratio. Add mode subparameter `m.a` for changing the multiplier used to the fractional part of a number. - Rename `r` (uniform random, default) to `u`. - Seeds for all modes not using the `h` flag now differ. Keep the highest bit from the internal 32-bit seed, sacrifice the lowest bit (odd vs. even line segment) as phase extends a bit to take over its role instead. * Numerical expressions. Changes to mathematical functions: - Add `arbf(x)`, additive recurrence base frequency. Returns a multiplier for how much the pitch will change for an `R` instance when `x` is set to `R ma.a`. The value may be negative, corresponding to direction in a sawtooth-like wave which rises rather than falls. - Add `arhf(x)`, additive recurrence higher frequency. Like `arbf(x)`, but for the closest new frequency above the unshifted base frequency, instead of below it. - Add `sgn(x)`, which returns the sign of `x` as +/- 1 or 0. (The sign bit is also preserved for 0.) - Remove deprecated `seed(x)` function replaced by `$seed`. * Seedable common parameters. Add `s` common to `N` and `R`, for overriding the default seed (assigned to new instances based on the `$seed` variable and a random sequence derived from it). `s` takes a value modulo 1.0 as the percentage of the state space, so `s0` means beginning, 0. This self-PM support requries, to preserve the performance when not using the feature, twice as much code for both the `W` and `R` implementations. Self-modulation typically takes at least 3 times more CPU time, sometimes more than 4 times. (Self-modulation precludes use of vectorizing optimations.) The parameter range uses the simplest scaling possible, like multiplying the value by pi. This maps 1.0 to Yamaha feedback level 6 in their chips. To avoid excessive ringing at that level, stronger filtering than Yamaha used is used: 1-zero (their choice) combined with 1-pole (itself a little better at dampening self-oscillations than a 1-zero filter alone).
saugns v0.4.4d. Another minor parsing bugfix. Refactoring. Fix parsing bugs for (still undocumented) `{}` grouping. Refactor scope handling in parser, extend arrtype module. "Random segments oscillator" has been renamed to "Rumble oscillator, a.k.a. random line segments oscillator" in the documentation.
saugns v0.4.4c. Minor parsing bugfix. Refactoring. Language changes: * Nesting syntax. - Fix parsing of num. expr. namespace for "Y" in `[X][Y]`; for any "X" object params, "Y" sweep namespace was lost. - Change undocumented generic `<...>` nesting, to `{...}`. * Sweep syntax. Remove deprecated support for params in `{}`. Rebased down modulator list `-` and concat, and sweep and list unification, to v0.2.x (modified sgensys versions pre-saugns). Logs kept while scripts in branch have one less syntax change. Changes in naming and code style built up, working through the versions. The new code is tidied similar to old rebasing work. Outside the parser, refactoring and more cover some more code.
PreviousNext