Show each effect's controls in its own window #8

Merged
erdoar merged 1 commit from claude/plugin-editors into main 2026-10-10 02:27:36 +00:00
erdoar commented 2026-10-10 02:06:54 +00:00 (Migrated from github.com)

Summary

  • PluginWindows (app) opens one window per effect slot. It asks the Audio Unit for its own view controller (requestViewController) and falls back to Apple's generic parameter view (AUGenericView, expert parameters shown) when the plugin has none, as with many of Apple's built-ins.
  • Each slot row gets a controls button (sliders icon). A window is reused when reopened and closed when its slot is removed.
  • AudioEngine.audioUnit(for:) exposes the loaded unit per slot. The engine itself stays UI-free.
  • Engine test extended: the unit is available once loaded and gone once removed.

Tested

  • Mac mini M4, macOS 15, Swift 6.1.2: swift test passes all tests. In the bundled app, the controls windows open and work, as reported by the owner.
  • Linux: all changed Swift files pass a syntax-only parse.

🤖 Generated with Claude Code

https://claude.ai/code/session_011C96TJ2L7nzVMFTH7raNu5

## Summary - `PluginWindows` (app) opens one window per effect slot. It asks the Audio Unit for its own view controller (`requestViewController`) and falls back to Apple's generic parameter view (`AUGenericView`, expert parameters shown) when the plugin has none, as with many of Apple's built-ins. - Each slot row gets a controls button (sliders icon). A window is reused when reopened and closed when its slot is removed. - `AudioEngine.audioUnit(for:)` exposes the loaded unit per slot. The engine itself stays UI-free. - Engine test extended: the unit is available once loaded and gone once removed. ## Tested - Mac mini M4, macOS 15, Swift 6.1.2: `swift test` passes all tests. In the bundled app, the controls windows open and work, as reported by the owner. - Linux: all changed Swift files pass a syntax-only parse. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_011C96TJ2L7nzVMFTH7raNu5
Sign in to join this conversation.
No description provided.