This time it started with work on the two coming effect plugins. I found some better solutions to certain things or cool UX solutions, and since a lot of components are shared, that turned into going through most of the catalogue.
As I went through the lineup a couple of times, I managed to add a few bits that made the repetitive work more bearable for me. Some plugins have gotten optimizations, while others have gotten new sound modes or other interesting new features. Let’s go through a few of them.
Curves & Membranes 1.4.0
Expression Mode
Pressure controls an expression envelope based on the red MPE mode from Partials & Discrepancies. Falling pressure is smoothed to deal with the slightly uneven pressure data I have seen from MPE controllers.
Pitch bend is ±48 semitones.
CC74/Slide controls oscillator slot geometry using the same mapping as CC4. Clock and keyboard stepping are temporarily disabled while Expression Mode is active, so they do not fight CC74 for the slot position. Their previous settings are restored when Expression Mode is turned off.
Four Voice Mode
The oscillator section can now run four voices with round-robin allocation and voice stealing.
The membrane and filter remain monophonic and shared, so it is paraphonic once the voices reach that part of the signal path.
With Expression Mode active, each voice gets independent pressure envelope, pitch bend, and CC74-controlled oscillator geometry.
Outside Expression Mode, velocity can control geometry independently for each voice.
Active voices are drawn as dim waveform overlays in the oscillator editor. Their brightness follows voice level, so you can see the different geometries moving before they meet in the shared membrane/filter.
There has also been some gain staging work around the four oscillator voices, and inactive voices skip processing to keep CPU use down.
Velocity Slot Morphing
With clock off and KBD RST enabled, velocity controls the position around the active oscillator slots.
Preset Slew determines the interpolation between the slot geometries.
In Four Voice Mode, each note can therefore get its own waveform geometry from velocity. Since the slots can contain different point positions and oscillator states, harder and softer notes can differ substantially before the shared filter even gets involved.
Waveform Editing
- Shift-drag locks node or handle movement horizontally or vertically depending on the initial drag direction
- Option/Alt-drag scales the complete waveform vertically around the center line
- scaling through zero inverts the waveform
- while sequencing, the scaling gesture is written into every slot passed during the drag
- manual Bézier/Node morphing is smoother
- anti-aliasing has been improved for sharp Node waveforms, LFO modulation, and detuned high notes
Copy/Paste now includes point positions, Bézier/Node morph, Clip/Fold state, detune, Half-Octave Offset, and pitch-LFO settings.
There is also multi-step Undo/Redo.
Partials & Discrepancies 1.3.2
Live View
The waveform editor can follow an active voice and show its actual slewed node geometry, partial settings, and sequencer position.
Partials & Discrepancies can have eight voices sitting at different points between slots while Voice Offset and the Discrepancy parameters alter them further. Looking at the static slot therefore only tells part of the story.
When the followed voice reaches the end of its release, the editor moves to another active voice.
Editing holds Live View on the current slot for a few seconds so the UI does not move away while you are trying to grab something.
X-Voice FM
Each voice can linearly FM the following voice: Voice 1 → 2 → 3 → 4 → 5 → 6 → 7 → 8 → 1. Voice 8 feeding Voice 1 introduces a one-sample delay in the loop.
There are two sources:
- FILT uses the previous voice after its filter and before its VCA
- OSC uses the previous voice’s oscillator directly
FILT generally produces smoother modulation because the source has already been filtered. OSC keeps the full oscillator spectrum and therefore uses a smaller modulation range.
The amount is stored independently in every oscillator slot and slews with the slot sequencer. It can also be locked if you want one FM amount across all slots.
Since the modulator is the previous played voice, changing intervals and chord voicing changes the modulation source itself. With simple intervals it can add harmonics and movement; with more complex chords and higher amounts it very quickly moves into inharmonic spectra.
Velocity Position
With the clock off, VEL->POS maps note velocity to the active oscillator slots.
Preset Slew sets the interpolation between positions.
It works together with Voice Offset and Position Discrepancy, so velocity defines one part of the voice position while the existing systems can move it further.
With KBD->RST + KBD->NEXT, velocity chooses the starting point before the single sequencer step.
Wave Editing and Workflow
- Shift-drag locks node movement to one axis
- Option/Alt-drag scales the complete waveform around zero
- scaling through zero inverts the waveform
- wave-slot Copy/Paste by keyboard command
- multi-step Undo/Redo
I also reduced duplicated data going between the DSP and WebView, capped visual telemetry to the actual 30 FPS interface rate, and added backpressure so old visual frames are dropped instead of accumulating if rendering falls behind.
Effect slot sequencers
Most of the effects now share the same editing behavior.
If you hold a parameter while the sequencer passes through slots, the value is written into each slot it passes. This makes it possible to change one parameter across several states without stopping the sequencer first.
Cmd/Ctrl+click previews a slot directly, pauses sequencing, and bypasses slew while you edit it.
Most effects also get:
- Cmd/Ctrl+C / Cmd/Ctrl+V for slot Copy/Paste
- Cmd/Ctrl+Z for 30-step Undo
- Cmd/Ctrl+Shift+Z for Redo
A lot of the work around this was cleaning up how parameter state moves between the audio processor and WebView while sequencing.
Frequency Guillotine 1.3.2
Smooth Mode changes quite a bit of the filterbank DSP:
- filter slopes change from 48 dB/octave to 36 dB/octave
- the bottom band becomes low-pass
- the top band becomes high-pass
- input Drive uses softer asymmetric processing with drive-dependent darkening
- each band uses tape-style saturation and damping
- heavy positive boosts get progressively more high-frequency damping
- positive band gain maps to an effective maximum of +18 dB instead of +24 dB
- feedback uses the smoother saturation model
- output limiting uses a softer valve-style response
The sidechain filterbank changes to 36 dB/octave as well.
The wider filters and softer saturation make the bands overlap more and reduce some of the harder edges you get from the normal mode when several bands are pushed.
Shift-drag also lets you move all band levels or all pan controls together.
Harmonic Dissector 1.3.2
Smooth Mode gives Input Drive and both filter-section drives softer asymmetric processing with drive-dependent high-frequency damping.
The normal post-filter saturation is disabled in Smooth Mode, otherwise the two saturation stages simply stack.
The additional processing has also been optimized for small host buffer sizes.
Shift-drag moves matching controls on the two filter sections together, which makes it easier to adjust both sides without manually matching values.
Tension Reactor 1.3.2
Bright Spring uses a separate dispersive spring path with more high-frequency content and a smoother decay.
Tone and Drive operate over a higher frequency range, and Drive uses the same softer asymmetric processing introduced in the new modes in Frequency Guillotine and Harmonic Dissector.
It has less of the dark, rattling character of the normal model and works better for me when the spring needs to sit higher in a guitar or synth sound. It uses a more traditional spring reverb emulation and is quite a bit easier on the CPU.
Ensemble Diffuser 1.3.2
The ensemble and phaser DSP got some cleanup:
- less repeated filter and smoothing calculation
- refined modulation smoothing
- updated chorus filtering and phase smoothing
- improved DC stability
- adjusted BBD filtering and grit
- changes to the phaser lamp/LDR response, op-amp coloration, and feedback filtering
Cavitation Fractures 1.3.2
Regular mode is now called Emission. Two new modes use the simulation to subtract from incoming audio: Erosion works with narrow frequency-band removal, while Vacuum works on amplitude.
Visual energy and metering calculations stop when visualization is inactive.
More processing memory is preallocated so hosts temporarily sending larger buffers than they advertised do not cause allocation on the audio thread.
Performance work in the simulation effects
Spectral Pressure Chamber
Crossover and spectral-analysis values are no longer recalculated when nothing affecting them has changed.
FFT magnitude results are reused between overlapping analysis bands, and parts of the membrane simulation and visual data generation have been simplified.
Editor-only metering and snapshots stop when the interface is closed.
Synaptic Resonance
Spectral and geometric values are reused during each neural simulation update instead of recalculated for each part of the lattice processing.
Visual metering stops with the editor closed, and frame scheduling has been adjusted for steadier updates.
Grain Discharge
Voice counting and allocation, sample lookup, envelopes, and grain rendering have been optimized.
Some old pitch-analysis code that was no longer used has been removed.
High-sample-rate memory use is lower, unusually large host buffers are handled better, particles render at 30 FPS, and the simulation background is cached rather than rebuilt every frame.
Binaural Modulator
Slot slew now interpolates linearly through the complete step.
Orbit rotations and orbit geometry are cached, only changed parameters are sent to the WebView, and audio scratch buffers are preallocated.
Geometry Delay
Sequencer state now reaches the audio thread through lock-free snapshots, reducing synchronization and repeated state copying while sequencing.
Geometry Reverb
Fixed DSP coefficients and room geometry are cached more aggressively.
The renderer also does fewer allocations and repeated matrix updates, especially while the editor is open.
The short list
- Curves & Membranes: Expression/MPE mode
- Curves & Membranes: four oscillator voices into the shared membrane/filter
- Curves & Membranes: velocity-controlled oscillator geometry
- Partials & Discrepancies: Live View
- Partials & Discrepancies: circular cross-voice FM
- Partials & Discrepancies: velocity-controlled slot position
- Frequency Guillotine: Smooth Mode
- Harmonic Dissector: Smooth Mode
- Tension Reactor: Bright Spring Mode
- Cavitation Fractures: Erosion and Vacuum Mode
- Copy/Paste, slot preview, and Undo/Redo across the effects
- a fairly large amount of CPU, WebView, and real-time cleanup
And... I had been a dumb-ass with some earlier work, which I had to correct. The full suite should again run fine on OS X 10.15+; my old 2014 Mac mini has moved into the office.
User guides, changelogs, and what comes next
Besides that, I have done something I have been postponing for a long time: I have added basic user guides to all plugin pages and a changelog showing the latest updates.
The coming month will see the release of two new effect plugins and some adjustments to bundle prices. If you already have Full Suite v2, both plugins will be free. I am planning to add one of them to the other bundles.
After that I will work on a new synth.
All the best,
Rasmus Nyåker