Skip to content

In-box Preview 12 (Apps and Transports - no new API)

Pre-release
Pre-release

Choose a tag to compare

@Psychlist1972 Psychlist1972 released this 21 Oct 00:08
· 99 commits to main since this release
77af306

In-box Preview 12

This is open to all customers who would like to try out the features and functionality. Installing these components will not break your existing Windows MIDI Services OS-delivered components install.

This release updates the apps and the transports only. There is no new Windows.Devices.Midi2 NuGet package, and Preview 11 is still the API to build against. See API below.

Key items

  • MIDI Settings has a new Configurations window. Switch between setups, such as one for the studio and one for the stage, back them up and restore them, and share one with another PC as a single .midiconfigpack file.
  • Network MIDI 2.0 connections can have named MIDI 1.0 ports (#1284). That's most useful when two Windows PCs connect to each other.
  • Fast controller moves catch up on a slow connection. When Network MIDI 2.0 or RTP-MIDI messages pile up behind a sending speed, Windows skips some in-between controller values so the device catches up. It's on by default, and you can turn it off.
  • RTP-MIDI can keep a device's ports while the device is switched off, so your DAW still finds them.
  • The General MIDI Synth has an Exclusive audio mode, for the shortest delay when you play it live.
  • MIDI Patchbay can use game controllers and joysticks (#1272), and has a new Message converter step.
  • Windows MIDI Sequencer gained a MIDI Mixer, Studio setup, a sound picker for each track, and a lot more.
  • MIDI File Player can slow down, speed up, and transpose a file while it plays.
  • MIDI Troubleshooting and Repair has a DPC latency check, to find the driver behind clicks, pops and dropouts. This is a preview, and so we'd love your feedback on whether or not this is helpful in finding issues. Note: This is not designed as a benchmark, but as a troubleshooting tool when you already notice audio issues.
  • The Tools apps now start on a PC that didn't already have the Windows App Runtime previously installed.

Packages and Installation Instructions

If you are running any of the older rc4 or similar SDK Runtime and Tools, or any of the older preview transports, fully uninstall them from Settings > Apps > Installed Apps before installing anything here.

Install the Tools package to have access to all the in-box tools required to configure endpoints, customize, route MIDI endpoints, create controller surfaces, and much more. Everyone will want this package. The tools are documented on the tools page.

Install the Transports package to have access to preview versions of

  • General MIDI Synth
  • Basic MIDI 1.0 Loopback Transport
  • RTP-MIDI Transport
  • Network MIDI 2.0 Transport
  • Bluetooth LE MIDI Transport

You can turn the individual transports on or off on the Transports page of MIDI Troubleshooting and Repair, which is in the Tools package.

If you installed Preview 11, you don't need to remove it first. Both packages upgrade it in place.


API

Preview 11 is still the current Windows MIDI Services API. Build and test your app against the Windows.Devices.Midi2 NuGet package from Preview 11, version 0.99.92-preview.11. Everything in the Preview 11 release notes about the API, including how you may use and distribute it, still applies.

The Tools package installs a copy of Windows.Devices.Midi2.dll next to the apps, for the apps' own use. Don't build against that copy, and don't copy it into your app. It's an interim build for the tools, and its ABI is not locked, so it can change in any release without notice. An app built against it may fail when the next release, or the version in Windows, replaces it.

This set of release notes only covers the delta from Preview 11. Please refer to Preview 11 and earlier for everything before that.

Installers

Each platform still has two installers, Tools and Transports.

  • Windows MIDI Services Tools (0.99.94-preview.12) adds midi1rtmonitor, a new command-line monitor. See midi1rtmonitor below.
  • The apps now start on a clean PC. In Preview 11, the apps could fail to start on a PC that didn't already have the Windows App Runtime 1.8 from somewhere else, with a message that required components of the Windows App Runtime were missing. The Tools package installed a different version of the runtime from the one the apps needed. The apps now use Windows App SDK 2.5.1, and the Tools package installs that runtime.
  • Windows MIDI Services Transports (1.0.43-preview.12) has the same five transports as Preview 11. Its installer now only changes the registry entries for the transports it installs. Before, it also took over the permissions for COM registrations that Windows keeps for its own MIDI components. Windows locks those so that nothing else can change them, and the installer now leaves them that way.

Transports

Transport package version for this release is 1.0.43-preview.12. (The preview numbers for the transports and apps are now aligned)

General MIDI Synth

Exclusive audio mode

Audio output in MIDI Settings has a new choice, Exclusive. In shared mode, the synthesizer's sound goes through the Windows audio mixer with every other app's sound, and that takes time. Exclusive mode skips the mixer, so you hear each note sooner. That matters most when you play the synth live from a keyboard.

  • While the synth plays, and for a few seconds after, no other app can play sound through that audio device. If you listen to music or join calls on the same device, stay with one of the shared settings.
  • If the synth can't take the device, because another app already has it or Windows is set not to allow it, the synth plays in shared mode so you still hear it. It tries exclusive mode again the next time it opens the device.
  • The synth keeps the sample rate the device is already set to.

Details are in The General MIDI Synth.

Sound and MIDI handling

  • Changing a setting no longer resets the channels. Changing the synthesizer mode, the audio output, or the reverb and chorus setting restarts the audio, which stops any notes that are sounding, but each channel keeps its program, controllers, and tuning. Before, every channel's program and controller state was cleared.
  • When the audio device can't be opened, notes are dropped rather than saved up, so they don't all sound at once when the device comes back. Program changes, controllers and MIDI-CI still get through. The synth tries the device again every second while notes keep arriving.
  • Channel fine and coarse tuning (registered controllers 1 and 2) are supported over MIDI 1.0 and MIDI 2.0, and pitch bend sensitivity now takes cents as well as semitones.
  • MIDI 2.0 Exact pitch. On a melodic instrument, the MIDI 2.0 Pitch 7.9 note attribute now picks the sample as well as the pitch, so a note sounds the same whatever its note number. On a drum kit, the note number still picks the drum.
  • Drum channels follow General MIDI 2 guidelines. They ignore modulation, the damper pedal, pitch bend, pitch bend sensitivity, and channel and master tuning, so none of those changes how a drum sounds or how long it rings. Lifting the damper pedal always works, so no note gets stuck. The synth is not a GM2 synth, but we felt these were the correct behaviors in case GM2 support is added in the future.
  • Drum kits on any channel. With Yamaha XG or General MIDI 2 bank addressing, a bank select can put a drum kit on any channel. With General MIDI 2 addressing, bank 121 also makes channel 10 melodic.

MIDI-CI

  • A second controller list, drums, leaves out the controllers drum channels ignore. Each channel links to the list that applies to it, and the melodic list now includes fine and coarse tuning.
  • Channel titles, program list links and instrument names follow the drums wherever a file puts them, and instrument names follow the bank addressing setting.
  • The MIDI Message Report now includes fine and coarse tuning, and pitch bend sensitivity with its cents.

Network MIDI 2.0

Choosing and naming MIDI 1.0 ports

Most MIDI apps today use MIDI 1.0 ports. A device that describes itself tells Windows which groups it uses, and gets ports for those. Some devices never do, and another Windows PC is the usual example. Before, those got a number of ports, all named after the device.

Now you can choose which of the 16 groups get a source (In), a destination (Out), or both, and give each group a name. A PC that plays four synths through one connection can have four ports, each named after its synth. This works for a connection this PC makes, for every device that connects to a host on this PC, and for one particular device that connects to a host. Changes apply straight away, without disconnecting. When two Windows PCs connect, each one names its own end. See Naming MIDI 1.0 ports.

Other changes

  • Skipping in-between values to catch up. See Sending speed below.
  • More than one host. A device can now connect to more than one host on this PC, and each connection is a separate endpoint, which is one way to keep different gear apart in your apps. One device connected both ways at once, as a client of a host here and as a host this PC is a client of, is still refused.
  • Names. Leaving the name this PC introduces itself with empty now always uses the computer name, the same as a new host. Before, some connections used the remote address. A name you set is kept after a restart.
  • Staying quiet. With no hosts and no connections configured, the MIDI service opens no network ports and sends nothing for Network MIDI 2.0. It only listens for device announcements while a connection needs one.

RTP-MIDI

  • Keep endpoint when offline. Many apps, DAWs especially, remember their setup by MIDI port name, and may drop a device whose ports are missing when the app starts. A connection this PC makes can now keep the device's endpoint and ports while the device is switched off: always, for 30 seconds, for 5 minutes, or not at all, which is the default. Anything sent to the device while it's away is lost. Set it in Network MIDI Setup or with -OfflineRetentionSeconds in PowerShell. Network MIDI 2.0 doesn't have this setting, by design. See Keeping the endpoint when a device is offline.
    • When on, this can be confusing, but it's the behavior several customers have asked for because it's supported in other RTP-MIDI implementations. We have no plans to add an additional layer of "is it really and truly online" at this time.
  • Skipping in-between values to catch up. See the next section.
  • Staying quiet. The MIDI service only watches the network for advertised RTP-MIDI devices while something needs the list, such as a host, a client, or an app that just asked for it.

Sending speed (Network MIDI 2.0 and RTP-MIDI)

A slow sending speed protects a device that loses data when a lot arrives at once. But moving a fader or a pitch wheel can send hundreds of messages a second, which is more than a slow speed carries, so the device played every step late.

The concrete use-case for this is a remote Network MIDI 2.0 (or RTP-MIDI) breakout box with DIN connections. The network connection is incredibly fast, and so quickly backs up with data meant to go out through the DIN connections.

Now, when more than about a tenth of a second of messages is waiting, Windows skips some of the steps in the middle of each control change, pressure, or pitch bend move. Where each move starts, every point where it turns around, and where it ends are always sent, and so is the value right before and after each note. Notes, program changes, and SysEx are never skipped. Short runs are always sent in full, so an endless knob that sends how far it turned keeps working in nearly every case.

Skip in-between values to catch up is on by default, for every host, every client, and every device with a speed of its own. Turn it off for a device that needs every message, however late. It's in Network MIDI Setup next to every sending speed, -NoSkippingInBetweenValues in PowerShell, and in MIDI Console. See Sending speed.

Basic MIDI 1.0 Loopback

  • A loopback can no longer be created with a unique id that starts with another loopback's id, or that another's starts with. Removing one of them would also have removed the other. Overlapping loopbacks already saved in the configuration still load.
  • A unique id that would clash with the transport's own device is refused.

Bluetooth MIDI

No changes.

In-box service and transports

These parts ship in Windows. The fixes below reach customers through a Windows update, not through the preview packages.

  • MIDI 1.0 ports that come and go. Virtual MIDI port software can add or remove ports while an app has the device open. An open endpoint now picks up those changes, and MIDI 1.0 ports that didn't change stay as they were.
  • WinMM after a device is removed. An app can now unprepare its SysEx buffers after the device was unplugged, so it can clean up without errors.
  • MIDI 2.0 loopbacks hold up better when apps create, remove, connect, and disconnect loopbacks while messages are moving. A refused removal now says why (#1081), and a loopback whose unique id overlaps another's is refused, as for Basic Loopback above.

Applications

Tools package version for this release is 0.99.94-preview.12.

Windows MIDI Sequencer Preview

Still a very early preview, with a lot added since Preview 11. The Sequencer page has the details.

A reminder that this is not intended to be a full DAW. This is a MIDI sequencer without any built-in audio processing, plugin support, etc.

image

Light mode is supported as well, of course, and with the same choice of themes and colors.

image image
  • MIDI Mixer. A strip for each track with volume, pan, expression, reverb, and chorus. It sends MIDI to the track's device, keeps the change in the track's automation or start-up values, and with W on, records your moves into automation.
  • Studio setup lists every device and group the sequence uses. Choose which ones it plays to and records from, and which get clock, start and stop, song position, tempo, and a clock offset. These choices belong to the PC, so every sequence gets the same.
  • Choose each track's sound from a Patch Browser. The General MIDI Synth gets the General MIDI names. A device that speaks MIDI-CI can share its own names, but only when you ask it to.
  • More generators. The arpeggiator now plays, and eight more generators grow, learn, and spell their notes: Life, Life drums, Learn, Words, Evolve, the Infinity series, L-system, and Change ringing. Some can listen to another clip or track and change as it does.
  • Pattern templates for drums and basslines, and Hear steps to hear each step as you add it.
  • Recording from the launcher. A track records the clips you launch on it and the notes its generators make, so you can play the launcher live and keep the performance.
  • Easier editing. Open recent sequences, with pins. Drag tracks into folders, select several at once, and make them compact. Resize the panes. Zoom and move with the overview bar. Drag tempo changes, add tags for parts of the song, and drag the loop on the ruler.
  • Four visual themes, each in light and dark: Night drive, Tactile, Aluminum, and Vellum.
  • Devices show the picture and description you gave them in MIDI Settings, and automation ramps keep to each device's automation interval.
  • The sequencer doesn't ask a device what it is on its own, and sends a device nothing until you play, try a sound, or move a mixer control. That helps devices that stop working when an app sends them something unexpected.
image image

Windows MIDI Settings

  • Configurations, a new window on the toolbar, with four pages. Configurations switches between setups, and makes, renames, duplicates, and deletes them. Backups lists every backup, shows what's in one next to what's in use now, and restores it. A backup is made before every import, restore, and delete, and before the first change to a configuration each day. Share saves a .midiconfigpack package with a configuration, its pictures, and the port names setting for older apps. Import shows what a package would do before anything changes, lets you choose for each part, and can undo the import. See Configurations.
  • Use the Configurations window rather than copying configuration files. A copied file replaces the other PC's whole setup, including its network host names.
  • Audio output for the General MIDI Synth has the new Exclusive choice.

Windows MIDI Patchbay

image
  • Game controllers (#1272). Two new steps, Controller button and Controller stick or trigger, turn an Xbox controller, including the Xbox Adaptive Controller, or a joystick, flight stick, wheel, or gamepad into a MIDI controller. Play notes, hold the sustain pedal, step through programs, bend pitch with a stick, or set the volume with a throttle. Learn picks the control for you, and the steps keep working while another app is in front. See Game controllers.
  • Message converter, a new step that turns one kind of message into another, such as a pad's note into the control change a DAW listens for. It can latch a pad on and off, treat a pedal as a button, and step through programs. See Converting one kind of message to another.
  • Connection lines go around the endpoints and steps in their way, instead of through them.
  • The message throttler skips in-between controller values when it falls behind, the same way the network transports do, and Activity shows how many it skipped. Turn off Skip in-between values to catch up to send every message.
  • Put value no longer changes the message type of the message it writes into.

Windows MIDI Glass

image
  • Pads in one key. On Note pads or Hex pads, pick a key and a scale and turn on Only notes in the key. Every pad then plays a note of that scale, and the bottom left pad plays the root.
  • Root and scale pickers put two switches on the page, so you can change the key of every pad grid while you play.

Windows MIDI Network Setup

image
  • Customize groups and MIDI 1.0 ports when you connect, and Ports... on each device, host, and connection. See Network MIDI 2.0 above.
  • Keep endpoint when offline for RTP-MIDI devices, when you connect and under Details.
  • Skip in-between values to catch up next to every sending speed.
  • The Firewall page lists each network this PC is connected to, by name, with its type and network adapter, and says whether Windows Firewall lets the MIDI service in on each one. On a PC joined to a domain, Domain networks is now separate from Private networks.
  • The pages work in a narrow window, and buttons such as Speed..., Ports..., and Adapter... come before the settings they change.

MIDI File Player

image
  • Speed plays a file from 25% to 200% of its speed without changing its pitch, for learning a part by ear.
  • Transpose moves every note up or down by up to an octave. Drums don't move.
  • Keyboard shortcuts for the transport, speed, transpose, repeat, and moving around, most of them the keys Windows Media Player has always used. Ctrl+J goes to a time you type. With a screen reader, each shortcut says what it did.
  • Restart held notes when you resume or move the position, a new setting for files that hold notes down for a long time, such as organ files and drones.
  • After a seek while playing, the first notes are no longer cut off.

Windows MIDI Keyboard

  • --programs-from and --programs-group ask a different endpoint for the program list than the one the keys play to. Windows MIDI Sequencer uses them, so when you record into a track, the program list shows the sounds of the device the track plays to.

MIDI Troubleshooting and Repair

  • DPC latency check, a new page. Clicks, pops, and dropouts are sometimes caused by a driver elsewhere on the PC that keeps a processor busy for too long. Run the check while you play your project, and it tells you whether anything held up audio or MIDI, which driver did it, who made it, and what to try. It can also check a trace you saved earlier. See DPC latency check and Find what makes audio late on your PC.
  • The report now covers the files that come with Windows, and recent installs and updates.

mididiag

  • When the MIDI service is missing. A new section checks each Windows MIDI Services file that comes with Windows: whether it's in System32, and whether Windows is set up to use it. It sums that up in one line, such as ok, not_registered, or registered_elsewhere. See When the MIDI service is missing.
  • Install history. When Windows was installed or upgraded, recent Windows updates, the MIDI software that's installed, and when MIDI software was installed or removed. Together with when each old MIDI endpoint was last seen, that helps find when MIDI stopped working.
  • Transports whose file is missing, and the new servicing switches.

midi1monitor and midi1rtmonitor

  • midi1rtmonitor is new. It's a debugging tool that works like midi1monitor, but uses Windows.Devices.Midi, the WinRT MIDI API that came with Windows 10, instead of WinMM. When an app built on that API misbehaves, watch the same port with both tools and compare. It shows the API's timestamp, the raw bytes, and what they mean. See midi1rtmonitor.
  • midi1monitor now shows the WinMM timestamp of each message.

MIDI Console and PowerShell

  • Network MIDI 2.0 and RTP-MIDI commands can turn off skipping in-between values. In PowerShell, that's -NoSkippingInBetweenValues.
  • Connect-MidiRtpHost -OfflineRetentionSeconds keeps an RTP-MIDI device's ports while it's away.
  • The send speed cmdlets no longer change a device's MIDI 1.0 ports.

All apps

  • Pop-ups, such as flyouts and lists, now match the context menus, and take on the window's color and the color picked in Appearance.
  • Number boxes show their up and down buttons only for touch and pen, so a mouse no longer gets a pop-up that covers what's next to the box.
  • An app that starts minimized, such as MIDI Patchbay with Start with Windows, no longer has the wrong title bar spacing when you restore it.
  • Ask an assistant in MIDI Glass and MIDI Patchbay waits until it has found your MIDI devices before you can copy the prompt.

Documentation