8dab7236d4
Context: AV-Live needs a single-click way to boot its two heavy components (the SuperCollider sound engine and the openFrameworks oscope-of visualizer) together, with their logs aggregated in one place. Running them by hand from terminal during a live set is fragile. Approach: Swift Package Manager + a small build.sh that wraps the release binary into a real .app bundle (Info.plist with LSUIElement=true to keep it out of the Dock). The UI uses NSStatusItem + NSPopover so it works back to macOS 11 (Big Sur) — MenuBarExtra would require 13+ which the current target MBP can't run. Changes: - launcher/Package.swift : SwiftPM manifest, single executable target, macOS 11 minimum - AVLiveLauncherApp.swift : @main App + AppDelegate that owns the status item, popover and lazily-created log window - ProcessManager.swift : ObservableObject spawning sclang and oscope-of via Foundation Process, capturing stdout/stderr through Pipe + readabilityHandler, ring-buffered log array (2000 lines), termination handlers that flip @Published flags back. Paths persisted in UserDefaults with sane defaults - MenuBarContent.swift : popover view with two ProcessRow toggles, Logs / Paths / Quit, Settings sheet using NSOpenPanel - LogView.swift : separate window with filter, auto-scroll, color-coded source column, monospaced font. #available guard for textSelection - Info.plist : bundle id cc.saillant.AVLiveLauncher, GPL-3 copyright, LSUIElement true, min macOS 11 - build.sh : swift build -c release, copies binary + Info.plist into AVLiveLauncher.app, ad-hoc codesigns - .gitignore + README Impact: 'cd launcher && ./build.sh && open build/AVLiveLauncher.app' gives a working .app that brings up the AV stack from the menubar. Smoke-tested on arm64 — Intel MBP needs a local build or a future universal -arch x86_64 flag in build.sh.
1.2 KiB
1.2 KiB
AVLiveLauncher
macOS menubar launcher for AV-Live. Starts and stops sclang (which
auto-loads sound_algo/00_load.scd and serves the web UI) and the
oscope-of visualizer with one click each, and aggregates their logs in
one window.
Build
Requires Swift 5.7+ and Xcode Command Line Tools.
cd launcher
./build.sh
open build/AVLiveLauncher.app
The first run shows a waveform.path.ecg icon in the menubar. Click it
to open the popover.
Configuration
Three paths are stored in UserDefaults (~/Library/Preferences/cc.saillant.AVLiveLauncher.plist) :
| Default | Override |
|---|---|
/Applications/SuperCollider.app/Contents/MacOS/sclang |
Paths… → sclang binary |
~/Documents/Projets/AV-Live/sound_algo/00_load.scd |
Paths… → load file |
~/Documents/Projets/AV-Live/oscope-of/bin/oscope-of |
Paths… → oscope binary |
What it does
- Spawns
sclang <load_file>with stdout/stderr captured into the log window.sclangitself bootsscsynth, loads the 1099-SynthDef palette, and serves the web bridge on:8080. - Spawns the
oscope-ofbinary with cwd set to its parent directory (so oF can findbin/data/). - Quitting the menubar app sends
SIGTERMto both children.