Evaluate DSP primitives behind an owned mixer interface
Decision on 2026-09-11: retain bosai-dsp as the leading DSP adapter candidate; do not yet replace the working mixer path or describe it as an A9 emulator. It is not a dependency of the current emulator build. No Mixxx code was copied.
The repository was inspected at commit fbc07775d721150aeb6ff1e1416235567513e15a. Its manifest declares 0.1.1, while its README still describes 0.1.0. This illustrates why the dependency must be pinned to inspected code rather than relying on prose status. The source declares MIT and has no Cargo dependencies. Local cargo test passed all 93 unit tests, and Clippy with warnings denied passed. These tests establish the upstream test suite's result, not hardware fidelity.
Fit
The crate offers stereo f64 DJ-oriented effects with beat/BPM parameters, EQ, sweep filtering and smoothing. Echo, ping-pong and roll-style effects are promising additions to our shared mixer. Its sample-processing interface can sit behind owned controls without exposing crate objects to agents. The published crate documentation describes the intended building blocks.
An A9-style wrapper must still own four channel strips, control validation, FX selection/routing, crossfader assignment, master/booth/cue buses, clock context and capability reporting. A V10 needs its own six-channel/four-band/routing model. Device names, manufacturer-inspired comments and passing DSP tests do not establish either hardware model's transfer functions or control protocol.
Findings from source inspection and a targeted probe
- Echo tail termination needs investigation. In the inspected revision, the drain path stops when the current delayed stereo sample is below its threshold. A quiet point can occur before later nonzero material in the delay buffer. A local impulse probe reproduced a lost tail: enable a one-beat echo at 120 BPM / 48 kHz, feed an impulse and 99 silent frames, disable it, then process one second of silence. The resulting tail peak was exactly zero, although a delayed impulse was still pending. This case is not covered by the passing upstream tests.
- Enabling echo performs work proportional to its buffer size.
set_enabled(true)clears a four-second buffer. No allocation is required, but it is still a large operation at an audio boundary. Measure worst-case command-time CPU separately from steady-state sample processing. - Parameter translation is required.
EqChainexpects −1 to +1 knobs and maps positive values to dB boost; the current emulator exposes linear gain 0–2. Its sweep filter also uses a different normalized domain. Passing our numbers directly would change the sound and neutral positions. - Call ordering matters. EQ setters mark the processor dirty; the wrapper must invoke
rebuild_if_dirtybefore processing updated settings. - README wording is not a measurement. The inspected echo tap transition uses a linear blend in
read_delayed, despite broader equal-power-crossfade wording. Test the actual transition behavior rather than repeating the claim.
The buffer-drain probe was run locally against the pinned checkout without altering project dependencies or submitting an upstream issue. The result is a specific integration concern, not a claim that all effects are faulty.
Adoption gate
Introduce a private adapter behind an owned ClubMixer contract and pin the reviewed release/commit. Start with one effect and an explicit capability entry. Before enabling it by default:
- Add regression coverage for sparse/discontinuous echo tails and effect enable/disable transitions.
- Check finite output, bounded gain, all parameter limits, long silence and stereo isolation at supported sample rates.
- Measure allocation and CPU on the complete control-plus-process path, including arming effects.
- Verify gain/filter mapping, neutral behavior, full-kill settling, dry/wet law and BPM changes.
- Measure four channels plus FX under the chosen container/audio block budget.
- Perform listening comparisons and, separately, hardware reference measurements.
- Carry the upstream license and embedded third-party notices when shipping the dependency.
Until those gates pass, the current mixer remains explicitly basic DSP, with no Beat FX claim. Mixxx can inform a separately documented architecture study; no implementation port or legal conclusion about a future combination is implied here.