Back to corpus
research noteexperiment writeup candidatescore 28
Phase 1 – Engine Bring-up (Weeks 1-6)
Goal: Ship a macOS binary that owns the CoreAudio device, renders audio in a lock-free callback (no allocations once prepared), plays two deck buffers through crossfader + EQ + limiter, and produces real latency/jitter metrics. Everything else can be stubs.
Full HTML reader
Read the full artifact
Extracted abstract or opening context
Goal: Ship a macOS binary that owns the CoreAudio device, renders audio in a lock-free callback (no allocations once prepared), plays two deck buffers through crossfader + EQ + limiter, and produces real latency/jitter metrics. Everything else can be stubs.
### 1.1 Audio I/O backend - Add `cpal` dependency; create `DevicePicker` that negotiates `f32` stereo 48 kHz stream with the default output device. - Implement `CoreAudioBackend::prepare()` to store stream config and device handles, `start()` to spawn the stream. - Provide `LinuxBackend`/`WasapiBackend` stubs behind `cfg` (return `Unsupported` errors) to keep the crate building on other OSes.
### 1.2 Render callback contract - Define `AudioBlock { channels, frames, data: *mut f32 }` and `AudioCallback` trait with `fn render(&mut self, AudioBlock)`. - Wire the cpal stream so the callback simply forwards the mutable slice to `EngineCore::render()`. - Configure QoS: set audio thread to `UserInteractive` priority via coreaudio APIs; pin control thread to another core.
### 1.3 Channel ring & double buffering - Introduce `ChannelRing<RenderBatch>` (SPSC) using `rtrb`; producer pushes `RenderBatch { left: *const f32, right: *const f32, len }` per block. - Consumer (audio thread) pops and copies into the device buffer; drop oldest batch if ring is full (increment `overruns`). - Add `EngineTelemetry` struct containing `overruns`, `callback_ns`, `blocks_rendered`.
**Deliverables:** Binary opens default device and outputs silence; unit test verifies ring operations do not allocate after creation.
Promotion decision
What has to happen next
Attach run IDs, datasets, metrics, and reproduction commands.
Why this is not always a full paper yet
Corpus pages are public-safe readers for discovered workspace artifacts. They are not automatically final papers. A corpus item becomes a polished paper only after the editable source, evidence checkpoints, references, figures, render path, and release status are attached through the paper schema.