[sdiy] MIDI Clock sync advice

brianw brianw at audiobanshee.com
Mon Mar 11 02:16:48 CET 2024

On Mar 10, 2024, at 3:07 PM, Mike Bryant wrote:
>> 	• Microsoft Windows still does not support all of the original USB-MIDI spec, although Apple macOS does. These limitations have stopped commercial USB-MIDI designers from implementing anything that deviates from the tiny part of the spec that Microsoft supports for USB-MIDI.
> Do you mean multi-client MIDI connections ?  Agreed it's not embedded in Windows but many manufacturers provided support in their drivers and putting it into Windows would break those drivers.

No, I'm not talking about multi-client MIDI connections.

What I'm referring to is the difference between the types of Entities that are available in a USB-MIDI Device. Entities can be MIDI Jacks or Elements. A MIDI Jack is exactly what it sounds like - a physical jack where the user can connect a MIDI cable, and then connect the other end of that cable to some Classic MIDI product. An Element is a different sort of Entity that directly consumes or creates MIDI data. One sort of Element would be an on-board synth that creates audio directly in response to USB-MIDI packets (as opposed to a MIDI Jack that connects to a separate, external Classic MIDI synth via a MIDI cable). Another sort of Element is a control surface with physical controls like knobs, buttons, and faders that directly generate USB-MIDI packets in response to user interaction.

These Descriptor variations allow for different categories of USB-MIDI Devices. A Classic MIDI interface with nothing but MIDI in and MIDI out jacks would only have MIDI Jack Entities defined. A synth or control surface would theoretically only have Element Entities. Combinations are also possible, like a control surface that also has MIDI Jacks as well as front panel controls (the latter is the kind of Device that I designed). The benefit of all of these Descriptors is that the operating system can present a reasonable model of the Device capabilities to the user, so that jacks and controls and synths appear as different things, even though they're all communicating via USB-MIDI packets.

Microsoft Windows only supports MIDI Jack Entities. If a USB-MIDI Device is plugged in that has one or more Element Entity defined, Windows will completely ignore the entire device. Even if the USB-MIDI Device also includes MIDI Jack Entities, the mere presence of an Element Entity makes the entire product invisible as if it were broken. Because of this, all USB-MIDI products have to describe all "Elements" as if they were MIDI Jacks. This basically results in a diminished user experience, because a lot of potential details are lost in the simplification.

I used to work for Microsoft in the Multimedia division, a few decades before I designed my first USB-MIDI Device. When my client reported that the USB-MIDI Device did not work in Windows (I'd only tested the prototype in Mac OS X), I discovered the problem. Despite the Elements being defined correctly, and fully functional with Apple Mac OS X, they had to be removed (converted to MIDI Jacks) in order for Windows to recognize the Device. After shipping this device, I reached out to my contacts at Microsoft about the potential of them enhancing their drivers to support USB-MIDI Class compliant Elements. It turned out that there was someone in their test department who had read the spec and was looking for USB-MIDI Devices with one or more Elements defined so that he could verify functionality. Well, the Catch-22 is that no commercially shipping USB-MIDI product defines an Element, because that would make their product incompatible with Windows. Thus, Microsoft couldn't buy any product off the shelf to test their drivers because none with this feature existed. Basic chicken and egg quandary. I offered to send my prototype firmware over to Redmond, but the timing relative to Windows ship dates didn't work out, so my offer was never accepted.

For all I know, Microsoft eventually found a way to implement and test support for the Element feature of USB-MIDI. It's not difficult to verify if you have software that will display USB Descriptors. I have my doubts that anyone in the industry has shipped a USB-MIDI Device with an Element Entity, because at the very least that product would be unusable by anyone running an old version of Windows (which describes a lot of musicians who have vintage gear and need to run old software).

There are also a few other minor features like Descriptors that provide names for different features. i.e. Not only can the Device distinguish between MIDI Jacks and Elements, but it can give human-readable names to each Entity. Apple displays these names in their MIDI configuration interface, which makes it much easier for users to distinguish between multiple devices that are connected. Microsoft just ignores them - which is at least better than refusing to recognize the entire Device, as happens above.

> Apart from that I believe Apple and Microsoft claim full compatibility with each other, including MIDI-BLE and MIDI-USB, which they should do since they all meet up at Anaheim several times a year to make sure they are.

Yep. Lots of meetings. Microsoft is even one of the five companies that defined USB-MIDI 1.0 ... and yet writing the spec did not help them implement it or even support it fully.

In my experience, every USB-MIDI Device that worked with Windows also works correctly with Mac OS X. However, using certain USB-MIDI features would make a Device incompatible with Windows even though it worked properly with Apple systems. I guess Apple engineers just pay closer attention to the specifications.

Again, things change over time. I can't say what the latest version of Windows supports. But I can guarantee you that vintage versions of Windows do not fully support USB-MIDI. Manufacturers are aware of this and work around Microsoft so you'd never be aware unless you read the spec (or notice the poor user experience).


More information about the Synth-diy mailing list