Skip to content
mrbrainzPublic

About

Use a Rane SL3 DVS interface on Apple Silicon Macs with Mixxx

Resources

Stars

1 star

Watchers

1 watching

Forks

Latest commit

 

History

36 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OpenSL3

A Core Audio driver for the Rane SL3 DVS interface on Apple Silicon Macs, with no kernel extension and no Serato software.

Rane's SL3 driver is an Intel-only kext, and the last Scratch Live releases are Intel-only too, so the SL3 doesn't work on Apple Silicon Macs. This project's driver makes the SL3 show up as a normal audio device again, so open-source DJ software such as Mixxx can use it for timecode control.

Status: working. All three decks play in Mixxx with Serato control vinyl and CDs, at 44.1 or 48 kHz.

What the driver is

SL3Device.driver is a Core Audio plug-in (an AudioServerPlugIn, the same kind of driver as BlackHole or Loopback). macOS loads it into its own audio service, where it talks to the SL3 over USB through Apple's IOUSBHost framework, all in user space. It publishes one device, Rane SL3:

  • 6 inputs and 6 outputs, three stereo pairs, one per deck;
  • 44,100 or 48,000 Hz, running on the SL3's own clock (no resampling);
  • about 18 ms of input and 22 ms of output latency, plus your app's buffer;
  • the decks switch from analog thru to USB audio while an app uses the device, and back to thru when the last app stops;
  • if the SL3 is unplugged while an app plays, the decks fall back to thru and audio resumes by itself when it is plugged back in.
 turntables / CDJs                              mixer
        │                                         ▲
        ▼                                         │
   ┌─────────┐   USB    ┌──────────────────┐   Core Audio
   │   SL3   │ ◄──────► │ SL3Device.driver │ ◄──────────► Mixxx
   └─────────┘          └──────────────────┘

How the SL3's USB protocol works is documented in docs/PROTOCOL.md.

Requirements

  • An Apple Silicon Mac with macOS 12 Monterey or later (tested on macOS 27). Intel Macs should also work, but haven't been tested.
  • Mixxx or other DJ software that supports timecode control.

Install

Requires macOS 12 or later. Quit any audio apps first.

  1. Download the latest OpenSL3-x.y.z.zip from Releases.
  2. Unzip it and remove the download quarantine, so macOS will load the driver:
    cd ~/Downloads
    unzip OpenSL3-x.y.z.zip
    xattr -dr com.apple.quarantine SL3Device.driver
    (If your browser already unzipped it, skip the unzip line.)
  3. Move the driver into place and restart the audio service:
    sudo mv SL3Device.driver /Library/Audio/Plug-Ins/HAL/
    sudo chown -R root:wheel /Library/Audio/Plug-Ins/HAL/SL3Device.driver && sudo killall coreaudiod
    Restarting the audio service (coreaudiod) makes it load the driver; sound on the Mac stops for a moment.
  4. Plug in the SL3. Rane SL3 appears in Audio MIDI Setup and in your apps.

Upgrade

Same as installing, but remove the old driver first. Moving the new one onto an installed driver would put it inside the old bundle rather than replacing it. After steps 1 and 2:

sudo rm -rf /Library/Audio/Plug-Ins/HAL/SL3Device.driver
sudo mv SL3Device.driver /Library/Audio/Plug-Ins/HAL/
sudo chown -R root:wheel /Library/Audio/Plug-Ins/HAL/SL3Device.driver && sudo killall coreaudiod

Uninstall

sudo rm -rf /Library/Audio/Plug-Ins/HAL/SL3Device.driver && sudo killall coreaudiod

Build from source

Needs the Xcode command line tools (xcode-select --install):

make device-plugin
sudo rm -rf /Library/Audio/Plug-Ins/HAL/SL3Device.driver
sudo cp -R build/SL3Device.driver /Library/Audio/Plug-Ins/HAL/ && sudo killall coreaudiod

Always remove the installed driver first: copying over it rewrites the file in place, and macOS then rejects it on a code signature mismatch.

Mixxx setup

Preferences → Sound Hardware: sound API CoreAudio, sample rate 44,100 Hz (recommended, see below), and Rane SL3 for every input and output:

Output Channels Input Channels
Deck 1 1–2 Vinyl Control 1 1–2
Deck 2 3–4 Vinyl Control 2 3–4
Deck 3 5–6 Vinyl Control 3 5–6

Set the audio buffer as low as plays without dropouts, for example about 5 ms.

Don't add another sound card (headphones, a control CD player) to the same Mixxx setup without drift correction: two clocks cause distortion and pitch jumps.

Preferences → Vinyl Control: set the vinyl type for each deck (for example Serato CV02 Vinyl, or Serato CD for the control CD). Turn on vinyl control on each deck, in ABS mode for needle dropping. Deck 3 needs a skin that shows four decks.

Use 44,100 Hz in Mixxx. Mixxx 2.5.6 can start its vinyl control at 44,100 Hz even when the sound hardware is set to 48,000 Hz. Timecode then reads about 8% slow, so tracks play pitched down. Clicking Apply in Preferences → Sound Hardware after Mixxx starts restarts vinyl control at the right rate, but at 44,100 Hz the problem can't occur.

Sample rate

Choose 44,100 or 48,000 Hz in Audio MIDI Setup or in your app. The driver remembers the choice and sets it on the box every time audio starts. (The SL3 keeps its rate across power cycles, so a box last used at another rate is corrected automatically.)

Troubleshooting

  • Rane SL3 doesn't appear: check the SL3 is plugged in, then restart the audio service with sudo killall coreaudiod. An unplugged SL3 is hidden until it is back.
  • An app lost the device after an unplug: apps that were not playing when it was unplugged, such as Mixxx when idle, only see it again after a restart of the app.
  • Silence on the decks: only one program can own the SL3; stop sl3bridge or any of the tools below.
  • Logs: log stream --predicate 'subsystem == "sl3.device"' shows the driver's messages, including clock and USB statistics every 2 seconds while it runs.
  • Tracks pitched down about 8% in Mixxx: Mixxx's vinyl control is running at 44,100 Hz while the device runs at 48,000 Hz. Set Mixxx to 44,100 Hz (see Mixxx setup).
  • The audio service (coreaudiod) uses lots of CPU and apps hang, even with the driver removed: after repeated restarts of the audio service, Apple's AirPlay helper can get stuck re-registering with it. Restart the helper with sudo killall -9 AirPlayXPCHelper (macOS relaunches it).
  • Anything going wrong with the audio service: uninstall with the command above.

Tools

Diagnostic tools, built with make (needs Homebrew with brew install libusb pkg-config). None of them is needed to play.

Tool Purpose
sl3plugtest Load SL3Device.driver outside Core Audio, check its properties and cycle IO; hotplug SECONDS and rate HZ SECONDS modes. Built by make device-plugin
sl3rec Record from a Core Audio device for a few seconds and report levels, dominant frequency, channel correlation and callback timing
sl3tone Play a quiet sine on all outputs of a Core Audio device
sl3loop Measure round-trip latency through a loopback cable
sl3ctl Read and write the box's control bytes, set the sample rate (set-rate), and send the heartbeat by hand
sl3probe Print the device descriptors and record the SL3's inputs to a WAV file. Never writes to the control channel
sl3play Play a quiet test tone on output channels 1–2
sl3usbtiming Measure capture completion timing with IOUSBHost or libusb; read-only

Tools that talk to the SL3 directly need it to themselves: quit apps using Rane SL3 first. The SL3 keeps its control bytes across power cycles, so only use sl3ctl set-control when you know what a byte does.

The bridge

Before the driver, this project used sl3bridge, a command-line program that passes the SL3's audio through a BlackHole loopback device. The driver replaces it; it is documented in docs/BRIDGE.md.

Project layout

plugin/SL3Device.m    the Core Audio driver
plugin/SL3Probe.m     minimal plug-in that only checks USB access
src/                  the bridge (sl3bridge)
tools/                diagnostic tools
docs/PROTOCOL.md      SL3 USB protocol notes
docs/BRIDGE.md        the bridge
docs/usb-descriptors.txt

Contributing

Issues and pull requests are welcome. These would help most:

  • Testing with other SL3 units, firmware versions, Intel Macs and DJ software.
  • Lower latency.
  • Decoding the remaining control bytes and notifications (see the open questions in docs/PROTOCOL.md).

Please keep each pull request focused on one change, and describe how you tested it on real hardware.

License

GPL-3.0-or-later.

Disclaimer

This is an independent project. It is not affiliated with or endorsed by Rane or Serato. "Rane", "SL3", "Serato" and "Scratch Live" are trademarks of their respective owners. The project contains no code or files from Rane or Serato.

About

Use a Rane SL3 DVS interface on Apple Silicon Macs with Mixxx

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages