Working with the Opus Quad

Even though the Opus Quad does not attempt to truly implement the Pro DJ Link protocol, it is now possible to use many Beat Link Trigger features with that hardware thanks to a lot of work by @cprepos and Kyle Awayan.

The key to getting useful results with the Opus Quad, since it is unable to send most of the metadata that BLT needs, is to create metadata archive files for any USBs that you want to use, and attach them to the appropriate USB slots in the Player Status window.

We can’t yet support running BLT and an Opus Quad with tracks loaded over Link from Rekordbox or Rekordbox Mobile. We hope this can be solved someday, but it will require some additional technical breakthroughs.

I’m frankly amazed that we can do this at all, but if you want to work with this hardware you need to understand that it is not going to be seamless or automatic the way working with Pro DJ Link hardware is; you have to do some prep work in advance, update that work as you add more tracks that you want to work with, and understand limitations and make choices about which tradeoffs you want to make.

Creating Metadata Archives

This falls under the category of preparation and maintenance work that you need to undertake. One major feature missing from the Opus Quad is the ability to serve database and track metadata over the network. This makes sense because it doesn’t expect to talk to other players! But Beat Link Trigger needs that information to operate. So it’s up to you to make it available, and the way to do that is to give BLT a metadata archive covering all tracks you want to use.

To create a metadata archive of a USB that you want to use with the Opus Quad and Beat Link Trigger, start by mounting that USB on the computer running BLT. Then choose File  Archive Metadata in the Triggers window.

Archive Metadata

This brings up a window where you can navigate to the mounted USB drive:

Choose media to archive

Once you have selected the mounted media, click Choose Rekordbox Media. That opens a new window where you can choose where to save the archive:

Create metadata archive

Navigate to where you would like to save it, choose a name for it, and click Create Metadata Archive. The archive will be created, which may take a while, depending on how many tracks are on the USB drive. A progress bar will allow you to see how the export is going, and cancel it if you change your mind:

Archive creation progress

Once you have archives created for all the USBs you want to use with your Opus Quad, you can proceed to the next step.

You will need to update your metadata archives whenever you add or edit tracks on the USB. To do that, follow the same steps above, choose the existing archive that you want to update at the step where you are specifying where it should be saved, and respond Yes to the dialog that asks you if you want to replace the existing file.

Attaching Metadata Archives

Whenever you insert a USB into the Opus Quad, you need to attach the corresponding metadata archive for that slot number. To do that, use the gear popup menu corresponding to that slot in the Player Status window (this uses the same user interface elements that would be used to tell players to load or play tracks with other hardware):

Attach metadata archive

Navigate to where you saved your metadata archives, choose the correct one, and click Attach Metadata Archive:

Choose metadata archive to attach

This will enable Beat Link Trigger features to operate when you play tracks from that USB. If you ever swap out the USB in the Opus Quad’s slot, you will need to go through this process to switch to the correct archive for the new USB that you have inserted. If you have removed a USB and do not plan to insert a new one, choose Remove Metadata Archive in the gear menu for that slot.

Make sure you are using the gear menu for the correct slot that you are inserting or removing USBs in the Opus Quad, and that you choose correct and up-to-date metadata archives for those USBs, or track matching will not work correctly! And as noted below you are best limiting yourself to putting no more than one USB at a time into the Opus Quad.

Limitations

There are some fundamental ways in which working with the Opus Quad can’t be as good as working with a system designed to interoperate over Pro DJ Link.

Lack of Beat Packets

The Opus Quad does not send beat packets, which are the only way (without high-precision position packets, which are also not sent) to actually know exactly what part of a track is currently being played. This means that BLT is can be up to 200 milliseconds ahead of or behind the actual playback position, which is not particularly accurate. This is the same problem faced during reverse play with players older than the CDJ-3000, but it is a problem even during normal play on the Opus Quad.

This also means that Beat Expressions will never run with an Opus Quad, nor will Started On-Time expressions in show cues, all cues will always be considered to have started late. And if you are using Carabiner to sync to Ableton Link, only tempo can be synced, it is not possible to align beats or bars.We are working on this.

USB Slot Limitations

Unfortunately, the Opus Quad does not report the USB slot that a track was loaded from, so we have to infer that by comparing PSSI (phrase analysis) data between what was received through rekordbox lighting packets and what is in the Metadata Archive. We hope that different tracks will not ever have identical PSSI data, but can’t guarantee that. For this reason, it is safest to only use a single USB at a time in an Opus Quad while working with Beat Link Trigger.

ID Drift

The IDs that the Opus Quad reports for tracks are Device Library Plus IDs, but Beat Link can only read the classic Device Library. Generally, those databases start out using the same IDs for the same track, but over time as you edit your collection, they can drift apart. This can lead to problems recognizing tracks even if you are only using a single USB, although we hope that PSSI matching is robust enough to make that a rare occurrence. The workaround described below will eliminate this problem if you are able to use it.

Built-In USB Network Problems

The Opus Quad includes an embedded USB Ethernet adapter, so that you can connect it to your computer with just a USB cable, and have them send IP packets to each other that way. Unfortunately, this adapter seems to be unreliable. If you try to use that as the mechanism by which BLT talks to the Opus Quad, some users have reported that the connection drops from time to time.

To avoid that, connect the Opus Quad to your computer with a real Ethernet cable instead of the USB cable.

If you must also connect them via USB cable (for example, you want to use the USB audio interface in the Opus Quad), you will end up with multiple network paths for the Pro DJ Link packets, which is also a problem. So you will need to disable the USB network interface associated with the Opus Quad. On macOS, you can do that by watching in the Network section of the System Settings to see which interface activates and deactivates when you connect and disconnect the Opus Quad, and then using the Make Inactive context menu to disable that interface. On other operating systems you will need to perform the equivalent actions.

A Potential Workaround

As noted above, the Opus Quad works with Device Library Plus, but Beat Link Trigger only knows how to parse classic Device Library databases.

We think that by using the SQLite Device Library Plus database to reliably match track IDs to track metadata will allow us to go back to the normal BLT approach of posing as a CDJ, rather than rekordbox, and obtain high priority position packets from the Opus Quad. (Using the newer database is a requirement, because in this mode we no longer receive the rekordbox lighting packets which enable track matching through PSSI data.) This would allow us to follow the player position closely enough that we could fake the beat packets, and enable some important Beat Link Trigger features like beat expressions and beat/bar sync with Ableton Link.

This is an area of active research, but is not far enough along to make it into the 8.0 release.

Working With Device Library Plus

Device Library Plus uses SQLite, an open-source database, so we should be able to work with it, but the database is encrypted, which prevents that.

If you know the passphrase needed to decrypt the exported database, you can provide that to Beat Link, allowing it to access the database that the Opus Quad is actually using, and improving its track matching abilities. The future work we are exploring to synthesize fake beat events, by putting the Opus Quad in a mode where it sends precise position packets, also depends on access to this database.

If you don’t know the database passphrase, the Deep Symmetry projects are not able to help you find it. Please do not ask for help on this or discuss ideas about it in the project discussion areas; those are violations of the community code of conduct.

To tell BLT to use the Device Library Plus databases in your metadata exports, add a line like this to your Global Setup expression:

(.setDatabaseKey
 (org.deepsymmetry.beatlink.data.OpusProvider/getInstance)
 "database passphrase goes here")

Once you have this set up correctly, when you mount metadata archives, instead of seeing lines like this in your log:

Attached DeviceSQL metadata archive /Users/fred/usb.blm for slot 1.

you will instead see this version (note the replacement of DeviceSQL by SQLite):

Attached SQLite metadata archive /Users/fred/usb.blm for slot 1.

After you have done this, if you were online with the Opus Quad at the time, you should take BLT offline for at least twenty seconds, because when you go back online it will use a different mechanism to communicate with the Opus Quad, and it takes some time offline for the Quad to be ready to do that.

Once the key has been set, even if you take that line out of your Global Setup expression, or open a different trigger configuration, the setting will remain, because the OpusProvider stores it in its own preferences. To turn off this mode of operation, use a similar expression, but pass nil as an argument instead of a passphrase string.