Skip to content

v0.2.1 — M1.1 Devices & Plug-ins (alpha)

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 02 Oct 20:31
· 95 commits to main since this release

Release fix on top of M1.1 — Devices & Plug-ins. v0.2.0 was tagged but never published: its
release build failed on a timing assertion in the tests.

Fixed

  • The test that a slow plug-in loads in the background bounds the insert by the plug-in's load time
    instead of a fixed 300 ms, which a CI runner can exceed (#138).

Also in this release (v0.2.0 was never published)

Milestone M1.1 — Devices & Plug-ins: native devices v2, plug-in hosting in a sandbox, plug-in
windows and lucide icons.

Added

  • EQ Eight v2 and Compressor v2 native devices, edited on their graphs (#67). EQ Eight: drag a
    node for frequency and gain, wheel for Q, double-click to switch a band; eight bands with type
    and on/off, pre/post spectrum, Q-width shading, St / L-R / M-S, Adaptive Q, audition. Compressor:
    drag the threshold on the Transfer graph, Transfer / Activity views, IN / GR meters, Lookahead,
    Peak / RMS / Expand, Makeup Auto / Mix / Out. Each gesture is one undo step.
  • Device cards for native devices and plug-ins (#66). A native card can be Folded, Compact or
    Expanded. A plug-in card shows vendor, format, up to 4 pinned parameters edited inline, and CPU,
    latency and sandbox state; a missing plug-in offers Locate and Replace. The chain ends in
    a drop zone.
  • Plug-in windows (#68) with host chrome: Bypass, presets, A/B compare, latency, CPU, sandbox
    state and UI scale 100 / 150 / 200 %. A plug-in's window opens when it is inserted, with a toast
    offering Undo and an Auto-open window on insert switch. One window per instance; position, pin and scale
    are saved with the Project. Esc / Mod+W close the focused window, Mod+Alt+P shows or hides
    them all.
  • Plug-in sandbox (#69): each plug-in runs in its own process by default. A crashing plug-in
    bypasses only its own device, playback keeps going, and Reload brings it back with its last
    saved state. Run in-process can be set per plug-in and is saved with the Project.
  • Plug-in scanning out of process (#78): a plug-in that crashes or hangs the scan is listed as
    Failed to scan with Retry, and the rest load. Browser rows show a VST3 / AU / CLAP badge.
  • A native Mixer Insert opens its device in a floating window, like a plug-in insert; plug-in
    inserts look different from native ones (#70).
  • The lucide icon set, sized and coloured by role (#79).

Changed

  • EQ Eight v2 and Compressor v2 replace the v1 EQ and compressor in the device list. Projects that
    use the v1 devices still load them.

Fixed

  • Inserting a sandboxed plug-in no longer blocks the app while it loads; export, bounce and freeze
    wait for plug-ins that are still loading (#134).
  • A sandboxed plug-in's CPU % is the plug-in's own time in its host (#136).
  • Undo right after a new track or a plug-in insert keeps Redo (#133).
  • A plug-in insert that is refused leaves no partial undo step.
  • Shortcuts typed in a plug-in window reach Resamper.

Known issues

  • AUv3 and other plug-ins that load asynchronously run in-process, outside the sandbox.
  • A plug-in that finishes loading during playback can cause a short gap.
  • Moving a plug-in's controls doesn't record automation yet (M3).

Download

Open Resamper-0.2.1-macOS.dmg (Apple Silicon) and drag Resamper to Applications.

All changes

🔀 Pull requests

  • #138 🐛 fix(tests): bound the background plug-in insert by its load time by @leizzo

🐛 Fixes

  • 🐛 fix(tests): bound the background plug-in insert by its load time, not 300 ms (6cba314) by @leizzo

🔀 Pull requests

  • #119 Device cards: native vs plug-in (DeviceCard/Native, DeviceCard/Plugin) by @leizzo
  • #123 ✨ Iconography: lucide icon set by name, sizes and colours by role (#79) by @leizzo
  • #124 ✨ Native devices v2: EQ Eight v2 and Compressor v2 (#67) by @leizzo
  • #125 ✨ Plug-in window: host chrome, auto-open on insert, window management (#68) by @leizzo
  • #126 ✨ Plug-in scanning out of process: format badges, Failed to scan, Retry (#78) by @leizzo
  • #127 ✨ Out-of-process plug-in sandbox and crash recovery (#69) by @leizzo
  • #128 ✨ Mixer inserts: InsertSlot/Plugin, native insert opens its floating editor (#70) by @leizzo
  • #137 🐛 Sandbox follow-ups: background loading, shared wait, host CPU, toast Undo by @leizzo

✨ Features

  • ✨ feat(devices): split DeviceCard into native and plug-in contracts (7308ba5) by @leizzo
  • 💄 feat(devices): draw the cards to the design; pin by touching; keep the plug-in window in front (695a2f1) by @leizzo
  • ✨ feat(devices): save device size on the device, Locate by file, float expanded devices (e4a2e5f) by @leizzo
  • ✨ feat(icons): lucide icon set by lucide name, sizes and colours by role (31479c1) by @leizzo
  • ✨ feat(devices): EQ Eight v2 and Compressor v2 native devices (#67) (77ace24) by @leizzo
  • ✨ feat(plugins): host-chromed plug-in window, opened on insert, with window rules (8e647e6) by @leizzo
  • ✨ feat(plugins): scan each plug-in in its own worker; Failed to scan with Retry; format badges (e980f58) by @leizzo
  • ✨ feat(plugins): run plug-ins in a sandbox process, with crash recovery (64827b0) by @leizzo
  • ✨ feat(mixer): plug-in inserts look apart; a native insert floats its device expanded (68e136c) by @leizzo

🐛 Fixes

  • 🐛 fix(plugins): close a plug-in's window when the plug-in goes (4e12792) by @leizzo
  • 🐛 fix(devices): hold the Compressor's detector across a waveform's zero crossings (#67) (ff37e58) by @leizzo
  • 🐛 fix(devices): keep EQ Eight's bands from cramping toward Nyquist (#67) (6dbeaf9) by @leizzo
  • 🐛 fix(plugins): cascade to a free spot, theme radii in the window chrome, steadier window tests (4f18d3b) by @leizzo
  • 🐛 fix(plugins): sandbox forwards program renames, keeps MIDI room, guards sizes, removes its listeners (566277a) by @leizzo
  • 🐛 fix(plugins): report a sandbox host that dies before its stand-in listens (bd3857d) by @leizzo
  • 🐛 fix(plugins): show a sandboxed plug-in's own UI in its window; Space plays from it (#68) (e97f467) by @leizzo
  • 🐛 fix(plugins): show a sandboxed plug-in's CPU as its host's own time (1592b4c) by @leizzo
  • 🐛 fix(undo): keep Redo after undoing a step that follows a new track (bf3e9fd) by @leizzo
  • 🐛 fix(plugins): leave no partial undo step when an insert is refused (a611853) by @leizzo
  • 🐛 fix(plugins): wait for background plug-in loads before rendering offline (b362cb5) by @leizzo

⚡️ Performance

  • ⚡ perf(devices): redesign an EQ Eight band only when its settings move (#67) (239e005) by @leizzo
  • ⚡️ perf(plugins): load sandboxed plug-ins in the background (d4bf7b0) by @leizzo
  • ⚡️ perf(plugins): share a block's wait along a chain; real-time hosts (bcf391d) by @leizzo

♻️ Refactoring

  • ♻️ refactor(devices): share a card's parameter spec and setter; tidy review nits (80e140e) by @leizzo
  • ♻️ refactor(icons): kebab-case icon size metrics, forward-declare Theme, test every icon (6f15508) by @leizzo
  • ♻️ refactor(ui): one shortcut rule for the main and plug-in windows (93236a5) by @leizzo

✅ Tests

  • ✅ test(devices): measure EQ Eight and Compressor v2 as Plugin Doctor does (#67) (18fc799) by @leizzo

📝 Documentation

  • 📝 docs(plugins): say why the touch watch ignores curve changes (4dbb168) by @leizzo
  • 📝 docs(funding): link the repo to GitHub Sponsors (587ce96) by @leizzo
  • 📝 docs(funding): state monthly and one-time sponsor amounts (cedd656) by @leizzo
  • 📝 docs(readme): move the Turkish text into README.tr.md (0a901d4) by @leizzo
  • 📝 docs(license): say MIT does not cover a closed build (4b7292c) by @leizzo
  • 📝 docs: keep the PRD and research notes out of the repo (7f4a17c) by @leizzo
  • 📝 docs(context): Native Device Window; a Mixer Insert click opens its window (25f1681) by @leizzo
  • 📝 docs(plugins): name the Parameters button's width; document the dock's window level (c32af5a) by @leizzo

🔧 Other

  • 💄 style(devices): take the plug-in card's type sizes and bar radius from the Theme (5bbf669) by @leizzo
  • 🔧 chore(perch): set aside device-card false positives and unchanged-method findings (4bda966) by @leizzo
  • 🔧 chore(perch): set aside the moved parameter-spec and menu-lifetime findings (7486ee2) by @leizzo
  • 🔧 chore(perch): set aside design-geometry and listener false positives (0e3596b) by @leizzo
  • 🔧 chore(perch): set aside a fake-plugin stub finding (fed1bfa) by @leizzo
  • 🔧 chore(perch): set aside view-state, test-double and unchanged-method findings (d0bcc28) by @leizzo
  • 🙈 chore: ignore Claude worktrees, CLion builds, and juggler (209b0bd) by @leizzo
  • 🔀 merge: main into feat/79-lucide-icons (1741791) by @leizzo
  • 🔀 merge: feat/79-lucide-icons into feat/67-native-devices-v2 (5216f22) by @leizzo
  • 🔧 chore(perch): set aside design-number, unchanged-method and test-double findings (41b3bf6) by @leizzo
  • 🔧 chore(perch): set aside a moved toggleAll finding (a6b044a) by @leizzo
  • 🔀 merge: feat/67-native-devices-v2 into feat/68-plugin-window (0c09d99) by @leizzo
  • 🔀 merge: feat/67-native-devices-v2 into feat/68-plugin-window (0798b0b) by @leizzo
  • 🔧 chore(perch): name the Browser row metrics; set aside findings on unchanged or intended code (85e7ade) by @leizzo
  • 🔧 chore(perch): set aside two test-double findings (48dbcac) by @leizzo
  • 🔀 merge: feat/68-plugin-window into feat/78-plugin-scanning (2642bc1) by @leizzo
  • 🔀 merge: feat/68-plugin-window into feat/78-plugin-scanning (0a2c1e1) by @leizzo
  • 🔀 merge: out-of-process plug-in scanner (#78) into feat/69 (18cc59f) by @leizzo
  • 🔧 chore(perch): set aside sandbox design, test-double and unchanged-method findings (1022204) by @leizzo
  • 🔀 merge: feat/78-plugin-scanning into feat/69-plugin-sandbox (5e23de1) by @leizzo
  • 🔀 merge: feat/78-plugin-scanning into feat/69-plugin-sandbox (23d4ee9) by @leizzo
  • 🔧 chore(perch): name the floating window chrome's sizes; guard the preset menu's callbacks (d7d1524) by @leizzo
  • 🔀 merge: feat/69-plugin-sandbox into feat/70-mixer-inserts (d78f62c) by @leizzo
  • 🔧 chore(perch): set aside findings the stacked merges moved (d8d825d) by @leizzo
  • 🔀 merge: feat/69-plugin-sandbox into feat/70-mixer-inserts (22d1f8e) by @leizzo
  • 🔧 chore(perch): set aside the plug-in UI dock's false positives (962f18c) by @leizzo
  • 🔧 chore(perch): set aside the sandbox follow-ups' false positives (182ff0a) by @leizzo