Virtual midi ports, Windows

Using the Setup Tool for Windows MIDI Service, you can create two types of MIDI ports, and it is important to understand the differences between them. In the Setup Tool, you will find images and texts explaining the two types of ports:

This is a unidirectional port, equivalent to a loopMIDI port. If your goal is to replace loopMIDI without reconfiguring the plugin's port settings, this is the port type you should create.

This is the port type I recommend for new installations; it is "future proof" because it is MIDI 2.0 compatible. The plugin now uses MIDI 1.0, but if MIDI 2.0 features are added in future versions, you'll be ready to go if you use MIDI 2.0-compatible ports.

Port Naming

The plugin doesn't require specific port names. After installing, it uses the default names "StreamDeck2Daw" and "Daw2StreamDeck," but you can create ports with any names you prefer and connect them in the plugin. These are my recommendations:

  • For unidirectional mirroring ports, I recommend using port names that specify both endpoints and the direction, such as:
    • Use StreamDeck2Daw and Daw2StreamDeck for remote control via, e.g., Control Change. In your DAW, these ports should not connect to any tracks. In Cubase/Nuendo, do not include StreamDeck2Daw in "All MIDI In".
    • Use StreamDeck2DawTrack and DawTrack2StreamDeck to manage Note, Program Change, Sysex, and articulation messages that need to reach the tracks. In Cubase/Nuendo, include StreamDeck2DawTrack in "All Midi In."
    • Use Mackie2Daw and Daw2Mackie to manage Mackie Control communication. In your DAW, these should not be connected to any tracks. In Cubase/Nuendo, Mackie2Daw must not be included in "All Midi In". These ports should be used only for the Mackie Control-to-plugin communication. If you also have a real Mackie Control, it needs its own ports — the Mackie Control protocol does not permit two devices to share the same Midi ports.
  • For bidirectional ports, I recommend using port names that specify the endpoints without indicating direction. The Windows MIDI Service Setup Tool in "Quick Setup" mode adds the suffixes "(A)" and "(B)" to the endpoints, and I suggest using (A) for StreamDeck and (B) for your DAW (or whatever you have as the other endpoint).
    • Use StreamDeck_Daw for remote control via, e.g., Control Change. In your DAW, these ports should not connect to any tracks. In Cubase/Nuendo, do not include StreamDeck_Daw in "All MIDI In".
    • Use StreamDeck_DawTrack to manage Note, Program Change, Sysex, and articulation messages that need to reach the tracks. In Cubase/Nuendo, include StreamDeck_DawTrack in "All Midi In."
    • Use Mackie_Daw to manage Mackie Control communication. In your DAW, these should not be connected to any tracks. In Cubase/Nuendo, Mackie_Daw must not be included in "All Midi In". These ports should be used only for the Mackie Control-to-plugin communication. If you also have a real Mackie Control, it needs its own ports — the Mackie Control protocol does not permit two devices to share the same Midi ports.

Port Connections

This is a very important configuration detail that depends on the port type you will use.

  • For unidirectional ports (loopMidi, and Windows MIDI 1.0 ports), you need to use separate ports for input and output. One port should handle output from Stream Deck to the DAW input, and the other port should handle output from the DAW to the Stream Deck input.
  • For bidirectional ports (Windows MIDI 2.0 ports), you must use the same port on each endpoint, such as suffix (A) for both input and output on the Stream Deck, and suffix (B) for both input and output on the DAW.

To set up the new Windows MIDI Service, you need to install a Setup tool, which, as of this writing, is only available as an unsigned beta app.

With the latest version of the Setup tool (2.38), you can create "MIDI 1.0" ports, which is necessary if you want to replace loopMIDI ports without reconfiguring the plugin ports.

Enabling developer mode

The tool is, as mentioned, an unsigned beta app, and to install it, you must temporarily enable "developer mode" in Windows.

Go to Settings - Advanced - Developer Mode and turn it "On". You will see a confirmation popup where you need to click "Yes". The only purpose of this is to allow the installation of the unsigned beta app; you can disable developer mode afterward if you want.

Installing the setup tool

To download the setup tool you need to browse to the following page:

https://github.com/microsoft/MIDI/releases

Under the heading "App SDK and Tools Release Candidate 3," scroll down slightly to find "Assets," and click on the text to open the assets section. Then, click on the marked links to download the tool for X64.

Once downloaded, run first the loopback file, then the SDK file. You will see a pop-up window that says "Windows protected your PC." You get this window because the app is not signed. Click on the "More info" link to get the "Run anyway" button. Click on "Run anyway" to finish installing the tool.

If you are using Cubase or Nuendo, this is my recommended configuration of Midi ports:

  • Encircled in red are the settings I consider mandatory to avoid hard-to-diagnose midi conditions.

    • The three ports StreamDeck2Daw, StreamDeck2DawTrack and Mackie2Daw need to be visible as inputs so you can select them wherever needed.

    • The three ports Daw2StreamDeck, DawTrack2StreamDeck and Daw2Mackie need to be visible as outputs so you can select them wherever needed.

    • Only the StreamDeck2DawTrack port should be marked for In "All Midi Inputs"; the other ports are not meant to be sent to tracks, so if they are marked to be in "All Midi Inputs", you will probably get unexpected things happening now and then.

  • Encircled in green are the settings that I recommend.

    • The three ports StreamDeck2Daw, StreamDeck2DawTrack and Mackie2Daw do not need to be visible as outputs; they should never be used that way, so having them visible as outputs allows you to select them by mistake.

    • The three ports, Daw2StreamDeck, DawTrack2StreamDeck and Daw2Mackie, do not need to be visible as inputs; they should never be used that way, so having them visible as inputs allows you to select them by mistake.