L'électron rare 8dab7236d4 feat(launcher): SwiftUI menubar app
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.
2026-05-07 12:04:59 +02:00
2026-05-07 11:51:03 +02:00
2026-05-07 11:49:18 +02:00
2026-05-07 11:51:03 +02:00

AV-Live

Audio-visual live performance monorepo for solo or small-ensemble live coding sets.

Three components, one launcher :

Path Role Tech
sound_algo/ Sound engine — 1099 SynthDef palette, tracks, web bridge OSC↔WebSocket SuperCollider 3.13+
oscope-of/ Oscilloscope visualizer driven by audio + Hantek 6022BL USB capture openFrameworks 0.12+
launcher/ macOS menubar app : start/stop each component, unified logs SwiftUI

Quick start (macOS)

# 1. Clone
git clone https://github.com/electron-rare/AV-Live.git
cd AV-Live

# 2. Install dependencies
brew install --cask supercollider
# openFrameworks : download 0.12+ from https://openframeworks.cc/download/

# 3. Build the launcher
cd launcher && xcodebuild -scheme AVLiveLauncher -configuration Release
open build/Release/AVLiveLauncher.app

# 4. Or run components manually
sclang sound_algo/00_load.scd     # boots scsynth + loads palette + serves :8080
cd oscope-of && make && bin/oscope-of   # opens the visualizer

Architecture

                  ┌─────────────────────────────────────────┐
                  │  AVLiveLauncher.app  (macOS menubar)    │
                  │  start / stop / logs / status           │
                  └────────┬─────────────┬──────────────────┘
                           │             │
        ┌──────────────────▼─┐       ┌───▼──────────────────┐
        │  sclang + scsynth  │       │  oscope-of (oF .app) │
        │  sound_algo/       │       │  src/main.cpp        │
        │                    │       │                      │
        │  audio :57110 OSC  │ ────► │  OSC :57123 in       │
        │  web  :8080 HTTP   │       │  Hantek USB capture  │
        │  WebSocket :57121  │       │  GPU-accel render    │
        └────────────────────┘       └──────────────────────┘

Components

sound_algo/

Live coding SuperCollider system (forked from electron-rare/supercollider-live refonte-v2 branch). Auto-loads 1099 SynthDef across drums/bass/lead/pad/world/master + fx categories. Provides 5-namespace live API (~kk/~mm/~ff/~cc/~p). 23 pre-composed tracks. Web UI on :8080. OSC relay to oscope-of on :57123.

See sound_algo/CLAUDE.md for live coding workflow.

oscope-of/

openFrameworks application. Three visualizers : Lissajous (CRT phosphor), spectrogram (perceptual freq mapping), reactive (8-voice shader). Lock-free SPSC ringbuffer for USB→UI thread. FFT with Hann windowing. Optional Hantek 6022BL hardware input.

See oscope-of/README.md for build details.

launcher/ (macOS only)

SwiftUI menubar app bundle (.app). Manages process tree of sclang/scsynth/oscope-of. Unified log viewer. Clean shutdown on quit.

License

GPL-3.0-or-later (see LICENSE).

Author

L'Electron Rare — https://github.com/electron-rare

S
Description
Audio-visual live performance monorepo : SuperCollider sound engine + openFrameworks Hantek oscilloscope visualizer + macOS SwiftUI launcher
Readme GPL-3.0 14 MiB
v0.1.0 Latest
2026-05-07 22:04:02 +00:00
Languages
SuperCollider 60.1%
Python 21%
Swift 5.5%
C++ 4.4%
JavaScript 4.3%
Other 4.5%