Skip to main content

CDJ/DJM emulator: provenance and historical audit

Current status: the original application remains an unchanged reference snapshot, but selected protocol codecs were subsequently adapted into aidj-club-emulator and copied into the platform with provenance. The emulator now has a separately implemented four-CDJ/shared-mixer runtime. See the implementation topology. Statements below about no imports and post-MVP reuse describe the initial audit, not the current repository state. The missing upstream vendored dependency still prevents treating the original app as the active build.

Source inspection date: 2026-09-11. The OllieCross/CDJ_DJM_Emulator README describes a pre-alpha, macOS-first project for up to four virtual CDJ-3000 players and a mixer. It reports protocol, audio-playback, beat-clock, and metadata-serving work. Its Rust workspace separates cdj-proto, cdj-core, and cdjd.

These are upstream statements, not Prochain build results or compatibility certification. The initial scaffolding audit cloned and inspected the source without importing it. Protocol adaptation happened later; the original full application still has not been adopted as a build dependency. Full application/library-parser review remains pending.

The workspace manifest declares MIT OR Apache-2.0, but the inspected repository has no license files. Its Cargo patch points at vendor/rekordcrate, absent from the tree. These gaps must be resolved before selecting it as a buildable dependency.

Audit deliverable

Pin an exact commit before auditing. Produce one row per component with files reviewed, license evidence (including vendored code), local build/test results, dependencies, platform assumptions, and a reuse/adapt/rewrite/defer recommendation.

ComponentQuestions to resolveInitial disposition
cdj-protoCodec completeness, malformed input handling, fixtures, no I/O couplingReuse candidate after audit
cdj-coreSeparate clock, network, library, and device state? Wall-clock assumptions?Adapt selected boundaries if justified
cdjdCLI and diagnostic value versus daemon architectureReference/tooling candidate
Vendored library parserModifications, provenance, license, PDB/ANLZ coverageAudit independently
Audio pathPer-player output versus shared mixer graph, callback safetyAssess against our renderer contract

Public visibility does not establish permission to reuse. Resolve license and redistribution terms before copying or vendoring; if unavailable, retain references and implement independently. Review this with the project's licensing policy before selecting a dependency.

Acceptance requires reproducible builds on intended platforms, fixture-backed correctness, a separable deterministic clock, and a maintenance/version strategy. Keep the first virtual command loop independent of this audit.

Market claims

We have not established that no competing virtual DJ laboratory exists. The opportunity is the proposed combination of actors, simulation, audio rendering, replay, evaluation, and physical adapters. Treat uniqueness as an open research question. Other projects mentioned during brainstorming, including firmware emulators and library servers, remain unassessed rather than endorsed dependencies.

Pinned inspection result

Commit b19b7ca5834f16d4605417c8b413ea8ec8832d4b was cloned locally. The original cargo test --locked -p cdj-proto attempt failed before compilation because app/vendor/rekordcrate/Cargo.toml was missing. No tests passed in that original workspace. Subsequently, the maintained codec was extracted with provenance and independently tested, and a new runtime was implemented around it. The original application's build failure does not describe the active emulator workspace.

Source recheck: 2026-09-11

Inspected fresh shallow clones, rather than relying on repository descriptions:

  • Beat Link: ef0aaa1ea949f5c3b1e759973f784c488a12288a.
  • OllieCross/CDJ_DJM_Emulator: b19b7ca5834f16d4605417c8b413ea8ec8832d4b.

Beat Link's VirtualCdj implements virtual network participation, startup/claim handling, directed status, beat generation and tempo-master coordination. Its CDJ-3000 interoperability support should not be interpreted as a complete CDJ-3000 music playback or firmware emulator. The inspected status template contains 253 payload bytes; Util.buildPacket adds a 31-byte update header, producing a 284-byte packet. This is different from both our minimal 212-byte status and the documented 512-byte CDJ-3000 status. Packet names alone do not determine protocol fidelity.

OllieCross's CLI defaults to player name CDJ-3000 and mixer name DJM-V10. Its status codec emits 212-byte CDJ status regardless of that name. The virtual player also sends status to a hard-coded macOS test peer 10.77.77.200; the mixer sends a constant idle status. No DJM-A9-specific implementation was found in either inspected source tree. This is a bounded source finding, not a claim that A9 emulation is impossible.

OllieCross includes local audio playback and a reader for exported rekordbox libraries; those are separate from implementing a CDJ that accepts rekordbox EXPORT load commands and fetches tracks over the LAN. The inspected player loop sends packets but contains no incoming load-command/NFS client path. The README still lists virtual mixer audio and ShowKontrol validation as future milestones. Its Cargo patch references app/vendor/rekordcrate, which remains absent from the fresh clone; no successful fresh upstream build is claimed.

The comparison exposes further omissions in our minimal status packet: Beat Link supplies base flags, secondary/tertiary play states and a master-mode field that ours leaves at zero. These need a coherent packet-profile implementation and independent tests; they are not yet established causes of the missing rekordbox tile. Use Beat Link as an interoperability reference and possible separate A/B test participant; do not equate its CDJ-3000 hardware support with a drop-in DJM-A9 DSP engine. The current legacy wire identity is a temporary compatibility profile, while CDJ-3000X/A9 remain the product targets.