Case Study
StringFlux is a transient-aware, multiband granular delay and freeze plugin for stringed instruments. The design goal is to turn one performance into layered texture while preserving playable response.
Design reference for quality, CPU, and audio-thread safety. CPU numbers stay informal until there is a stable build to measure.
| Factor | Goal | Engine behavior |
|---|---|---|
| 1x | Baseline CPU; default monitoring path | No resampler churn; simplest state machine |
| 2x / 4x | Reduce aliasing on nonlinear stages in the wet path | Reconfiguration queued; applied only at safe boundaries |
The engine prioritizes predictable scheduler behavior and stable routing over adding more effect modules early.
Oversampling changes are deferred to safe boundaries to avoid audio-thread instability and state corruption.
Scheduler behavior keeps transient attacks readable and leaves headroom before grain density pegs at the ceiling.
Pre-RC validation currently covers automated VST3 checks, Cubase host-reported latency, and a standalone app smoke flow. These checks describe the current development build, not a final release compatibility guarantee.
Scenario: Oversampling mode change during active playback
Observed behavior: Mode switches queue to the next safe boundary so the audio thread never tears down oversamplers mid-callback.
Engineering value: This keeps behavior deterministic and reduces transition instability risk while tuning the wet-path nonlinear stages.
Scenario: Repeated transitions across 1x, 2x, and 4x modes in dev sessions
Observed behavior: Engine state stays recoverable after mode changes, so dev sessions keep moving without bouncing the plugin instance.
Engineering value: Supports practical iteration speed while validating multiband routing and scheduler behavior.
Current public validation is intentionally bounded. StringFlux is still in active development, so this section records what has been checked without implying release-level compatibility. The product-page screenshots may show a `v0.3-dev` UI label; the build label below refers to the validation candidate captured for these checks.
Build under test
v1.0.0-beta / f27ea6d
Current main pre-RC validation build, not the final v1.0.0 release build.
Format and platform
Windows VST3
Primary development validation is currently on Windows, with Cubase as the main host.
Public release status
Not released
Validation logs help define the current boundary, but compatibility claims remain provisional until final release validation is rerun.
| Check | Result | Details |
|---|---|---|
| pluginval 1.0.4 | Pass | Strictness 10, repeat 200 randomized run, exit code 0. |
| Steinberg VST3 Validator | Pass | Standalone validator run reported 47 tests passed and 0 failed. |
| VST3 moduleinfo | Pass | Vendor check found the expected Matt Maitland module metadata. |
| Standalone app smoke flow | Pass | Launch, audio, resize/no-crash, and settings/preset memory were checked on Windows 11. |
These values were captured from Cubase Channel Latency Overview at 48 kHz. They are host-reported development measurements, not a cross-DAW latency guarantee.
| Mode | Oversampling | Samples | ms | Note |
|---|---|---|---|---|
| Studio | Standard 1x | 512 | 10.7 | Cubase host-reported insert latency at 48 kHz. |
| Studio | High 2x | 305 | 6.4 | Host-reported Cubase value; FIR delay is converted from oversampled domain. |
| Studio | Ultra 4x | 187 | 3.9 | Host-reported Cubase value; lower than 1x/2x because the FIR delay runs oversampled. |
| Live | Forced 1x | 0 | 0.00 | Live mode exposes forced 1x only; Cubase showed no latency value. |
Status: In Progress
Public DSP case study and decision records document architecture, constraints, a pre-RC validation snapshot, latency data, and current limits. Core implementation details are kept private for licensing and commercial release planning.
Known limits: Validation currently covers one Windows VST3 pre-RC build. CPU table, broader host compatibility, and final release validation are still pending.
No questions or comments yet. Sign in with GitHub to leave the first one.