- 27 May, 2019 13 commits
-
-
Joel K. Pettersson authored
Make SGSNodeList more elaborate and refactor parser and "program" using it. Further parser changes to take multiple operator binding into account. As-yet unused beginning of "program" code to more fully handle operator allocation. Sound generator timing fix. (Originally released at Gna! as sgensys-20120305.tgz, without tests/.)
-
Joel K. Pettersson authored
Parser fix for multiple operator binding, and minor refactoring. Copyright notices and LGPL-3.0+ info added to source files. (README.COPYRIGHT, added to this repository for earlier versions lacking this, removed with this commit.) tests/ script changes. (Taken from later working dir because tests/ missing in tarball, but no scripts dated later than 2012-02-20.)
-
Joel K. Pettersson authored
-
Joel K. Pettersson authored
Parser fixes and minor refactoring. Sound generator fix for handling of voices and panning.
-
Joel K. Pettersson authored
Parser fixes for new design and timing. Add and use 'ti' (infinite time) for nested operators by default. Such operators play whenever their carrier(s) do. Sound generator corrected, adjacency indexing was outdated (only changed elsewhere). Script files in main dir moved to "tests/". Update scripts with outdated syntax.
-
Joel K. Pettersson authored
Some parser refactoring and experimental changes. Re-enable operator binding with '{}', change nesting syntax to '<>'. Reorder code. Fix for voice allocation. Move string copying out of symbol table, make it simply store pointer. Syntax changes: - Use '<>' to list modulators rather than '{}', as in 'a!<...>', 'f!<...>' or 'r!<...>', or 'p!<...>'. - Remove '-' syntax for PM modulators. Replaced with 'p!<...>'. - Add '{...}' for binding several operators as one object to manipulate. Used to e.g. link several carriers to one or more modulators. Update various test scripts.
-
Joel K. Pettersson authored
Allocate voices after parsing, instead of trying to track and assign voice IDs during. Merge VoiceData into EventNode. Script syntax: Rename 'b' (panning, applies to the voice) to 'P'.
-
Joel K. Pettersson authored
Undo the 2011-09-26 redesign, preserving some of the new code and further updating the parser, while postponing support for the new '{}' operator binding syntax. Improve comments for sound generator, tiny code style clean-up.
-
Joel K. Pettersson authored
Further parser changes to support new '{}' operator binding syntax. Sound generator clean-up. Improve comments.
-
Joel K. Pettersson authored
Initial work to support new '{}' syntax for binding operators together as a single object. This is to allow carrier-modulator linkages to be M:N, and not just 1:N (as in adding a list of modulators to a single carrier).
-
Joel K. Pettersson authored
Redesign parser, changing NodeData and its uses and replacing *_event(), *_voice(), *_operator() functions with restructured code. Big refactoring, breaking out various smaller nd_*() functions. Add and use NodeList type. Flesh out sound buffer counting in sound generator.
-
Joel K. Pettersson authored
Parser fixes for compound steps and numerical expression parsing. Fixes for silence ('s') and timing. Fix syntax in an outdated test script.
-
Joel K. Pettersson authored
Redesign: The sound "program" uses an operator graph for each voice, each operator specifying its modulators using an adjacency list. Event data is also split into a main struct keeping track of timing, linked to accompanying voice and/or operator updates. Script syntax: Rename '/' (delay time) to '\'. The old meaning of '\' is scrapped, 's' (silence) providing what it did when combined with '\'.
-
- 11 May, 2019 13 commits
-
-
Joel K. Pettersson authored
Separate parser and "program" event types. Parser now uses its own "EventNode" suitable for parsing internally, replaced in the output with a cleaned-up event struct better adapted for the sound generator. Script syntax changes: - 'W' (wave) became 'O' (operator, i.e. oscillator with attached configuration options). - 'n' (frequency as note) removed, notes may now be set to 'f'. - 'b' (balance or panning) added. - 'srs' (square root of sine) wave type added. - 'p!{...}' (PM modulator list) replaced by '-' (PM linking) optionally combined with '<>' (subscope), as in '<-...>'.
-
Joel K. Pettersson authored
Rename subvalue 's' (shape of change) to 'c' (change type). Change type values are: - 'lin' (linear) - 'exp' (exponential) - 'log' (logarithmic) 'exp' and 'log' are not truly exponential or logarithmic, respectively, but instead use polynomial approximations developed "by ear" to sound "smooth" and natural. (The real curves do not have a finite length smooth ending.) Refactor sound generator handling of parameter value buffers.
-
Joel K. Pettersson authored
Parameters can now be set to "[...]", with sub-parameters deciding how the value changes over a specific time. This provides minimal envelope support and is done ahead of adding full-fledged ADSR support in the language. Sub-parameters: - 's' (shape of change, only "l" (linear) currently done) - 't' (time to reach target value) - 'v' (target value) Supported for amplitude, frequency, and panning. Also change frequency ('f') to accept note values, both directly and for 'v' inside '[]'. (This change broke note values for 'n', which is now obsolete.)
-
Joel K. Pettersson authored
Note frequencies in C-major scale are specified using 'n'; the value is the upper-case letter of the note, optionally followed by 's' (sharp) or 'f' (flat), and then optionally the octave number. Currently, just tuning is used, with A4=444hz by default. 'S' parameter 'n' sets A4 tuning frequency. "Subnotes" between two notes, in an "inner octave", supported with a prefix for the value (lower case letter of note). (Subnotes, unlike notes, cannot currently be sharp nor flat.)
-
Joel K. Pettersson authored
Use ';' as separator between timed steps for an operation. Steps in the input handled by the parser no longer always correspond to the linear order of the resulting event list. The event list is "flattened" after parsing. Rename scripts from .mgs to .sgs.
-
Joel K. Pettersson authored
Bugfixes and minor refactoring. Debug printouts added for remaining debugging. Script syntax: Added 'w' for changing wave type of operator.
-
Joel K. Pettersson authored
Redesign parser-generated "program" for sound generator. Use a sequence of "events", which are updates for the sound generator to process, constructing and maintaining its voices and operators accordingly. The thinking was first to separate the old "program nodes" into separate timed lists of "operator nodes" and "event nodes", the former specifying what is to be used and the latter how. But only "event nodes" were necessary as input. Script syntax changes: - Added 's', silent time for operator (delay before sound). - Replaced center/left/right ('C', 'L', 'R') with 'b' for panning. Removed click reduction code in sound generator rather than fixing it for the new per-block processing. It only worked for basic wave forms (by fitting the duration of a wave to the cycle length), not for modulated waves.
-
Joel K. Pettersson authored
Parser refactoring and changes. Use per-block instead of per-sample processing for sound generation.
-
Joel K. Pettersson authored
Parser-generated program nodes used by sound generator semi-divided into operator nodes and set data nodes.
-
Joel K. Pettersson authored
Make parser and sound generator use linked lists for modulators. Change PM modulator list syntax to "p!{}" for consistency with AM and FM, and add 'p' phase setting option. Add oscillator float-to-int phase value conversion macro. Change "envelope output" version of RUN macro to have very slightly higher output value.
-
Joel K. Pettersson authored
Support AM and FM in addition to PM. Also change syntax for modulator lists; now enclosed within "{}" instead of "<>". Use "a!{}" for AM, "f!{}" or "r!{}" for FM, and "m{}" for PM. Turn 'r' into an actual ratio parameter, adding the necessary divisions. Change oscillator type to store no more than phase, making frequency and amplitude parameters. Add "envelope output" version of RUN macro.
-
Joel K. Pettersson authored
Separate sample-rate dependent coefficent and frequency, removing need to update coefficent when frequency is changed. Calculate phase increment each sample. Add working amplitude scaling. Clean up sound generator design a bit.
-
Joel K. Pettersson authored
Parse arithmetic within "()". Support setting frequency as carrier/modulator ratio ('r') for modulators. The values are actually multiplied, the ratio value meant to be something like (1/3). PM corrected in oscillator code.
-
- 10 May, 2019 4 commits
-
-
Joel K. Pettersson authored
Parser changed to handle scope levels with recursion, for specifying modulators. PM modulator list syntax is 'm<...>', modulator waves within the '<>'. The "wait until done" operation also renamed from 'E' to '|'. Placeholders for envelope support added.
-
Joel K. Pettersson authored
Defining with "'", referencing with ":". Add symbol table, using a simple linked list until something better is needed. Sound generator changes also include click reduction by increasing time to match the end of a wave cycle.
-
Joel K. Pettersson authored
Sound generator rewritten. Use timing calculations instead of wait nodes. New oscillator. Script syntax changes: - 'S' (set default value) instead of 'D'. - 'W' (wave) instead of 'S' (simple sound). - '/' (wait time) instead of 'W' followed by 't'. - '\' (wait time also affecting current operation) added. - '<...>' for subscope added.
-
Joel K. Pettersson authored
The files COPYING and README.COPYRIGHT have been added to make all old snapshots available under LGPL-3.0+ and replace missing copyright info in the source files.
-