Extensible — Users of Oscen should be able to create their own synth modules without having to modify any of the library code, e.g. add cases to an enum. This is accomplished by defining the
Signaltrait and using trait objects to represent synth modules which can be added to a
Rack(graph). Signal objects can be downcast using the
Anytrait to access specific features of that particular
Dynamic - The
Rackshould be able to be "patched" while the synth is running, similar to a modular hardware synth. A
Rackis basically a graph where nodes are synth modules, e.g. oscillators, envelope generators and filters. Each node can have many inputs and a single output. Edges connect the ouput of one node to one of the inputs of another. Since we cannot know the names of the fields of a node (because it's a trait object) We use the
IndexMuttraits to access the fields by a
Strongly Typed - As much as possible have the rust catch errors in our synth at comple time. This is difficult to do in light of the previous objective and some compromises have to be made. E.g., it is not possible to know at compile time about a patch that will be added while the synth is running.
A collection of some basic audio filters.
Midi interface nodes.
Syth modules for combining other sytn modules.
Some common (and some less common) oscillators.
An implementation of freeverb.
Core Oscen types and traits.
If your module has