MIDI output from DJay on a virtual MIDI bus

NOTE: Please use the search function above before posting to avoid creating duplicate topics.

  • Device model (e.g. 2020 iPad Air 4th Gen):PC with AMD Ryzen 9 7940HX
  • Version of operating system (e.g. macOS 14.4.1): Windows 11 Home, build 10.0.26200
  • Version of djay (e.g. 5.1.2):5.6.4
  • Hardware/controllers used (e.g. Reloop Mixon 8 Pro):DDJ FLX2 (for output comparison)
  • Hardware firmware version (e.g. 1.0.1):
  • MIDI transport: Windows MIDI Services (Microsoft’s new MIDI 2.0-capable stack), with a
    virtual loopback endpoint named MyBus
  • Please consider sharing a short video or screenshots to help clarify your question

YOUR QUESTION:

  1. I’m building a third-party virtual DJ Controller tool that drives djay Pro via MIDI and
    need bidirectional communication. I’ve got input working but cannot get djay to emit any
    MIDI on the bus, and I’d love some guidance on whether this is supported and, if so, how
    to enable it.

    1. Background on the MIDI environment

      I am using Microsoft’s new Windows MIDI Services (Windows MIDI and Musician Settings PREVIEW), which includes a built-in mechanism for creating virtual loopback endpoints. Our endpoint is called MyBus and is visible to all MIDI applications on the system. I monitor it using the Windows MIDI Settings app, which has a built-in terminal monitor that shows all live traffic on the bus.

    2. What works: MIDI input into DJay

      • djay Pro recognizes MyBus and lets me bind controls to it via a .djayMidiMapping
        file.
      • When my app sends MIDI into MyBus (e.g., CC1 on Ch5 mapped to mixer.crossfade), djay reacts correctly — the crossfader moves in djay’s UI as expected.
      • The Windows MIDI Settings monitor confirms the inbound traffic on the bus.
    3. What doesn’t work: MIDI output from Djay

      I cannot observe any MIDI output from djay on MyBus, in any scenario:

      • Moving controls in djay’s UI produces no MIDI on the bus.
      • Per-binding output = { midiChannel = N; } blocks in the mapping file appear to have no effect.
      • Even with the outputs = ( … ) top-level array used in the bundled FLX2 mapping for
        paths like turntable1.loadingSuccess, I see no traffic.
    4. Cross-check with the FLX2

      To rule out my virtual bus as the cause, I plugged in the DDJ-FLX2 (which has a bundled, AlphaTheta-class mapping with customClassName = AlphaThetaDDJFLX2 and many output = { …} blocks including controlType = “button-blinking”) and monitored its MIDI bus. Result:

      • The controller emits MIDI into the bus correctly when I press buttons or move knobs
        (i.e., djay receives MIDI from the controller).
      • djay does not emit any MIDI back onto the bus, even though the controller’s LEDs
        clearly reflect djay’s state — the play button goes solid when playing and switches to a blinking state when paused.
      • I’m thinking DJay is communicating with the FLX2 via HID and that’s why I am not seeing any MIDI output even though the FLX2 mapping file includes output keys. Is that a safe assumption?

Summary of my question:

Is there a way to get djay Pro to actually emit MIDI output onto a bus. specifically to a
generic virtual MIDI endpoint like MyBus, and if so how do I accomplish that?

super simple mapping file with just the crossfader mapped, input works, no observable output on the bus (my input and output channels are purposely different to control crosstalk):

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">

<plist version="1.0">

<dict>

    <key>controls</key>

    <array>

    <dict>

        <key>keyPath</key>

        <string>mixer.crossfade</string>

        <key>midiChannel</key>

        <integer>4</integer>

        <key>midiData</key>

        <integer>1</integer>

        <key>midiMessageType</key>

        <integer>3</integer>

        <key>output</key>

        <dict>

        <key>midiChannel</key>

        <integer>12</integer>

        </dict>

    </dict>

    </array>

    <key>editor</key>

    <string>(null)-5.6.4</string>

    <key>endpointName</key>

    <string>MyBus</string>

    <key>schemeVersion</key>

    <integer>1</integer>

    <key>version</key>

    <integer>0</integer>

</dict>

</plist>

Thanks in advance to anyone who can offer insight

1 Like

Hi @FlatLine, djay is looking for pairs of MIDI input/output ports to do bidirectional communication with MIDI devices. We usually look for the ports if they come from the same USB device etc. to match up in/out ports. Perhaps virtual devices don’t have any USB identifiers. Maybe try ensuring that both ports have the same name so djay can find them as a pair?

@Slak_Jaw, Thank you for looking into this and trying to help. Hopefully the following will help us to figure this out:

MyBus is a basic loopback MIDI endpoint . It has a device ID two associated MIDI 1.0 API Ports, a source/input port and a destination/output port. Screenshots below of the endpoint and the associated MIDI port’s properties.

As I noted in my original post, DJay recognizes the MIDI endpoint and applies the mapping from the DJayMidiMappingFile. DJay responds to MIDI messages sent over that endpoint, but nothing flows the other way.

Thanks again for your time, it’s appreciated it. Fingers crossed!

Hi again @FlatLine, it might help if we can get the logs from DbgView. Please follow the steps listed below:

  1. Install and run “DebugView” app from Microsoft to access logs from djay Pro: DebugView - Sysinternals | Microsoft Learn
  2. Run djay Pro and reproduce the issue
  3. Upload the logs from DebugView to your Google Drive/Dropbox, enable sharing permissions, then share a link to the files in a DM to me.

Thanks!

Thank you so much, debug info captured and file sent via DM.

You’re welcome @FlatLine. Thanks for the additional info. I will share this with our engineering team to see if they have any suggestions.