This post has been republished via RSS; it originally appeared at: Windows Blog.
MIDI 2.0 (and enhanced MIDI 1.0!) comes to Windows 11
Non-musicians sometimes associate MIDI only with .mid music files, or with the late 80’s General MIDI sound sets. But it is so much more than that. For musicians, MIDI is essential to everything from instrument synchronization to stage lighting and effects control, to sequencing, beat making and more. MIDI is the glue that helps make electronic music possible.MIDI 1.0
At the 1983 NAMM Show, Roland and Sequential Circuits showcased a new open cross-company digital standard for connecting two or more musical instruments together, ushering in an era of electronic music production using MIDI as we have now known and loved it for decades. The initial MIDI specification was quite simple: short 1-3 byte messages over a DIN serial cable, running at a speed of about one millisecond per message, chained together so that a five note chord would take approximately 5ms to send – a perfectly acceptable speed given the low-cost technology available at the time. Over the years, MIDI has been extended to include features like the General MIDI standard for deterministic instruments in music playback, SMF (the Standard MIDI File, or “.mid” music file), richer expression using the MPE (MIDI Polyphonic Expression) standard, basic device identity over SysEx, new transports like USB, Bluetooth LE, RTP and even TRS (Tip-ring-sleeve audio cables). Despite the ubiquity of MIDI 1.0, MIDI can be even better given everything we’ve learned since 1983. MIDI 1.0 lacks good standardized bidirectional discovery mechanisms for helpful functions like discovering the capabilities and patches available in a MIDI device. Note velocity and many other control parameters are limited to a range of 0-127 without the use of RPN/NRPN or SysEx. MIDI 1.0 doesn’t fully support rich note expression without using most or all of the available channels for MPE. It doesn’t contain good provisions for orchestral articulation. And MIDI 1.0 lacks good standards for identifying a MIDI controller or sound source as, for example, a piano or organ, and providing standard controller mappings and velocity curves that just work. And, of course, it sometimes has real-world speed caps largely inherited from the original DIN cable 31,250 bits per second standard. Any musician who has used a MIDI controller or MIDI-aware software is well-aware of these features and limitations in MIDI 1.0.Enter MIDI 2.0
In 2020, the MIDI Association published the first version of the UMP (Universal MIDI Packet) and MIDI 2.0 Protocol specification. The specification had some key updates made in 2022/2023 to better support discovery and fallback approaches, and also to include recommendations from Microsoft and other member companies. MIDI 2.0 natively offers bidirectional communication, automatic device discovery and protocol setup, uncapped speeds, intentional high-resolution controllers (no 0-127 limitation or multi-message workarounds for larger values), per-note articulation, self-describing devices, and a decoupling of the protocol from the transports enabling easier adoption of new transports like Network MIDI 2.0 as they emerge. Despite the limitations in MIDI 1.0, and all the plugin and other workarounds in digital audio workstations (DAWs) to get around them, MIDI 1.0 has become the single most important standard in music production, and is not going away. In a MIDI 2.0 future, it’s still incredibly important for each operating system to have robust and stable MIDI 1.0 support.Announcing General Availability of Windows MIDI Services, with support for MIDI 1.0 and 2.0
We’re excited to announce that Windows 11 now supports both MIDI 1.0 and MIDI 2.0 through Windows MIDI Services! We’ve been working on MIDI over the past several years, completely rewriting decades of MIDI 1.0 code on Windows to both support MIDI 2.0 and make MIDI 1.0 amazing. This new combined stack is called “Windows MIDI Services.” The Windows MIDI Services core components are built into Windows 11, rolling out through a phased enablement process now to in-support retail releases of Windows 11. This includes all the infrastructure needed to bring more features to existing MIDI 1.0 apps, and also support apps using MIDI 2.0 through our new Windows MIDI Services App SDK. All of your existing MIDI 1.0-aware software just got even better, without needing any app updates!New Windows MIDI Services core features
Windows MIDI Services provides a lot of requested features, and importantly, sets us up to provide even more of what you want in the future. This release is focused on ensuring MIDI 1.0 runs smoothly on Windows, while baking in the infrastructure for MIDI 2.0.Use a MIDI device from multiple apps
The No. 1 request for MIDI in Windows has been to allow multiple apps to use the same MIDI port/device at the same time. We call that “multi-client.” Until now, this was only possible with custom vendor drivers. Now, every MIDI 1.0 port and MIDI 2.0 endpoint is multi-client, regardless of the driver or API used. In most cases, vendor-specific MIDI drivers are no longer needed or recommended, although they will still work if they are kernel streaming drivers. Multi-client is available for all MIDI 1.0 and MIDI 2.0 apps and devices.
Customize your MIDI endpoints
The second biggest request for MIDI was to provide better MIDI 1.0 port names. With this release, you have control over the names:
- Use classic API names, providing backwards compatibility with port names stored in DAWs and music files. This is the default, and avoids you from having to reconnect ports in apps and DAWs.
- Use new-style names, often provided by devices which enable renaming MIDI ports on-board or with settings software. (These names use the USB iJack strings when provided.)
- Provide completely custom names for MIDI 1.0 ports and MIDI 2.0 endpoints.
Connect apps with built-in loopback and app-to-app MIDI
Another piece of feedback we’ve heard is that app-to-app MIDI should just be built-in, and should be supported on x64 as well as Arm64 PCs.
Windows MIDI Services now includes built-in loopback support, so that apps can communicate with each other, regardless of which API or SDK they use. Even WebMIDI pages in the browser can work with your loopback endpoints, all without any additional drivers or installs. When you first run the MIDI and Musician Settings app, you’ll be prompted to complete your MIDI setup, including optionally adding a set of standard loopback endpoints.
Taking it beyond simple loopbacks, we also natively include the ability for an application to be a full MIDI 2.0 “device,” complete with support for MIDI 2.0 concepts, protocol negotiation and discovery. Like other MIDI 2.0 endpoints, these are automatically translated and made available to classic MIDI 1.0 APIs at a MIDI 1.0 level.
You can create your own loopback endpoints using the MIDI Settings app in the upcoming Windows MIDI Services Tools download. The loopbacks are available to all MIDI 1.0 and MIDI 2.0 applications, without any additional drivers.
Use any device with any app with automatic MIDI 2.0 translation and scaling
High-resolution MIDI 2.0 UMP devices like the Yamaha Montage M and MODX, Roland A88 mk2, Waldorf Quantum and Iridium, Studiologic SL mk2, and more in MIDI 2.0 mode can be used by any MIDI 1.0 or MIDI 2.0-aware app on Windows, with apps using the new SDK having access to high resolution data, new message types, incoming and outgoing timestamps/scheduling, and other MIDI 2.0 features, and MIDI 1.0-aware apps seeing the downscaled values. We handle all the required protocol translation and value scaling inside the MIDI Service so you don’t need to think about the type of device you connect to, or what its capabilities or protocols are.
Translation and scaling is an automatic process in the service, and is available to all MIDI 1.0 and MIDI 2.0 applications.
https://www.youtube.com/watch?v=Oa6_pVveqPI
Get tighter message timing with timestamps and scheduled messages
Tight timing of MIDI messages has always been a priority for MIDI users. To enable apps to provide better timing when sending messages, we now support timestamps for both incoming and outgoing messages, accurate to under a microsecond (1/1,000,000 of a second). In addition, outgoing messages may be scheduled for sending to the driver at a specific time dictated by the timestamp. We will continue to tune the algorithm for this feature through subsequent updates, with the goal of making the timing as tight and deterministic as possible, across all MIDI devices. Timestamps and message scheduling are both available to apps using the new Windows MIDI Services app SDK.Use new devices with the new MIDI 1.0 and MIDI 2.0 USB class driver
We’ve kept the older usbaudio.sys driver and fixed some small bugs in it to make it even better. At the same time, we’ve pulled in the AmeNote-developed and AMEI-provided USB MIDI 2.0 class driver usbmidi2.sys. This new driver, developed with Microsoft guidance, follows best practices for power management, has a faster communication channel to the new MIDI service, and supports both MIDI 1.0 and MIDI 2.0 devices. By default, most MIDI 1.0 devices will continue to use the older driver, to ensure compatibility, but can be manually assigned to the new driver if/when desired. All of these new features combined give Windows 11 a fantastic unified MIDI 1.0 and MIDI 2.0 stack that is great for musicians today, and for the next 40+ years.Tools and MIDI scripting
In the coming months, we’ll release the updated MIDI App SDK Runtime and Tools package, which includes the MIDI Console, MIDI Settings app, PowerShell projections for scripting MIDI and much more. These tools make it easy for you to create loopback endpoints, customize your MIDI endpoint and port names, and much more.
If you are adventurous and want preview versions of these tools today, they are available on our GitHub repo and also through WinGet.
`winget install Microsoft.WindowsMIDIServicesSDK`
Once Windows MIDI Services is enabled on your PC, you only need to install the SDK Runtime and Tools package for your CPU.
For everyone else, look for an announcement at https://aka.ms/midi.
Developed in the open, with partners and the community
With Windows MIDI Services, we took an open approach to development, with work happening on GitHub, with a permissive open source license. This enabled the community of developers and musicians to follow along and contribute, and ensured the entire process has been transparent. We could not have done this without the direct input and involvement of our partners and customers, especially on GitHub and Discord. Partner hardware and software companies, and interested members of the community, all contributed to the device and software testing, prototyping, bug fixing and feature enhancements. In-particular, we’d like to call out AMEI (Association of Musical Electronics Industry Japan) for their incredible work in testing, and for their donation of the AmeNote-developed USB MIDI 2.0 driver. We’d also like to thank all the other partners involved in development and testing, including Yamaha, Roland, Steinberg, Bremmers Audio, PACE/JUCE and many more.How to provide feedback
We’d love to continue to hear from you.- Developers or anyone with GitHub can open issues or contribute directly on GitHub via our repo. This is also where anyone can go to find our up-to-date list of known issues.
- Blog post with known launch issues and workarounds.
- Everyone should join the discussion on Discord.
