Changelog
Release notes for DELTASCOPE
v1.1.0
Changed
- Sliders: click to type, Alt-click to reset. Every value slider now opens an inline editor on a plain click — type a value (units understood, e.g. "250 ms", "1.5 s", or "2k" in Hz mode) and press Enter to commit; Esc cancels. Typed values clamp to the slider's range. Alt-click resets a slider to its default, replacing the old double-click-to-reset gesture. The main and sidechain offset sliders — which already opened an editor on a click — gain the Alt-click reset to 0.
Fixed
- Slider hover highlights no longer stick. The main and sidechain offset sliders could keep their hover highlight after the pointer moved away because the value box intercepted the mouse; every slider now tracks hover correctly.
- The VST3's default program is now named. The plugin exposed a single unnamed program, which strict hosts and validators (e.g. Steinberg's VST3 validator / pluginval) flagged as an error. The program is now named "Default", so DeltaScope passes validation cleanly. No change to how the plugin behaves in use.
- Saved defaults now live in the standard location. The defaults file moves from a nonstandard folder directly under ~/Library into ~/Library/Application Support/ApolloView/, beside the licence file. A defaults file saved by an earlier build is migrated automatically the first time it is looked up.
- The Slope tooltip quoted the wrong pink-noise figure. The FFT tab's Slope tooltip claimed +4.5 dB/oct flattens pink noise; the engine tilts per-bin power, so the correct (and default) value is +3 dB/oct. Tooltip wording corrected; the behaviour was always right.
- Tidied the peak-hold Hold tooltip punctuation. Wording only, no functional change.
v1.0.1
Fixed
- The VST3's default program is now named. The plugin exposed a single unnamed program, which strict hosts and validators (e.g. Steinberg's VST3 validator / pluginval) flagged as an error. The program is now named "Default", so DeltaScope passes validation cleanly. No change to how the plugin behaves in use.
v1.0.0
Added
- Demo mode. Without an active licence, DeltaScope now runs as a demo — the full plugin with a brief periodic interruption of the display and audio and a "DEMO MODE" banner — until you activate. Click the banner any time to open the activation screen.
- A "Deactivate License" button in Settings. The About section gains a fourth row — About / License Agreement / Deactivate License / Check for Update — that signs this machine out of your license and returns to the activation screen.
Changed
- Rebuilt, hardened licensing. DeltaScope's licensing moved to a stronger scheme that can't be reverse-engineered from the plugin. Existing customers receive a new licence key by email and re-activate once; your current install keeps working until you update, so nothing breaks today — see the email we sent for the two-minute steps.
- The FFT spectrum analyser is now GPU-rendered — much lower CPU use and a smoother, higher frame rate, especially on Retina / HiDPI displays. The spectrum curves, peak-hold lines, out-of-band dimming and grid are now drawn directly on the GPU instead of being re-rasterised on the CPU every frame. On a large window on a Retina display this took the analyser from a stutter to fluid and freed CPU for the rest of the plugin. The view is visually identical; if the GPU path is unavailable on your system it falls back to the previous CPU rendering automatically.
- The activation screen's "Activate" button now reads as a gold-filled primary button. It previously drew as a flat grey button — its intended gold styling was silently dropped by the look-and-feel — so the main action now stands out clearly.
Fixed
-
The write cursor stays visible while frozen. Freezing now holds the cursor at its freeze-instant position instead of hiding it, and the clip border strips hold their freeze-instant content exactly.
-
Roughly half the display-chrome CPU cost during playback eliminated. The write cursor was repainting both full scope lanes at Retina resolution every frame; it now repaints only the strip it actually moved across, and the grid labels no longer re-render for no-op layout updates. Profiled at about half the previous UI-rasterisation load, with the freed headroom going to smoother frame delivery.
-
The FFT crosshair only repaints when a displayed value changes. On a steady signal the readout was re-rendering identical pixels every frame.
-
The settings menu's website link now reads "Check for Update" (was "Check for Upgrade").
-
Fixed a crash when "Hear the Delta" was active on a mono track with a linked sidechain source. The delta output tried to write a second audio channel that doesn't exist on a mono bus, taking the host down as soon as Delta mode engaged. The output now writes only the channels the track actually has — on a mono track you hear the left (or mid) delta lane.
-
Fixed a possible crash when re-linking or unlinking a sidechain instance while audio is running — most likely after deleting the linked source track. The audio engine could briefly keep reading the previous source's buffer after it had been freed; retired buffers are now held until the audio engine has provably finished with them.
-
Fixed a possible crash when closing the editor (or switching the phase display off) while a long correlation analysis was still running. With big windows the analysis could outlive its half-second shutdown grace period and be force-killed mid-pass; the analysis is now cancellable and shutdown waits for a clean exit instead.
-
Fixed a subtle race where the phase display's analysis could read a waveform snapshot while the renderer was already rewriting it. Snapshots still being read are now left untouched and a fresh one is handed out instead.
-
A collapsed FFT pane no longer ghost-renders over the scope. After an instant collapse — a window resize that squeezes the pane away, or loading a project saved with the FFT hidden — the spectrum could keep drawing over the full-height scope at its old position. A hidden pane now stops publishing to the GPU and is cleared, including across a host hide/show of the plugin window.
-
A frozen FFT no longer goes blank when the scope has nothing to draw. Several of the scope's internal early-outs skipped the spectrum pass entirely, leaving a cleared (empty) FFT pane — most visibly when freezing with the scope lane collapsed and then expanding it. The FFT now renders on every frame regardless of the scope's state.
-
Frozen sidechain lanes now follow size changes. With the display frozen, resizing the editor or revealing the scope from a full-size FFT left the sidechain overlay (and Sum / Delta / Stack) waveforms rendered at their old geometry — most visibly a tiny squished strip pinned to the top of each lane. Frozen sidechain lanes now re-render on every size change, exactly like the main channels.
-
The FFT pane now tracks live window resizing in lockstep with the rest of the UI. Since the switch to GPU rendering, the spectrum's on-screen geometry only updated once per display refresh, so during a resize drag it visibly lagged the scope and even its own axis labels. It now updates with every resize event.
-
A hidden FFT pane no longer does any work, and a visible one wastes less. The full analysis pipeline (ring copies, FFTs, GPU uploads, crosshair bookkeeping) used to keep running at display rate while the pane was collapsed; it now idles until reopened. While the GPU draws the curves, the (invisible) CPU curve components also no longer force the render thread to re-rasterise their region at Retina resolution on every fresh FFT frame.
-
Sample-offset sliders now show restored offsets correctly when the editor opens before audio starts. The slider range was built from a not-yet-known sample rate, displaying restored offsets clamped to 1 sample (and never recovering); the range now follows the live rate, including mid-session sample-rate changes.
-
The FFT Delta no longer shows brief garbage right after the transport starts. While the audio buffer refilled after a start or sample-rate change, the sidechain capture could feed partially-written memory into the Delta analysis, polluting the averaged curves for several seconds.
-
Fixed possible audio glitches when SysEx data rides the MIDI track routed in for the MIDI timebase. Long MIDI events allocated memory on the audio thread; the note tracker now parses raw bytes allocation-free.
-
The MIDI timebase behaves correctly for very high notes. Trigger windows under 16 samples (extreme pitches with a positive octave offset) hit undefined behaviour in the crossing search; the search is now exact down to the minimum window.
-
Lower CPU on Intel Macs during and after silence. The analysis workers' filters and averaging could wander into denormal float territory on quiet passages, where every operation costs 10-100x; all workers now run with denormals flushed.
-
Crosshair polish at deep zoom. Held Max / Min peaks now survive zooming out (the hold history previously skipped pixels when expanding the view, silently dropping held extremes); newly revealed edge pixels no longer flash huge placeholder values; frequency labels no longer float in the gutter for gridlines that are off-screen at high zoom; and switching the FFT Delta between Difference and Magnitude clears the readout's holds instead of blending the two incompatible scales for several seconds.
-
Lower display overhead across the board. The FFT gridlines now draw in one GPU batch instead of ~39 separate calls per frame; the spectrum only re-uploads its geometry data when something actually changed (a frozen FFT now costs near zero); the curve geometry builds in one pass instead of two; the crosshair's per-frame accounting and tooltip text are far cheaper; and idle level meters no longer repaint at display rate.
-
A frozen FFT no longer jumps or decays while you adjust settings. Ticking Floor or Ceiling made the frozen curve jump, and changing the tilt made the held peaks decay a step per slider movement. Axis changes now simply re-scale the frozen content; tilt re-slopes the cached spectrum and its held peaks exactly, history preserved, with no decay.
-
The sidechain offset lock is now saved with the session. It was derived from the offset value on reload, so an explicitly unlocked non-zero SC offset always reopened locked; it now persists exactly like the main offset lock, including for older sessions.
-
FFT settings changes now apply while the display is frozen. Adjusting tilt, smoothing, averaging or peak-hold with Freeze engaged silently deferred the change until playback resumed (a zoom while frozen then re-rendered with stale settings); the analysis worker now wakes and re-renders the frozen spectrum immediately. A mid-session sample-rate change also no longer snaps a zoomed FFT back to the full frequency range behind its own gridlines.
-
One bad audio buffer can no longer kill the FFT until reload. A NaN burst from a misbehaving upstream plugin permanently latched the spectrum's temporal smoothing (and the crosshair's Max / Min / RMS holds), leaving a dead display; non-finite input is now flushed at every accumulator. The FFT Delta's averaging is also floored against digital silence, removing a hidden CPU cost on Intel machines during quiet passages.
-
The FFT measurement crosshair's Max / Min / RMS readout no longer resets when you zoom or pan the spectrum. The held per-frequency history now follows each frequency across a zoom instead of being cleared, so the readout stays put rather than blanking and slowly rebuilding.
-
Settings changed after a project's last save are no longer lost on close. The plugin never told the host its state had changed, so anything adjusted after the final save — most visibly the sample-offset auto-lock engaging a few seconds after saving — silently vanished when the project closed. The host is now notified on every settings change.
-
Your saved settings are no longer lost when upgrading to a version that adds new settings. Loading a project or preset saved by an older plugin version used to silently reset every stored setting to its default the moment a release introduced a new one; now the new settings simply start at their defaults and everything the session does contain is restored.
-
Settings at the edges of their ranges now reload exactly as saved. A negative FFT tilt, a ceiling above +12 dB, a 0 % spectrum fill, a 0 dB meter ceiling or a 0 ms meter release was silently changed back to a default or older limit when the project reloaded; every stored value the sliders can produce now round-trips exactly.
-
Corrupt project values for gain and time window are clamped on load. Hand-edited or damaged session data could push non-finite or absurd values straight into the display engine; both now clamp to their slider ranges.
-
Loading a preset or reverting a project now updates an open editor immediately. Host-restored state previously only appeared after closing and reopening the plugin window — and the first control you touched wrote its stale value back over the freshly loaded preset. State loading is also safe against hosts that restore from a background thread.
-
Window sizes now restore exactly as saved. Restoring a project bumped any window narrower than the default back to 900 px wide (most noticeable with narrow saved layouts), and corrupt saved sizes were applied without limits; the saved size now restores within the window's real min/max bounds.
-
Hardened the audio-to-display handoff against a subtle memory-ordering race on Apple Silicon. In rare timing windows the display could accept a partially-updated audio snapshot — at worst a one-frame visual glitch; the lock-free handoff now issues the full memory fence the protocol requires.
-
The activation screen's "Buy license" link now opens the shop's product page for the plugin. It previously pointed at the old website address.
-
The activation screen's "Lost your key?" link now opens the licence portal. It previously pointed at a support page that no longer exists; it now goes straight to the portal where you can retrieve or resend your key.
v0.9.4
Added
- FFT Delta can now show a Magnitude view. Alongside the default Difference view (the spectrum of the residual the scope draws), the FFT can show the magnitude transfer of main relative to the sidechain in dB, on a ±24 dB scale centred on 0. It compares per-channel magnitudes, so a pure phase or alignment move — even a stereo one where L and R shift differently — reads flat: proof you changed phase, not tone. A real EQ change still shows its curve. The Smoothing and Averaging knobs trade detail for a steadier reading (a stable read off program material wants more averaging; an EQ you are tweaking wants less). Choose it under Settings ▸ FFT ▸ Delta.
- The FFT Delta now shows each channel on its own curve in Stereo and Mid-Side. Both the Difference and Magnitude views previously summed the two channels to mono before analysis; they now draw two curves — Left and Right in Stereo, Mid and Side in Mid-Side — matching the oscilloscope's per-lane Delta (Left / Mid in the main colour, Right / Side in the sidechain colour). A stereo phase or alignment difference that affects only one side is now visible on that side instead of averaging away. Mono, Left and Right remain a single curve.
- The FFT measurement crosshair stays on as you hover, reads Max / Min / RMS, and has a smarter Option-snap. A Crosshair switch (Settings ▸ FFT ▸ Display, on by default) keeps the readout under the pointer as you move across the spectrum — switch it off to show it only while Option is held. Alongside the live frequency / note / dB, it now reports each frequency's Max and Min over a rolling window plus a steady RMS average, so you can read how much a band moves, not just its level at this instant. Hold Option to snap to the nearest peak: it picks the closest prominent peak to your cursor — by proximity, not loudness, so a quieter peak beside a louder one is still reachable — locates it on a denoised curve so the lock-on stays steady instead of chattering, and reaches quiet high-frequency peaks the old fixed threshold ignored.
Changed
- The sample offset now locks the instant you press Enter, and remembers whether it's locked. Committing a typed value — including setting it back to 0 — locks the offset immediately; wheel and drag edits keep the existing 10-second auto-lock. The locked/unlocked state is saved with your settings, so unlocking a non-zero offset survives a reload.
- The band-filter view toggle is now "Filters » FFT" / "Filters » Phase" (previously "Filter Display"), and the FFT page of the settings panel lists its switches above its sliders to match the Peak Hold section.
Fixed
- Scope and FFT channel labels (L/R/M/S) read as a uniform gold. At their small size, the thinner letters rendered through the GL display at a slightly different apparent shade than the denser ones; the label size is nudged up so every letter reads as the same gold.
- Sidechain Delta now nulls in the FFT, not just the scope. With a latency offset dialled in, the spectrum analyzer kept showing energy where the oscilloscope cancelled to silence. The FFT had aligned the sidechain by rotating it within the analysis window, so the offset left a large uncancelled remainder smeared across the spectrum; it now lines the two signals up over real samples and collapses to the floor like the scope.
- The oscilloscope Delta now holds its null at the write cursor and through transport start/stop. With a large alignment offset (such as a linked sidechain's automatic latency correction), the Delta left a band of un-cancelled signal riding just ahead of the sweep cursor, and flashed a burst of the full signal on play, on stop, and on window resize. The renderer had aligned the sidechain by rotating it within the display window, which wrapped unrelated samples across the hidden cursor seam; it now splices in the real earlier audio so the null holds across the entire sweep. It also holds a clean null while a linked sidechain's alignment is still settling at play-start, instead of momentarily flashing the un-aligned signal.
- Sliders respond consistently and precisely to the mouse wheel and drag. Every slider now shares one feel: the wheel is velocity-sensitive — fine (one step per notch when you scroll slowly, so you can land on an exact value) and coarse when you flick — and is no longer tied to the slider's range, so wide-range sliders (such as the sample-offset sliders) no longer jump by hundreds of steps per notch, which high-resolution mice and trackpads made worse. Click-drag is uniformly responsive across the main, sidechain and settings panels.
- The level-meter "−∞" readouts read consistently. The LUFS, Peak and RMS infinity values now share one size and weight — the LUFS one previously rendered much smaller than the others — and the enlarged ∞ glyphs on the dB axis and meters use a lighter weight so they no longer look bold.
v0.9.3
Changed
- Band slider thumbs now have a soft drop shadow, lifting them off the track.
- Smoother scope / spectrum transitions. Collapsing or expanding the split between the oscilloscope and the spectrum analyzer — for example showing or hiding the analyzer, or dragging the divider past the snap point — now animates smoothly over a fraction of a second: the panes ease into place and the oscilloscope cross-fades as it shrinks, rather than snapping instantly. Reloading a session still opens at its saved split with no animation.
- The band filter no longer redraws the whole waveform every frame. With the band filter engaged, the scope used to re-rasterise the entire waveform on every frame because the filter rewrites the whole buffer — cheap at small sizes, but very expensive on a wide plugin window (a stretched-out scope could drop from ~60 fps to ~10 fps with the filter on). The renderer now redraws only the columns that actually changed since the previous frame — the same approach already used with the filter off — so filtered viewing stays smooth even on a large display, with no change to how the waveform looks. The once-per -bar sweep wrap, which briefly touches both edges of the window, is handled without a full redraw too.
- Long-window viewing is dramatically lighter on CPU. Every frame used to copy the entire visible window of audio from the ring buffer into the renderer — about 6 MB per frame per instance at 16 bars, scaling linearly with window length. The renderer now copies only the audio that arrived since the previous frame (typically a few KB), reusing the rest of the window from the previous frame's state. With multiple instances open at long windows, this roughly halves the scope's CPU use; combined with the band-filter change, 16-bar viewing with three instances and the band filter engaged now runs at full frame rate where before it dropped to a stutter.
- Band filter at long windows no longer stalls the scope. With the band filter engaged at 8 or 16 bar windows — especially across multiple instances — the scope used to drop to ~10 fps and the UI could freeze for around two seconds the first time you turned the filter on. The filter now runs on a background worker thread and uses a lighter zero-phase implementation, so the scope stays fluid at full frame rate, the first-toggle freeze is gone, and the filter response feels immediate. Filtering remains true zero-phase — what you see still lines up with the unfiltered waveform sample-for-sample.
- Lighter-weight oscilloscope rendering. The scope's GPU view no longer uses hardware multisampling; the waveform is already drawn with antialiased paths, so there is no visible difference, but each redraw costs noticeably less CPU. This eases the load when several instances are open or you are viewing long windows on older machines.
- Clip indicators simplified to two on/off toggles. The Scope settings now expose plain "Clip Overlay" and "Clip Border" switches, both on by default. The previous "True Peak Clip" setting — which changed the border detector between true-peak and sample-peak rather than turning it on or off — is gone; the border now uses straightforward threshold detection and can be hidden entirely with the new switch. Toggling either takes effect on the next frame.
- Labels and readouts lifted closer to white. The grey used for text throughout the UI — the grid axis labels (dB, time, and frequency), the level-meter readouts, and the settings, button, and slider text — was brightened for better legibility against the dark background.
- Spectrum curve and peak-hold line are now easy to tell apart. The analyzer's main curve was drawn with a full-opacity outline that read the same as the peak-hold line, so the two blended together when peak hold was engaged. The curve now shows as a filled shape with a faint edge, and the peak-hold line is drawn a touch thicker and at full opacity on top — so peak hold stands out as a distinct line.
- Loudness meter now reads true LUFS. The level meter's LUFS value is now a single, standards-correct (ITU-R BS.1770 / EBU R128) measurement for the whole stereo program, shown as one number at the top of the readout with Peak, RMS, and crest factor per channel below it — instead of a per-channel figure. Because loudness sums both channels the way the standard defines, a centred stereo signal now reads about 2.3 dB higher than before, and a −23 LUFS reference tone reads −23.0. Momentary, Short-term, and Integrated remain selectable. Under the hood the signal is now K-weighted continuously the way hardware loudness meters work, so the reading is gapless and steadier and the meter is lighter on CPU during long sessions and with several instances open. The secondary meter bar is now always RMS — the LUFS-M / LUFS-S bar option has been removed, since LUFS is a single program value rather than something to show per channel.
- Spectrum analyzer movement is now consistent across FFT sizes. The separate Attack and Release controls are replaced by a single "Averaging" knob (0–100). It speeds up or slows down every FFT size — previously the response varied wildly with size (some sizes danced erratically, others crawled). The engine now compensates for each FFT window, so the perceived movement stays close across sizes and the knob always has an effect. Larger FFTs still respond a little slower (a long window is inherently a long average), but the jumpy mid-size behaviour is gone.
- Spectrum analyzer defaults to a more responsive FFT size, and the range is trimmed. The default FFT size is now 8192 (was 32768) for a snappier analyzer out of the box, and the maximum is now 65536 — the old 131072 option added no useful detail and was unusably sluggish.
- Spectrum peak hold now holds before it falls. Peak hold gained a "Hold" time (in the FFT settings, above the decay control; default 1.5 s) so peaks stay put briefly before decaying, and the decay rate was eased. The top of the Hold slider reads Infinite — the peaks never fall, so you can capture the maximum a signal ever reaches. Peak hold is now on by default, so transients are visible out of the box.
- New spectrum smoothing controls. A "Smoothing" slider (0–100%) in the Display section applies fractional-octave smoothing to the live curve for a cleaner shape (off by default — full detail). A separate "Smooth" slider in the Peak Hold section smooths the peak-hold line so it reads as an average level; it defaults to 20% and keeps a modest built-in smoothing floor even at 0%, since a raw peak-hold is inherently grainy.
Fixed
- Frozen spectrum can now be zoomed and panned. With the display frozen, the spectrum analyzer ignored zoom (scroll) and pan (Cmd-drag) — only the scope responded. The FFT now reframes the frozen spectrum the same way: it re-maps the captured curve to the new range without re-analysing, so the frozen content stays put (no drift or peak-hold decay) while you explore it.
- Settings-panel hover highlights now track the mouse. Sliders and drop-down menus could fail to highlight on hover, or stay stuck highlighted after the mouse moved away (and stack up across several controls), because the value text drawn over each control was swallowing the mouse-over. They now highlight only while hovered. The settings panel also opens already active, so hover works immediately instead of only after switching tabs, and each tab's Reset button now matches the other buttons' width and height.
- Spectrum curve vanished at zero fill. Turning the Fill amount down to 0 hid the whole curve, not just the shaded area — the fill slider was also driving the line's opacity. The curve line now stays visible at any fill amount; Fill controls only the shaded area beneath it.
- Delta output and spectrum didn't null when the scope did. With Delta engaged on a sidechain — for example one instance feeding another's sidechain with latency compensation dialed in — the scope waveform nulled as expected, but the heard delta and the spectrum analyzer still showed the signal, an audible doubling of out-of-phase copies. The audio and spectrum paths aligned the sidechain to main in the wrong direction (or not at all); all three paths now share one alignment, so the delta you hear and the spectrum null exactly like the scope.
- Octave slider too sensitive when dragging. In MIDI mode, the ±4-octave slider used velocity-based dragging, so a quick flick could jump several octaves at once. It now uses a controlled relative drag (roughly one octave per deliberate drag); the scroll wheel is unchanged.
- Scope axis labels fainter than the spectrum labels. The oscilloscope's dB and time axis labels are drawn through the GPU view, which thinned their strokes so they read dimmer than the spectrum analyzer's labels. They now render at a matching brightness.
- Peak hold time now persists. The level meter's peak-hold time was silently reset to its 2000 ms default on every session reload; it is now saved and restored correctly.
- Spectrum peak-hold line no longer floats above the curve. Peak hold tracked the raw FFT bins instead of the smoothed display curve, so on transients it could sit above the visible spectrum; it now follows the curve you actually see.
- No hitch on the first MIDI note (MIDI timebase). The first note in a session could briefly stall the audio thread while a note-frequency table built lazily; that table is now prepared up front.
- Scope and spectrum analyzer now resize as one. The oscilloscope and the FFT analyzer below it were drawn on two separate surfaces that resized at slightly different rates, so dragging the window edge — or the divider between them — made the gap between the panes pump and the gold divider grip jump or get briefly covered. They now share a single drawing surface: the two panes resize together, the grip stays put, and dragging the divider tracks the cursor one-to-one.
- Spectrum peaks no longer appear to change speed. The analyzer's attack/release smoothing and peak-hold fall were derived from a measured frame rate that fluctuated with display timing, so the peaks could visibly speed up and slow down — updating unevenly even with a single instance open. They are now driven by the actual time elapsed each frame, so the spectrum moves evenly and the attack/release/decay times stay accurate regardless of frame-rate jitter.
v0.9.2
Fixed
- Sidechain waveform jitter between linked instances. When sidechaining one instance to another, the sidechain waveform could visibly jitter back and forth by one block each frame — worse at larger buffer sizes — on multi-core hosts that vary their per-block processing order. The linked read now stays phase-stable regardless of processing order.
- Sidechain input dropdown showing the placeholder after reopening the editor. When an instance was linked to another instance, closing and reopening the plugin window would leave the picker reading "Sidechain Input" even though the scope was still tracking the correct linked instance. The picker label now matches the active link.
- Auto delay compensation (ADC) was unreliable. Detection could either miss the transient entirely or always report a 50 ms offset, depending on whether the calibration window happened to overlap the transient. The detector now fires on the first sample whose absolute level exceeds −40 dBFS from the moment playback starts, so the reported offset matches the real transient position.
Changed
- Brighter grid and labels. The grey used for gridlines, labels, and readouts was lifted for better contrast against the dark background.
- Settings cog: defaults section now labelled. The Save / Restore / Factory buttons sit under a "Defaults" heading, matching the other grouped sections in the panel.
v0.9.1
Added
- MIDI timebase mode. The scope timebase can now follow the frequency of incoming MIDI notes. Play a note into the track and the display shows a whole number of cycles of whatever pitch you're holding, phase-locked to the detected zero crossing at the left edge of the viewport — no horizontal drift, no jitter between notes.
- Octave offset (MIDI mode). A ±4-octave slider changes how many cycles are shown without changing the played note. Useful for switching between single-cycle detail and multi-cycle comparison.
Fixed
- Waveform stopping after extended use. Fixed an issue that could cause the scope to stop rendering during longer sessions. No action needed — the fix applies automatically on this update.
- Spectrum-hidden state not persisting across DAW reloads. If you dragged the spectrum panel fully closed, reopening the session would silently re-open it. The hidden state now persists as expected.