Repository navigation
OpenV7 v1.0.2 — the platter jitter is fixed
The V7's motorized platter made VirtualDJ's audio hiccup on Apple Silicon. The cause is fixed, and it turned out to be in OpenV7's own MIDI parser rather than in the deck.
What was wrong
midi_feed reset its parser state after every run of 0xFD padding, treating each 42-byte USB frame as a self-contained message container. It isn't — it's a transport container. Against a capture of the stock Ploytec driver on Windows, where VirtualDJ has no hiccups, 11.7% of frames begin part-way through a message the previous frame started. Every one of those was discarded.
| positions | timestamps | largest step | undecidable steps | |
|---|---|---|---|---|
| 1.0.1 | 11,416 | 11,413 | 64 | 2 |
| 1.0.2 | 12,124 | 12,124 | 3 | 0 |
Those last two columns are the symptom. The old parser reported platter steps of 64 counts — the point where a 7-bit counter becomes genuinely undecidable — from a deck whose real maximum step is 3. Each one moved the playhead by up to a third of a revolution. That is what you were hearing.
5.8% of the platter stream was being thrown away, from a capture with zero USB loss.
Also fixed
- Stall recovery. A permanently stalled control pipe used to report "connected" forever while delivering nothing. It now resets the device and relaunches. Plus a fix for that detector firing on an idle deck.
- Frame terminator no longer parsed as MIDI (it fabricated a message after every 2-byte one).
--replay FILE— play a recorded capture into CoreMIDI with no hardware attached.--legacy-parserestores the old behaviour for A/B testing.--diag-jogno longer reports a stopped-and-restarted platter as multi-second jitter, and its implied-clock figure now divides by the window that actually elapsed.
Verification
make corpus grades the parser against 80,839 real frames captured from the vendor driver — 12,161 of steady rotation and 68,678 taken while VirtualDJ played and scratched. It runs in CI.
Measured, not yet heard: the numbers are reproducible offline, but nobody has confirmed by ear that they account for the whole symptom. Feedback welcome.
Install
Requires macOS 13.0+, Apple Silicon. Drag OpenV7 to Applications.
First launch is blocked — the app isn't notarized. Approve once in System Settings ▸ Privacy & Security ▸ Open Anyway. (Control-click ▸ Open was removed in macOS 15.)
Full detail in docs/PROTOCOL.md.