Skip to content

Releases: rocketbombs/VaporKey

VaporKey v0.5.1

VaporKey v0.5.1 Pre-release
Pre-release

Choose a tag to compare

@rocketbombs rocketbombs released this 13 May 11:37
fa3b8eb

VaporKey v0.5.1 — prerelease

A point release on top of 0.5.0: three targeted fixes surfaced by the end-user
testing round on 0.5.0. No parameter, preset, or saved-state format changes —
existing 0.5.0 sessions load and sound identical.

Fixes that matter for live use

  • EQ curve no longer freezes after switching tabs. The 3-band EQ display
    was driven by a 30 Hz Timer gated by isShowing() (added in the
    multi-instance perf pass alongside the cached editor backdrop). On some
    tab-switch sequences the timer didn't restart when the FX tab came back
    into view, so dragging the L / M / H nodes updated the underlying
    parameter but the curve drawn on top stayed stuck on its old shape until
    a forced repaint. Replaced the polling timer with an
    AudioProcessorValueTreeState parameter listener on the four EQ ids; the
    curve now repaints reactively the moment any value changes — drags, host
    automation, preset loads, and undo — with no polling cost or visibility
    race left to get wrong. Same pattern the X-MOD routing diagram already
    uses.

  • Arp first note lands on the press instead of up to a full step later.
    The OFF → ON transition used to set the internal step countdown to a full
    stepSamples, so the first note of a fresh phrase would fire "strictly
    after the chord is registered" — in practice up to ~0.5 s at 1/4 + 120 BPM,
    clearly perceptible as latency. The arp also let the grid free-tick through
    silence, so even mid-session, releasing every key and pressing again would
    land the new phrase's first note wherever the silent grid happened to be.
    The transition now resets samplesToStep to zero, and the
    empty-held → non-empty-held edge inside the same arp cycle also resets the
    grid, so fresh phrases always start on the press. Latched phrases are
    unaffected.

  • Arp step placement no longer drifts against the host beat. The
    per-iteration cursor advance used (int) dt truncation while
    samplesToStep retained full double precision, systematically pulling each
    step's note placement 0..1 samples earlier than its real-time position.
    The bias is one-directional and accumulates as steady drift — small per
    step (sub-millisecond) but audible over long sessions (~6 ms after 1000
    steps at 1/16 + 120 BPM). Switched the advance to std::lround (dt), so
    the rounding error is zero-mean instead of one-sided and drift no longer
    accumulates; each step's note now lands within 0.5 sample of its
    real-time position.

Compatibility

  • 0.5.1 reads every 0.5.0 session and preset unchanged. No parameter,
    preset format, or saved-state changes.
  • VST3 + Standalone, Windows / macOS (universal x86_64 + arm64) / Linux.
  • macOS users: xattr -dr com.apple.quarantine on the .vst3 after copy.

The full diff against 0.5.0 is included below; the curated changelog lives
in CHANGELOG.md.

What's Changed

  • perf(editor): unblock host UI thread under multi-instance load by @rocketbombs in #42
  • docs(readme): embed v0.5.0 audio demo and link platform downloads by @rocketbombs in #43
  • docs(readme): drop video embed, keep direct demo link by @rocketbombs in #44
  • fix(ui,arp): EQ curve repaints reactively + arp first note lands on p… by @rocketbombs in #45
  • release: v0.5.1 prerelease by @rocketbombs in #46

Full Changelog: v0.5.0...v0.5.1

VaporKey v0.5

VaporKey v0.5 Pre-release
Pre-release

Choose a tag to compare

@rocketbombs rocketbombs released this 10 May 16:50
2098e7a

VaporKey v0.5.0 — prerelease

This is the first cut of the 0.5 line. It carries forward every preset and
parameter from 0.4.x (the legacy 0..9 wavetable indices stay frozen), but the
synth engine, FX chain, and factory content all grew substantially. Expect
sharper highs, denser tails, and a much bigger usable preset bank out of the
gate.

Highlights

  • 23 factory wavetables, six categories. The previous 9-shape bank grew
    to 23 (Sync, RingMod, Wavefold, Vowels, Choir, Whisper, Organ, Pluck,
    Sawteeth, Even/Odd, Tine, Mallet, FM Stack, Bitcrush) surfaced through a
    new multi-column popup picker grouped by Analog / Vocal / Harmonic /
    Inharmonic / Digital / Special.
  • Cross-oscillator modulation (X-MOD). Each oscillator can now use any
    other oscillator (or none) as an FM source, ring modulator, or amplitude
    modulator. Lives below the per-osc strips on the OSC page with a small
    node-and-arrow diagram of the active routing.
  • Dattorro plate reverb. Replaces JUCE's FreeVerb with a 1997 Dattorro
    topology — denser, smoother tail, structural stereo de-correlation. Same
    reverb_size / reverb_damp parameter ids and ranges, so every existing
    preset still loads.
  • 4× oversampled distortion. The soft / hard / fold / bit stages now run
    through a polyphase-IIR halfband oversampler so hard-clip and wavefolder
    harmonics no longer alias hard back into the audible range. Cost is paid
    only when distortion is engaged.
  • Antiderivative-anti-aliased per-voice saturation. The pre-filter drive
    and post-filter analog saturation in WTVoice now use first-order ADAA on
    fastTanh. Cheap enough to keep all 16 voices in budget, quietly cleaner
    on aggressive drives.
  • 170 factory presets + two-pane browser. The 57-preset starter bank
    grew to 170 patches across Bass, Lead, Pad, Pluck, Keys, Bell, FX, and
    Arp, every original preset preserved by name and content. The Master
    page's preset combo became a vertical category sidebar with a live name
    search; "Showing N / M" chip in the header keeps the filtered size
    visible.
  • Mod wheel and channel aftertouch as first-class mod sources with
    destination + amount controls on the Mod page (carried over from 0.4.1).

Fixes that matter for live use

  • Arp toggle no longer leaves a stuck note droning when you switch the
    arp on/off while a key is already held.
  • Mono + legato now actually glides instead of silently retriggering
    on a fresh voice.
  • Multi-instance host freezes caused by audio-thread heap allocations
    inside processArpeggiator, the EQ coefficient builder, and the held /
    latched arp arrays.
  • Mono bus output no longer aliases the right channel pointer over
    the left buffer, which had been doubling gain and scrambling cross-channel
    routing.
  • Preset switching holds the audio callback lock across silence, FX
    reset, and the APVTS state swap, so there's no longer a click on
    session reload.

Build & CI

  • Windows builds switched to Ninja to escape the MSBuild + JUCE /MP
    parallelism stack that had been periodically OOM-killing cl.exe on the
    4-core windows-2022 runners.
  • New VaporKeyTests target — unit + audio-regression suite covering
    the synth engine, arpeggiator, FX chain, wavetable mip-mapping, .wav
    import, parameter registry, factory presets, state save/restore, and an
    end-to-end CPU-budget / click-free preset-switch check. CI runs it on
    Linux between the preset linter and the per-platform pluginval pass.
  • Standalone .exe / .app / Linux binary now built and uploaded on
    every platform (was VST3-only previously).

Compatibility

  • 0.5 reads every 0.4.x preset and saved-state blob. The legacy 0..9
    wavetable shape indices are frozen. New shapes occupy indices 10+.
  • VST3 + Standalone, Windows / macOS (universal x86_64 + arm64) / Linux.
  • macOS users: xattr -dr com.apple.quarantine on the .vst3 after copy.

The full diff against 0.4.2 is included below; the curated changelog lives
in CHANGELOG.md.

What's Changed

  • Expand README with detailed feature documentation by @rocketbombs in #1
  • Add arpeggiator and drag-and-drop custom wavetables by @rocketbombs in #2
  • Claude/add synth features s3 agq by @rocketbombs in #3
  • Polish README for v0.3 release by @rocketbombs in #5
  • Move presets to JSON, soften reverb, fix focus & preset-switch burst by @rocketbombs in #6
  • Visual overhaul: audio-reactive meter/scope, interactive EQ, polish by @rocketbombs in #7
  • Rewrite README for in-development status by @rocketbombs in #8
  • Claude/fix vst bugs 3b xxk by @rocketbombs in #9
  • Claude/review codebase j62 j9 by @rocketbombs in #10
  • Run updateMacroSums after filterMidi so MIDI mod is current by @rocketbombs in #11
  • Split processor into Parameters/SynthEngine/Arp/Fx/PresetStore/WavetableImport by @rocketbombs in #12
  • Split editor into Widgets/ and Pages/ subdirectories by @rocketbombs in #14
  • Expand and reorganize README with detailed feature docs by @rocketbombs in #15
  • Drive parameter layout and cache from a single registry by @rocketbombs in #16
  • Expose parameter registry and add preset linter by @rocketbombs in #17
  • Tighten build flags and guard parameter enum/names parity by @rocketbombs in #18
  • Fix mono bus aliasing, tighten preset-switch lock, retire wavetables by @rocketbombs in #19
  • Add VaporKeyTests validation suite by @rocketbombs in #20
  • Fix VaporKeyTests build under JUCE 8 by @rocketbombs in #22
  • Fix six failing validation tests across arp, wavetable, and import paths by @rocketbombs in #23
  • ci: scope Linux build to VaporKey_All to avoid OOM by @rocketbombs in #25
  • Build only necessary targets in CI and require standalone artifacts by @rocketbombs in #26
  • Fix mono+legato silently retriggering on a fresh voice by @rocketbombs in #27
  • Add 4x oversampled distortion, ADAA voice sat, Dattorro plate reverb by @rocketbombs in #28
  • Expand wavetable bank to 23 shapes with categorised selector by @rocketbombs in #29
  • Add cross-oscillator FM / ring / amplitude modulation by @rocketbombs in #30
  • Fix MSVC ICE in WavetableLibrary constructor by @rocketbombs in #31
  • Move wavetable shape generators to their own translation unit by @rocketbombs in #32
  • ci: deduplicate triggers, drop LTO link, cap build parallelism by @rocketbombs in #33
  • ci: switch MSVC to /Z7 to fix D8040, harden workflow by @rocketbombs in #34
  • ci: cap MSVC /MP to /MP2, fix pluginval URL pattern for tagged releases by @rocketbombs in #35
  • Remove /MP compiler flag to prevent OOM in parallel CI builds by @rocketbombs in #36
  • ci(windows): exempt Defender + drop --parallel to 1 to fix recurring D8040 by @rocketbombs in #37
  • Add cross-oscillator modulation (X-MOD) and expand wavetable library by @rocketbombs in #38
  • feat: 170-preset factory bank + two-pane preset browser by @rocketbombs in #39
  • fix(arp): silence pass-through held notes on OFF -> ON, revive on ON … by @rocketbombs in #40
  • release: v0.5.0 prerelease by @rocketbombs in #41

New Contributors

Full Changelog: https://github.com/rocketbombs/VaporKey/commits/v0.5.0