Subsynth machine added. Polyphonic, two oscillators and a filter per voice.
New waveform types added.
Oscillators now support self-modulation, allowing real FM feedback.
Auto mute when output below threshold behaviours added to machine voices, etc, saving significant computational time
Sequencer changes
Defines sequence event type that sets a machine controller.
Allows multiple events on the same line/channel position.
Added swing with selectable intensity / note division.
Automation
Defines IAutomatable interface for Machines that can have their parameters modified by sequence events.
Adds controller definition types (Switch, Knob etc) that expose the sequence controllable parameters of a machine.
Adds Automator class that is used as a delegate to implement the required behaviour of the IAutomatable interface of a machine. This consumes the control definitions and constructs the necessary internal tracking state to manage all the sequencer controllable aspects of a machine.
Other
Standardises the notion of voice level so that the basic output maximum of a single voice, whether from a monophonic or polyphonic machine has the same level.
Implemented shareable semantics for objects so that consumers don't need to know whether the instances can be shared safely. Instead the object provides a share behaviour that either returns itself or a clone of sharing is unsafe.
Improved automatic muting of streams and implemented in machines.
Got rid of "antialiased" waveforms and moved responsibility for antialising to the oscillator where it always should have been.
New stuff
Sequencer changes
Automation
Other