Skip to content

ToooT 2.0.1 — UX, audio engine, mastering

Latest

Choose a tag to compare

@mstits mstits released this 26 Apr 18:52
· 7 commits to main since this release

ToooT 2.0.1 — UX, audio engine, mastering

Eleven days after v2.0.0; the changes since are substantial. Highlights:

  • Arrangement engine consumption — the linear-arrangement timeline now actually drives audio. Previously the model + view shipped but the engine kept playing the pattern grid; pressing play on a populated arrangement is finally audible.
  • Linear-phase EQ in the master chain — 10 log-spaced bands (31 Hz – 16 kHz), 4096-point overlap-save FFT convolution. Master order: EQ → stereo widen → reverb → safety limiter.
  • AUv3 plugin parameter automation — every loaded plugin's parameter tree is auto-registered; lanes targeting plugin.<channel>.<slot>.<address> write through at UI tick rate.
  • Render-path automation expandedtempo.bpm joined the audio-thread evaluator. Markers + time signatures persist in .mad.
  • Recording take lanesreplace / overdub / loop modes; per-channel take stacks for comping.
  • Spatial audio editor rebuilt — replaces the Metal mesh-shader pipeline (which rendered as a black screen on base M1 hardware) with a proper SwiftUI Canvas top-down view.
  • Three-pane Automation editor — sidebar of every target, gridded canvas with bar lines, point inspector with curve picker. Replaces the previous single-line jumbled view.
  • Generative panel rebuild — 8 generators (was 4 buttons), style picker (Techno / DnB / Ambient / Hip-Hop / Jazz / Breakbeat), 12 keys, 8 scales, intensity + complexity sliders that actually drive density.
  • Synthesis tier rename — Carbon → Studio, Biological → Organic, Xenomorph → Generative. With descriptions per tier so users know what they're picking.
  • AppIntents (Shortcuts.app) — Open Project / Open Last Autosave / New Project.
  • Cold-launch perfAUv3HostManager.discoverPluginsAsync() runs on a detached Task; the 1–3 s plugin scan no longer blocks app launch.

Two real bug fixes

  • renderOfflineConcurrent had a scratch-slot collision (idx % 8 aliasing meant two voices could collide on the same buffer from different threads) — produced max abs diff 0.054 vs serial. Fixed: one slot per voice (voiceThreadSlots = kMaxChannels). Material because v2.0.1's exportAudio runs through the concurrent path.
  • Snapshot deallocation queues were undersized at 64/128 entries; push silently dropped on full, leaking retained snapshots. UAT 55 demonstrated 436/500 leaking under stress. Bumped both to 2048.

Quality

  • UAT: 271 assertions, 0 failures.
  • StressRunner: 11 scenarios, 0 failures. "Concurrent vs serial render parity" passes; memory drift over 1000 cycles = +0.00 MB.
  • Zero build warnings.

Installation

brew tap mstits/tooot
brew install --cask tooot

Or download ToooT-2.0.1.dmg below and drag to Applications. macOS 14+, Apple Silicon.

Full changelog

See CHANGELOG.md for the line-by-line diff.