Skip to content

Releases: mstits/Tooot

ToooT 2.0.1 — UX, audio engine, mastering

Choose a tag to compare

@mstits mstits released this 26 Apr 18:52

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.

ToooT 2.0.0 — Best-in-class open-source macOS DAW

Choose a tag to compare

@mstits mstits released this 17 Apr 01:53

Highlights

ToooT 2.0.0 ships ~15 000 lines of new, tested code. Full changelog: every feature below shipped as working code, not scaffolding.

Plugin hosting

  • CLAP host (BSD-3, MIT-compatible) — BSD-licensed, real-time-safe, modern ABI. u-he / FabFilter / Arturia / Surge XT supported.
  • VST3 host — direct Steinberg SDK integration (no JUCE dependency).
  • AUv3 host — per-channel insert chains (4 inserts + 1 instrument per channel) and bus inserts on the 4 aux buses.

Mastering

  • ITU-R BS.1770-4 LUFS metering (momentary / short-term / gated integrated).
  • True-peak detection + look-ahead limiter AUv3.
  • LUFS-normalized export to Spotify (−14) / Apple Music (−16) / YouTube (−14) / EBU R128 (−23) / Amazon Music.
  • TPDF dither on bit-depth reduction.
  • Multiband compressor (3-band Linkwitz-Riley) + Linear-phase FFT EQ (4096-point) bundled.

Composition

  • Arrangement timeline view (Pro Tools / Logic paradigm).
  • Session grid view (Ableton Live paradigm) with quantized clip launch.
  • Piano Roll with CC lanes (velocity / mod / expression / pan / pitch bend).
  • MIDI 2.0 MPE — per-note pitch bend + pressure with voice tracking.
  • Arpeggiator — 6 modes with hold, octaves, gate probability.
  • Music theory — 16 scales, 14 chord qualities, frequency-domain quantization.
  • Scenes — capture / recall full mixer state, quantized boundary switching.
  • Automation lanes with 5 curve types + read/write/touch/latch/trim modes.

Workflow

  • ⌘K Command Palette with fuzzy match over every shipped command.
  • Keyboard shortcut customization — ToooT / Pro Tools / Logic Pro presets.
  • Undo history browser — 50-level stack, jump-to-step.
  • Project auto-save every 60 s with crash-recovery prompt on relaunch.
  • JavaScript scripting via JavaScriptCore — drive the DAW from user .js files.
  • Text-to-speech via AVSpeechSynthesizer + /usr/bin/say CLI integration.
  • Starter content — 32 in-code synthesized instruments (drums / bass / leads / pads / perc / FX).
  • Template projects — Blank / Drum Starter / Ambient Pad / Techno Basic.
  • MIDI panic (⌘.) — transport stop + all-notes-off on every MIDI channel.

Engine + performance

  • Variable sample rate — 44.1 / 48 / 88.2 / 96 / 192 kHz end-to-end.
  • Multi-core offline render — DispatchQueue.concurrentPerform with per-thread scratch pool (~4-6× speedup on M-series 8-core vs serial).
  • Zero-allocation audio thread (Swift 6 strict concurrency).
  • GPU DSP — 5-kernel Metal compute library (normalize, gain, pointwise-multiply, FIR convolve, softclip).
  • SOLA time-stretch + pitch-shift on the sample bank.
  • Track freeze / stems / mastered export paths wired end-to-end.

Quality

  • UAT: 232 assertions / 0 failures.
  • StressRunner: 11 integration scenarios / 0 failures. Includes byte-identical parity between serial + concurrent render, 10 k random UMP dispatch, 1000-file parser fuzz, 0.00 MB memory drift over 1000 render cycles (post-warm-up).
  • FuzzRunner for CI gating.
  • .github/workflows/ci.yml with concurrency-warning gates and UAT pass-count gate.

Installation

brew tap mstits/tooot
brew install --cask tooot

Or download the DMG below and drag to Applications. macOS 14+, Apple Silicon.

Docs

Philosophy

Open-source first: BSD/MIT/Apache deps + open formats only. No JUCE, no Dolby Atmos, no Celemony ARA2, no AAF. CLAP is the strategic primary plugin format. DAW Project is the interchange path. Automerge-Swift is the eventual collab path.

macOS-native. No iPad / VisionPro / iOS gated-ecosystem work.