The new FX object puts 27 effects like reverb and vocoder in the 3D scene, instanced per voice so the FX chain can feed back into the physics.
Evan Mezeske
Jun 2026
Claude handles the incidental complexity now, so I cleared a pile of long-stalled UX tasks like parameter smoothing, plus thoughts on coding with AI.
Release 0.9.30 adds post-processing shaders and 1-click screen recording. The recorder alone is 6,500 lines of platform-specific C++, built with Claude.
Mar 2026
MTS-ESP microtuning support landed in an afternoon, alongside NAMM followups, an AU validation hang fix, and a Filament reflections crash on AMD.
Feb 2026
Eight mappable macro knobs land in the UI with drag-and-drop modulation binding, plus 312ears built a Python preset API from my protobuf definitions.
Aug 2025
Multichannel 50x50 audio I/O with near-zero overhead, ASIO support on Windows, and a workaround for a Radeon clBuildProgram crash on gfx90c.
Jul 2025
Demo mode now ducks the output gain instead of blasting white noise, plus a first-launch flow with a skin picker and a near-instant preset chooser.
Apr 2025
Porting Anukari to AAX went smoothly aside from the iLok and PACE signing dance, and Pro Tools flushed out bugs that also affected VST3 and AU.
Feb 2025
I ditched CPack's crippled installer generators for Inno Setup and pkgbuild directly, and shipped a new AnukariEffect plugin for use in effect chains.
Physics explosions from oversized time steps now get auto-mitigated, with the GPU tracking peak velocity and silently resetting any voice that blows up.
Jan 2025
A draggable entity palette with live-rendered thumbnails, color-coded connection highlighting, and camera icons that make the 3D controls discoverable.
Dec 2024
After a dead end with WS_EX_LAYERED transparency, I'm drawing the 3D graphics in an HWND on top of the JUCE GUI, and native popup menus still appear.
Sep 2024
Moving MongoDB index creation into version-controlled TypeScript, then hitting a next.js bug where failed middleware makes server actions return undefined.
Aug 2024
The licensing API is done. The plugin sends a machine fingerprint plus license key and the server signs it back, a simple lock on the front door.
Auth, server-validated React form actions, and CSRF protection are working, so I'm pushing the website toward pre-alpha product key management.
Jul 2024
Six hours fighting next-auth.js to get email and password login working for product registration, since the docs push everyone toward OAuth.
After boost's interval library threw baffling singleton exceptions in my GUI fuzz tests, I replaced it with a 25-line Interval class that just works.
Making Exciter velocity sensitivity adjustable took an hour, then making the 3D animations track fully modulated loudness ate the rest of the day.
Fixed the clanking when raising the voice instance slider (init state wasn't stored per-instance) and added MIDI note off velocity as a modulation source.
Voice stealing now prefers released notes, which made MPE playable when holding a root note under a melody. Lots of polyphony GUI details cleaned up too.
With polyphony working well, I'm starting on MPE support ahead of my ROLI Seaboard's arrival, including the annoying MCM zone auto-configuration messages.
Reworking the data model so MIDI and modulation state can be stored per voice instance, groundwork that MPE support will build on directly.
Anukari's standalone build is now fully usable on MacOS, with the GUI, MIDI input, audio output, and hotkeys working after a morning of small bug fixes.
Jun 2024
After cleaning up the macOS port hacks and re-verifying Windows, Anukari now runs fully on my M1 MacBook, though the golden tests need fuzzy matching.
JUCE resists testable apps, so on macOS I moved all the unit tests inside a full JUCEApplication, trading test isolation for tests that pass.
Back from paragliding and porting unit tests to MacOS, which forced a cleaner cross-platform approach to GUI testing than my hacky Windows-only setup.
Anukari finally builds and links on my M1 Macbook after homebrew Clang pain, though the OpenCL code crashes whenever a microphone or modulator appears.
Breaking ground on instanced voice mode, which turns any instrument polyphonic by using time dilation for tuning. Prototype first, design later.
May 2024
Paste, duplicate and import now use AABB search to land entities in clear space, and simulator reset became trivial via full serialize and reload.
The modulator link editor now looks up per-parameter ranges, units, and exponential scaling, and handles bulk edits of mismatched links.
Apr 2024
A rare debug build flagged seven crash bugs, including an unordered_set passed to std set_symmetric_difference that MSVC's checked STL caught at runtime.
Anukari now handles every MIDI message type, including poly pressure, which Ableton's MIDI export silently drops. Next up is the mess that is MPE.
Finding the abstraction that lets modulator sub-types like LFOs and envelopes share GUI editor code, ahead of a batch of new MIDI types.
MIDI routing is done, with a MidiRoutable interface that lets entities subscribe to note, CC, pitch, and pressure events by ID.
A JUCE crash I patched upstream, then flaky GUI tests that only failed when I alt-tabbed away, since some JUCE code cares whether the window is foreground.
Mar 2024
MIDI note envelopes came together in a day, then Ableton and Anukari disagreed about middle C. C3 vs C4 vs C5 varies by vendor, so I went with C3.
LFO retriggering now works via the generalized MIDI note routing, and unit tests caught a dangling route left behind by deleted LFOs.
Building a general MIDI note picker with a live piano keyboard and a learn button, fed by an SPSC queue moving MIDI off the audio thread without blocking.
All 65 golden tests covering the physics engine are done, bringing the suite to 249 cases, with a GUI chaos monkey planned as the next testing push.
Testing the Selection class, frustum picking, raycasting, duplication and all, with zero mocks so far thanks to APIs designed for testability.
New unit tests keep finding real bugs, including a broken plane-sphere intersection in frustum selection and an infinity check that accepted NaN.
Exhaustive PrecisionSlider unit tests caught a NaN-producing bug, prompting an audit of where the 36 kLOC codebase still needs test coverage.
Feb 2024
Adding interval labels to the semitone slider exposed a snap-to-grid bug in the scaling transform, so PrecisionSlider is finally getting unit tests.
Bigger JUCE typefaces and slider hover polish, plus finding Google Filament, which beats DiligentEngine for cross-platform graphics.
Fixed a bug where MIDI note off events were missed with the plugin GUI hidden, because GUI flow control froze the simulation timestamp.
The precision sliders are finally done, and loading 3D assets in a thread pool took the GUI startup time from about 4 seconds down to 400ms.
Multi-value sliders finally feel right, leaving one last problem, displaying float32 ranges with low visible precision until you click to edit.
Multi-value sliders now store a range instead of one float, so scaling spring stiffness across a selection keeps its non-uniform shape.
Designing sliders for editing 50 springs at once, with whiskers showing the value spread and drags that scale every stiffness proportionally.
Getting JUCE mouse wheel events to reach the new PrecisionSlider but still bubble up for viewport scrolling took big workarounds of the listener system.
Dials are gone. The new PrecisionSlider pairs a coarse slider with an adaptive thumbwheel so parameters spanning orders of magnitude stay precise.
Undo now works for mouse-wheel edits on Dials, tricky work nobody will ever notice. Along the way I hit a focus bug in the undo and redo hotkeys.
Jan 2024
Orthogonal-view mouse picking was janky from float precision in ray cylinder intersection, fixed with doubles, plus time-batching mouse wheel undo spam.
Instead of a new entity type, delay lines reuse the AudioSignal exciters via a DelayLine link, with GPU audio moved into ring buffers.
Compressors work and the microphones glow blue with gain reduction, but a rare few-second distortion with no repro case is haunting me.
Dec 2023
After a jam session made distortion problems obvious, I built a GPU compressor for the microphones so live experimenting stays clean.
Sample and hold exposed how non-random my GPU noise PRNG was. I replaced the linear congruential generator with xorshift64* after a Galois LFSR detour.
New UX explains dependent GPU memory limits, so maxing out masses visibly cuts your microphone budget instead of failing mysteriously.
Modulation values now reach the GUI, so a mic driven by two LFOs visibly circles in the 3D view. CPU-latched parameters like mallet hardness work too.
FM finally works on LFOs and oscillators after I dropped my stateless GPU waveform trick for phase-incrementing state, which turned out faster anyway.
A free-running LFO now computes on the GPU, but its stateless design means the value never lands in memory, so GUI animation needs a per-block write-back.
GUI work for linking modulators to springs and to other modulators is done, and one MIDI CC knob modulating another now simulates correctly.
Modulators can now link to springs, with groundwork for modulating modulators. Fuzz testing caught bugs in the new code and old undo/redo paths.
Nov 2023
MIDI control modulators now render as spinning 3D knobs, and I applied an ADC trick using arch-specific pause instructions in the spin-loop sync code.
Modulation now covers sensors and exciters, and I'm weighing one flat layer of modulator recursion since GPUs can't do real recursion.
The Audio Units logo and the Audio Units symbol are trademarks of Apple Computer, Inc.
VST is a trademark of Steinberg Media Technologies GmbH, registered in Europe and other countries.