e↗entertrainment
← All project stories
Sound & electronics / PROJECT STORY

QStation

Audio plugin work connecting signal processing, visual feedback and numerical foundations in the wider studio package ecosystem.

Plugin development11 MIN READDEVELOPMENT ARCHIVE · OCT 2026
PROJECT REVIEW · 18 October 2026

Inside the project

Prepared with the project’s development agent from source and retained evidence. This is a project-owner assessment, not an independent customer review. Dated checks were not rerun for this website.

QStation is most useful when a clean, close-mic'd or DI'd DAW track needs to sound like it was captured live on a stage — through a specific microphone, at a distance and angle, inside a room, bleeding into the rest of the band. Rather than a reverb or a fixed mic-EQ curve, it models a 3D studio stage and derives distance, delay, equal-power pan, frequency-dependent polar rejection, proximity, mic tone, room and performance movement from where you place the mic and the sources. The strongest working parts today are the C++ spill/room engine (up to 190 voices), the 70-model mic locker with four real polar patterns and a live polar scope, and the breadth of DAW routing: five Audio Component identities from one extension, a same-process multi-instance shared stage, and a Logic-friendly Drum Relay/Drum Kit workflow on fixed kit geometry. An ARA2 region mode processes region audio in place (region-based stage/mic processing only — no pitch/note editing). Recent work connected the numerics to two sibling Swift packages strictly off the realtime thread: SemanticCompute for batched EQ design, region IIR filtering, spectral metrics and RBF polar-table baking, and ResearchControls for a 4D mic-position pad and a live goniometer. The honest caveats: the integrations are build- and component-test verified but not yet exercised in a DAW; multi-instance live spill needs same-process hosting; signing is local/dev with no notarization or license; and the project ships no UI screenshots or video, so marketing captures do not yet exist. It is deliberately a restrained studio utility, not a finished retail release.

What stands out

  • Physical stage/mic model (distance, delay, pan, polar rejection, room, live-feel) rather than a static emulation curve
  • 70-profile mic locker with four polar patterns, mic-specific off-axis colouration, and a live polar scope of real post-DSP energy
  • Deep routing: five AU identities (insert, sidechain, Drum Kit, Drum Relay, ARA) from one extension
  • Same-process multi-instance shared stage with cross-instance editing and a Session Browser
  • Logic-friendly Drum Relay/Drum Kit workflow on fixed kit geometry
  • Conservative realtime engineering: 44.1–192 kHz, 32–4096 buffers, per-block (not per-sample) mic lookups, render-health throttling
  • Offline compute integrations kept strictly off the realtime thread, with component tests passing (2026-10-17)

Current limits

  • Integrations build/component-verified only — not runtime-tested in a DAW
  • Multi-instance live spill requires same-process AUv3 hosting; cross-process hosts need sidechain/ARA/explicit routing
  • No pitch/note/time-stretch (ARA is region stage/mic processing only)
  • Local/dev signing; not notarized, not distributed, no project license
  • No UI screenshots or video demos exist in the repo; mic-locker photos are not cleared for redistribution
  • QStation's own unit tests not re-verified this session (read-only; README notes testmanagerd sandbox limits)

Features & evidence

Mic-spill / room DSP (BleedProcessor)

source

Per-voice distance->delay/attenuation, equal-power pan, fractional delay, one-pole mic tone, 8-tap mic FIR shade, cross-fed room; up to 190 voices; Kalman-style position/level smoothing; FIR high-precision mode.

Recorded evidence

README status 'Implemented'; DSP source headers 11-15 Jul 2025; in-process render harness QStationIOProbe present (pass status not re-verified this session)

70-model mic locker + polar patterns

source

Dynamic/condenser/ribbon/tube/FET/stereo/multipattern profiles; omni/cardioid/hypercardioid/figure-8 with mic-specific off-axis colouration; live polar scope.

Recorded evidence

README Core Features; Resources/MicLocker/.json|.csv + generated Swift catalog + C++ priors; 32 bundled mic PNGs

Five AUv3 component identities

source

Insert aufx/thrd, sidechain aufx/thrs, Drum Kit aufx/thdk, Drum Relay aufx/thrl, ARA aumf/thra - from one extension.

Recorded evidence

README Install identities; QStationExtension/Info.plist AudioComponents

Multi-instance shared stage + Session Browser

source

Each instance publishes selected-source audio + parameter snapshot; siblings collect spill; one window edits another instance.

Recorded evidence

README Multi-Instance Behavior; QStationInstanceRegistry; QStationIOProbe sibling-spill test described

Drum Relay / Drum Kit workflow

source

Single-input relays on kit tracks feed a drum-bus instance on fixed shell/cymbal geometry; one-way routing; inter-piece bleed matrix.

Recorded evidence

README Drum Kit Geometry + Live Routing; QStationIOProbe drum-routing tests described

ARA2 region mode

source

Factory, document controller, playback/editor/view roles, chunked region capture, position-aware multi-region rendering.

Recorded evidence

README ARA2 Region Mode; QStationARAIntegration/QStationARARegionStore

SemanticCompute offline DSP integration

component-tested

Batched peaking-EQ design, GPU/CPU region IIR filter, STFT->centroid analyzer, RBF polar-table baker - all off the realtime thread.

Recorded evidence

docs/SemanticCompute-Offline-Integration.md: SemanticCompute package tests 5/5 parity + 6/6 offline (RBF baker reproduces measured cardioid angles ~1.5e-6); headless xcodebuild BUILD SUCCEEDED 2026-10-17

ResearchControls UI (4D mic pad, goniometer)

component-tested

SemanticPad4D bound to mic X/Y/height/angle; live goniometer fed by a new kernel L/R sample tap.

Recorded evidence

same doc: API compile tests 2/2 + BUILD SUCCEEDED 2026-10-17; not DAW-runtime tested

Presets + full AU state recall

source

Live Band, Close Vocal, Loud Stage, Room Pair; fullState/fullStateForDocument; mono/stereo layouts.

Recorded evidence

README Core Features

Logic auto-track assignment

source

UI-only: reads selected Logic track name (Accessibility/Apple Events) and classifies to mic/pattern; never on the render thread.

Recorded evidence

README (Logic track auto assignment; UI-only, permission-gated fallback)

Whole-plugin build

source

App + extension compile and link (arm64 + x86_64).

Recorded evidence

docs/SemanticCompute-Offline-Integration.md records BUILD SUCCEEDED 2026-10-17, signing disabled; not installed-tested in a DAW, not released

Review updates & corrections
  • No new engineering since the 2026-10-17 biography (read-only session).
  • The SemanticCompute/ResearchControls integration, its passing component tests, the app+extension BUILD SUCCEEDED, and the macOS/iOS 26 deployment-target bump were already recorded on 2026-10-17 - unchanged.
  • This packet adds a review/feature-state lens, a demo walkthrough, and demo-asset clearance flags; it does not add new functionality.

Workflow walkthrough

A guide to the native workflow. These steps describe the app; only the recordings and images embedded on this page are available as website demonstrations.

  1. Insert QStation on a track (or pick the sidechain / Drum Kit / Drum Relay / ARA identity for advanced routing).
  2. Choose a microphone from the locker; pick a supported polar pattern; set distance, axis and height.
  3. Place the source and mic on the 3D stage; set room size/damping/live-feel/wet mix; audition against the dry signal.
  4. For a band: run several instances and stage them together from one window via the Session Browser.
  5. For drums: put a Drum Relay on each kit track and a Drum Kit on the bus, matched by Relay Group; tune pieces in the Kit tab.
  6. Automate any parameter; recall via full AU state. (Offline: ARA2 region mode processes region audio in place.)
Planned captures · not yet available
  • Plugin editor / stage / mic-locker screenshots - do not exist; would require running the 'QStation Plugin' Xcode preview or the built app
  • Walkthrough/demo video - does not exist
  • Not web-playable: native macOS AUv3 cannot run in a browser; no interactive site demo possible

Development biography · earlier archive

Development profile compiled from project source and retained records in October 2026. Dates and test results describe those records; they do not imply a new build, live acceptance test or public release.

Biography

QStation answers a specific studio problem: a dry, close-mic'd or DI'd track sounds nothing like the same source captured live on a stage — through a chosen microphone, at a distance, off-axis, bleeding into the rest of the band and coloured by the room. Most tools approximate this with reverb or a fixed mic-emulation curve. QStation instead builds a geometric model and derives the capture from it.

It ships as a macOS AUv3 effect extension plus a lightweight SwiftUI host app that loads, validates and auditions the extension. Beneath the SwiftUI editor sits a self-contained C++ DSP core. Its centre is BleedProcessor, a per-voice spill/room engine scaling to 190 instrument voices: for each source it computes stage distance → delay and attenuation, equal-power pan from stage X, a fractional-delay line, a one-pole mic tone, an 8-tap mic FIR "shade", then a cross-fed room delay. Source and mic motion pass through control-rate "Kalman-style" scalar smoothers so positions glide rather than zipper, and a high-precision FIR mode swaps the one-pole tone for a multi-tap body/air response.

The microphone is the signature. A 70-profile locker spans dynamic, condenser, ribbon, tube/FET, stereo, multipattern and instrument-specific models (Shure SM57/SM7B/SM58, Neumann U87 Ai/TLM-103, Telefunken U47/ELA M 251, Royer R-121, AEA ribbons, Sennheiser, Audix, DPA and more). Profiles are generated from supplied 30-point EQ curves and a spec matrix into a Swift catalog plus realtime-safe C++ priors (tonal bands, proximity estimates, polar amplitude/polarity tables, Kalman observation priors). Four polar patterns — omni, cardioid, hypercardioid/supercardioid, figure-8 — render as analytic curves with mic-specific off-axis colouration; each mic exposes only its real pattern set. A live polar scope overlays the chosen pattern with a decimated trace of the actual post-DSP audio energy.

QStation is unusually deep on routing: one extension presents five Audio Component identities — standard insert (aufx/thrd/Entr), eight-bus instrument sidechain (aufx/thrs/Entr), Drum Kit multibus (aufx/thdk/Entr), Logic-friendly single-input Drum Relay (aufx/thrl/Entr) and an ARA music-effect entry (aumf/thra/Entr). A same-process live-instance registry lets every active QStation publish its selected-source audio plus a full parameter snapshot; siblings collect those buffers as spill sources, and one window can focus and edit another instance's mic/room/matrix. The Drum Relay/Drum Kit workflow models a real kit against fixed shell/cymbal geometry (20" kick, 14" snare, rack/floor toms, hats, overheads, room) so close-mic tracks feed a drum-bus instance without eight visible sidechains.

Intended audience: producers and mix engineers on macOS DAWs (Logic especially, given the Drum Relay design) who want live-room realism, cohesive "same room" glue across a multitrack session, or creative re-micing of clean sources.

A concrete user journey: insert QStation on a track; pick a mic from the locker and a supported polar pattern; set distance, axis and height; place the source and mic on the stage and dial room size/damping/live-feel/wet mix; audition against the dry signal. For a whole band, run several instances and stage them together from one window via the Session Browser. For drums, put a Drum Relay on each kit track and a Drum Kit on the bus, matched by Relay Group, then tune pieces in the Kit tab. Every parameter is host-automatable and recalled via full AU state. Offline, an ARA2 region mode processes region audio in place (region-based stage/mic processing only — pitch/note editing is explicitly out of scope).

The "computing integrations" connect QStation's numerics to two sibling Swift packages in strictly offline/prepare/ARA roles: SemanticCompute (a Metal/CPU kernel-family compiler) for batched EQ design, region IIR filtering, spectral metrics and RBF polar-table baking; and ResearchControls for a 4D mic-position pad and a live goniometer. The rule is stated everywhere in the docs: nothing touches the realtime process() thread — GPU/offline only, while the 190-voice mixer and recursive smoothers stay on the CPU. Runtime behaviour is conservative throughout: non-interleaved Float32, 44.1–192 kHz, 32–4096-frame buffers, mic lookups computed once per block, and a render-health monitor that throttles analysis under load.

Modules / features (authored vs dependency)

What a visitor can see/hear/try (all authored unless noted):

  • 3D stage designer — draggable mic + live-instrument nodes, height posts, polar overlay, spill halos .
  • Mic locker — dual mic towers, scrollable 70-model selection, pattern/axis/distance/height/spill/output, live polar scope.
  • Mic-spill DSP — distance delay/attenuation, polar/harmonic rejection, proximity, mic tone, room (size/damping/early reflections/spread), live-feel; FIR high-precision shade; Kalman-style smoothing (BleedProcessor).
  • Multi-instance shared stage + Session Browser — publish/focus/mute/edit sibling instances in-process.
  • Drum Relay + Drum Kit bus — fixed kit geometry, one-way routing, inter-piece bleed matrix.
  • Logic auto-track assignment — UI-only; reads selected track name via Accessibility/Apple Events, CMAC-style lexical classification (never on the render thread).
  • ARA2 region mode — region capture + position-aware rendering, multi-region mixing.
  • Runtime analyzer — level, peak, crest, approx LUFS, brightness, transient density, stereo width/correlation, room boom/air, mains-hum (Goertzel), DSP time, live-instance count, ARA status; plus a goniometer (added via the ResearchControls integration).
  • Presets — Live Band, Close Vocal, Loud Stage, Room Pair; full AU state recall; mono/stereo layouts.
  • Dependencies/integrations (not core-authored): SemanticCompute offline DSP; ResearchControls UI controls; ARA2 SDK (headers supplied externally).

Technical foundations & local packages

  • Languages/frameworks: Swift/SwiftUI (editor + host), Objective-C++ bridge (QStationExtensionObjCWrapper), C++ DSP (BleedProcessor, QStationExtensionDSPKernel, Biquad, FIRConvolver/FIRFilter, FractionalDelay/FarrowFractionalDelay, PolarPatterns/FreqPolarPattern), AudioToolbox/AVFoundation (AUv3), Accelerate/vDSP (optional FIR path).
  • DSP maths: RBJ biquad cookbook; Goertzel single-bin power (50/60 Hz hum); mid/side stereo metrics; mic priors generated from supplied curves/spec matrix.
  • Local packages: SemanticCompute (Metal/CPU kernel-family compiler — biquad design, IIR, FFT/STFT, Goertzel, correlation, RBF interpolation, spectral features) used offline; ResearchControls (SwiftUI research controls — SemanticPad4D 4D pad, ResearchGoniometer) used in the UI. Both wired as local Swift Package dependencies.
  • ARA2: headers via ARA_API_DIR or Vendor/ARA_API; factory, document controller, playback/editor/view roles, chunked region reads.

Maturity by feature (dated evidence; unknowns marked)

  • Source implemented: Core DSP, AUv3 (5 identities), SwiftUI editor, host app, multi-instance, Drum Relay/Kit, 70 mic profiles, ARA2 — README.md status table marks all "Implemented" (table undated). Initial DSP source headers dated 11–15 Jul 2025.
  • Integration source + tests passed: 2026-10-17 — docs/SemanticCompute-Offline-Integration.md records SemanticCompute package tests green (5/5 parity incl. a biquad-recurrence fix; 6/6 offline incl. an RBF polar baker reproducing measured cardioid angles to ~1.5e-6). SEMANTICCOMPUTE_UPGRADES.md assessed "Complete 100%" on 2026-07-29 (embedded status).
  • Built: 2026-10-17 — same doc records a headless xcodebuild BUILD SUCCEEDED for app + extension (arm64 + x86_64, signing disabled). Evidence is the doc, not re-run this session.
  • QStation's own unit tests (QStationTests/QStationIOTests) passing: UNKNOWN / not reported by the project agent on 17 October 2026 . Test source is present.
  • Installed / runtime-verified in a DAW: NOT verified — integrations are build/link-verified only; no DAW runtime test on record.
  • Released / deployed: NO — signing is local/dev (Apple Development), not notarized/distributed; no project license specified .

Roadmap, limitations, FAQs

Roadmap : more mic profiles + profile import/export; DAW-specific compatibility notes (Logic, Studio One, Reaper, Cubase/Nuendo, Live); more host-driven ARA conformance tests; notarized release packaging; runtime-test the SemanticCompute/ResearchControls integrations in a DAW; optionally enable the (default-off) RBF dense polar table and bridge MicPolarTableBaker → the C++ lookup.

Known limitations: multi-instance live spill needs same-process AUv3 loading (cross-process hosts must use sidechain/ARA/explicit routing); integrations build/link-verified, not DAW-runtime-tested; GPU/offline only, never on the realtime thread; no pitch/note/time-stretch (ARA is region processing only); local/dev signing, no notarization, no license; auval doesn't enumerate AUv3 app-extensions on this machine (use PlugInKit registration + signed container); Logic auto-track needs Accessibility permission and falls back to "unavailable".

FAQs:

  • Is it a reverb? No — a geometric stage/mic spill model, not a reverb or static mic-EQ.
  • Which DAWs? Any macOS AUv3 host; Drum Relay is the recommended Logic path (one sidechain per instance).
  • Does the ARA mode edit pitch? No — region-based stage/mic processing only.
  • Are the mic models the real microphones? They are estimated profiles from supplied curves/specs, branded "Entertainment" — not official manufacturer models.
  • Can I buy/download it? Not currently — no public release or license is specified in the repository.

Explore the connections.

Browse all project stories ↗