mirror of
https://github.com/storytold/soundcraft.git
synced 2026-10-29 04:56:46 -06:00
Setup > Playback Engine now chooses the audio system (cpal host), output and input device, device sample rate and buffer size, kept per machine with the UI preferences and applied by reopening the devices (refused while recording; the transport position is kept). ui.audio_device does the same for agents and lists every system with its devices, channels, rates and buffer range. Player and recorder open the chosen device, fall back to the defaults for anything unavailable (unplugged device, unsupported rate), retry with the device's default buffer when the chosen one is refused, and convert 32/16-bit integer devices from and to the f32 mix through scratch buffers allocated up front (no allocation in the callbacks). ASIO is behind an opt-in 'asio' feature (playback and app): building it downloads Steinberg's ASIO SDK (proprietary licence or GPLv3) and needs LLVM, so it stays off by default. Verified on Windows with an SSL 2+: WASAPI output/input switching and buffer 256, ASIO duplex at 128. Docs: G-01 shrunk, hardware-parity rows, roadmap log. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
4.7 KiB
4.7 KiB
Hardware parity
Last reviewed: 2026-10-10 · Last updated: 2026-10-12 · Change: minor (audio device, rate and buffer choice; ASIO feature) · Target: Avid Pro Tools Ultimate 2026.4.1
A DAW is judged by how it drives audio interfaces, MIDI gear, control surfaces and sync. This is
SoundCraft's weakest dimension. Ours is measured from crates/playback (cpal) and the absence of
any MIDI-device or control-surface code; Pro Tools' from its documentation and Setup menus.
Hardware: ~12 % ready (estimated). Performance: ~35 % (estimated; nothing benchmarked against Pro Tools). Remaining ≈ 110–180 h for hardware, 40–70 h for performance.
Legend: ✅ works · 🟡 partial · ❌ missing.
Audio interfaces
| Feature | Pro Tools (macOS / Windows) | SoundCraft macOS | Windows | Linux | FreeBSD | Web |
|---|---|---|---|---|---|---|
| Driver API | Core Audio / ASIO | 🟡 Core Audio via cpal | 🟡 WASAPI shared via cpal; ASIO with the opt-in asio build feature (verified with an SSL 2+) |
🟡 ALSA/Pulse via cpal; no JACK | 🟡 cpal (ALSA layer) | 🟡 Web Audio |
| Choose playback device | ✅ Playback Engine | 🟡 Setup › Playback Engine (not yet verified on macOS) | ✅ Setup › Playback Engine (WASAPI, ASIO) | 🟡 (not yet verified) | 🟡 (not yet verified) | ❌ |
| Choose input device | ✅ | 🟡 Setup › Playback Engine (not yet verified on macOS) | ✅ (WASAPI, ASIO) | 🟡 (not yet verified) | ❌ no recording | ❌ |
| Buffer size (32–2048) | ✅ | 🟡 device buffer when the driver allows it (not yet verified); mix in 512-sample blocks | 🟡 device buffer 16–8192 (verified 128 on ASIO, 256 on WASAPI); mix in 512-sample blocks | 🟡 (not yet verified) | 🟡 | ❌ |
| Duplex stream on one clock | ✅ | ❌ separate input/output streams | ❌ | ❌ | ❌ | ❌ |
| Hardware I/O mapping (I/O Setup to physical channels) | ✅ | 🟡 multichannel output in order; no per-channel map | 🟡 | 🟡 | 🟡 | ❌ |
| Low-latency monitoring | ✅ | ❌ (options.low_latency_monitoring is a stored flag) |
❌ | ❌ | ❌ | ❌ |
| Latency reporting and record offset compensation | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Sample rate follows the session; resample when it can't | ✅ (switches device) | 🟡 resamples (input pitch bug fixed, #28) | 🟡 | 🟡 | 🟡 | 🟡 |
| Avid HDX / HD Native DSP, Hybrid Engine DSP mode | ✅ | ❌ (out of reach: Avid hardware) | ❌ | ❌ | ❌ | ❌ |
| Disk allocation / record to disk | ✅ | ❌ recording into RAM (PR #84) | ❌ | ❌ | ❌ | ❌ |
MIDI
| Feature | Pro Tools | SoundCraft (all platforms) |
|---|---|---|
| MIDI input devices (keyboards, pads) | ✅ | ❌ no MIDI device layer at all (setup.midi_input_devices stores names) |
| MIDI output to external gear | ✅ | ❌ |
| MIDI Thru, input filter | ✅ | ❌ (stored flags only) |
| MIDI Beat Clock out, MTC generate/chase | ✅ | ❌ |
| MIDI learn / controller mapping | ✅ (via surfaces and plug-in maps) | ❌ |
| Virtual MIDI keyboard | ✅ (MIDI Keyboard window) | 🟡 window exists, no live audition path |
Control surfaces
| Feature | Pro Tools | SoundCraft |
|---|---|---|
| EUCON (S1/S3/S4/S6, Dock, Control app) | ✅ | ❌ Avid-proprietary SDK; owner decision |
| HUI | ✅ | ❌ |
| Mackie Control Universal | ✅ (via HUI emulation and personalities) | ❌ |
| Generic MIDI controller personalities | ✅ | ❌ |
Sync and video hardware
| Feature | Pro Tools | SoundCraft |
|---|---|---|
| LTC / MTC chase, 9-pin machine control | ✅ (Ultimate) | ❌ |
| Word clock / video reference awareness | ✅ via interface | ❌ |
| Video output to a second display or video card | ✅ | ❌ (video window only) |
| Satellite linking of systems | ✅ | ❌ |
Performance
| Feature | Pro Tools | SoundCraft | Evidence |
|---|---|---|---|
| Parallel mixing across cores | ✅ | ✅ | soundcraft-mix renders independent strips in parallel (rayon) |
| Plugin delay compensation | ✅ | ✅ | |
| Disk streaming of long sources | ✅ | ❌ | Whole files decoded into the SourcePool |
| Track count (Ultimate: 2,048 voices) | ✅ | unmeasured | No benchmark exists; add cargo xtask bench |
| Real-time audio thread discipline | ✅ | ✅ | No blocking/allocation in steady state, audio-thread-aware logger |
| Freeze / commit to save CPU | ✅ | 🟡 | track.commit renders; track.freeze only sets a flag (no CPU saved) |
| GPU-accelerated UI | — | ✅ (wgpu/glow via eframe) | llvmpipe X11 issue #107 |
Revision history
| Date | Change | Summary |
|---|---|---|
| 2026-10-12 | minor | Audio device settings: system, output, input, sample rate and buffer size; opt-in ASIO |
| 2026-10-10 | major | Created: audit of audio interface, MIDI, control-surface, sync and performance support against Pro Tools 2026.4.1 |