Working with MIDI on Windows (Outside of a DAW)

Note: this document is subject to change over time.

Last modified: Jan 19, 2021 @ 9:37 am
Related post: Minimizing Audio Latency on Windows 10 with WASAPI (relevant for DAW users lacking ASIO drivers)
This page is for WINDOWS ONLY. It covers a broad spectrum of Windows versions up through Windows 10. Looking for help with another operating system?

Contents

1 Introduction

The purpose of this document is to give examples of ways to configure commonly used MIDI setups on Windows and to clarify a number of misconceptions about the process that are common in the computer-related music community. Reasons for landing on a document like this include:

  • Wanting to make MIDI aspects of legacy software work on later versions of Windows.
  • Needing a better-performing MIDI synthesizer than the one Windows comes with.
  • Trying to get two MIDI programs to talk when they can’t see each other.
  • Confusion about the whole MIDI/audio thing (i.e. “what is this ASIO thing?”).

This document includes both general remarks and explanations about MIDI and audio devices as well as various MIDI-related software recommendations. Details on how to set up equipment and software for specific tasks can be found at the end under “Configuring MIDI Setups.”

1.1 A Note for Digital Audio Workstation Users

Those using Digital Audio Workstation (DAW) software may or may not find this document useful. Programs like Cakewalk Sonar and Steinberg Cubase are examples of DAWs for Windows. DAWs handle many aspects of the MIDI setup for synthesizers internally, both presenting a different interface and eliminating some of the difficulties faced when using stand-alone software synthesizers. The main applicable part of this document to DAWs would be the sections on audio devices and drivers.

If you have landed on this document after being stuck with no sound coming from your DAW, which is the most common problem I hear about, you likely have some settings related to your audio devices to work through. Unfortunately, those are often quite specific to the individual devices and programs. Make sure sound is being sent to the right places and being listened for in the right places, and check both hardware settings, driver settings for any devices, and settings within the DAW. Similarly, if devices aren’t being recognized, you probably have some driver issues to resolve – or your device simply might not work on the particular version of Windows you have (a common issue for older hardware on Windows 8/8.1). DAW-specific tutorials will probably offer you more help than I can in this document.

2 MIDI

MIDI stands for Musical Instrument Digital Interface. It is a protocol for communicating information between various devices and it has been around for over 30 years. For various reasons, many people new to MIDI stuggle with what exactly it is and, therefore, often misunderstand what it and programs using it can and cannot do. Here are some quick facts that are often stumbling points for people that are new to working with MIDI and audio, each of which will be addressed in more detail later:

  • MIDI is a way of communicating between devices with certain message formats. For example, a MIDI controller can communicate to another device, perhaps a synthesizer, when a pitch should start and when it should end—much like the information communicated by a note on a paper score. In fact, a MIDI file is actually pretty close to a paper score in terms of the types of information it captures.
  • MIDI is not sound! You cannot “hear” MIDI any more than you can “hear” a paper score
    by itself. MIDI controllers do not create sound by themselves. Things that make sound from MIDI must interpret what they are told via the MIDI protocol. These devices are synthesizers, and they interact with audio devices to create sound.
  • Generally, your on-board sound chip and many external soundcards know nothing special
    about MIDI and they are not MIDI synthesizers.
  • Windows actually does know something about MIDI, but as of Windows 8/8.1, the operating system doesn’t let you have a say about what it does in that regard. It leaves all managing of MIDI settings to individual applications (such as a DAW).

Note that a “MIDI device” does not have to be a piece of hardware. There are plenty of software “MIDI devices” that can be called as such simply because they show up in the device manager when running.

2.1 MIDI Messages

MIDI information is broken into messages, which are sent over some communication medium. Messages can refer to “programs” or patches (think of it as an instrument name), channels, pitches, and so on. Channels can be thought of like staffs on a digital music score. Some examples of MIDI messages include:

  • Note on: start playing a particular pitch on a particular channel at a particular volume.
  • Note off: stop playing a particular pitch on a particular channel.
  • Program change: assign a new instrument to a channel.

Once again, these messages must be interpreted by a synthesizer in order to create sound. Sometimes MIDI messages are also called MIDI events.

MIDI-related programs that do not show up in the device manager when running are not MIDI
devices.

2.2 Controllers vs. Synthesizers

The difference between a MIDI controller and synthesizer is quite simple:

  • A MIDI Controller is a device that allows a human to push some buttons or keys and generate MIDI messages or events. In: human ineraction. Out: MIDI messages. There is no sound involved.
  • A MIDI synthesizer is a device that receives MIDI messages and produces sound. In: MIDI messages. Out: sound via an audio device or audio jack.

In a hardware-only setup, a MIDI controller (like a keyboard) would be physically connected to a MIDI synthesizer, to which speakers or headphones would then be connected. Perhaps some of the sound vs. MIDI confusion that the music community experiences is due to the fact that may keyboards actually include both of these elements: they are all-in-one MIDI controllers and synthesizers. However, any such device that features both “MIDI in” and “MIDI out” ports can usually be used as one or the other independently.

There is also a third category of devices that simply re-rout and/or re-interpret MIDI messages. As hardware, these devices are usually peripherals used to do specialized tasks like duplicating a stream of MIDI messages, merging MIDI message streams, or allowing a foot pedal to send messages down a regular MIDI cable (foot pedals meant for use with MIDI equipment typically have 1/4-inch TS or TRS plugs and send control voltage that has to be interpreted by something as a series of MIDI messages). Software also exists to re-rout, merge, and split MIDI messages.

2.2.1 The Windows Default Synthesizer (MS GS WaveTable Synth)

Windows comes with a MIDI synthesizer build into it: the Microsoft GS Wavetable synth. It is what allows you to double-click on a MIDI file, open it in some MIDI player, and hear the file interpreted as sound. Although this default Windows synthesizer has the redeeming point that it allows you to have a MIDI synthesizer with absolutely no setup required, it is the source of many complaints from the Windows-based music community.

  1. It sounds terrible. Is that an oboe, bassoon, or kazoo? It’s hard to tell sometimes.
  2. It lags like nobody’s business. In technical terms, the lag is referred to as latency. If you hook up a MIDI keyboard to talk to this synthesizer (although this in itself is an issue), you will experience high latency: there is a noticeable delay between the key going down and sound actually starting. The delay is big enough that it is completely intolerable for anyone trying to use MIDI input in a serious way. 100ms or more is not unusual.
  3. There is no easy MIDI-in setup. Even if you aren’t put off by the latency, there is no way to configure this synthesizer to directly take input from a MIDI controller unless the controller already has software that allows you to redirect its output. Often 3rd party  software is needed to be able to play the default synthesizer from a keyboard or some similar device.
  • It is more difficult on recent Windows versions to get away from this laggy kazoo synth and
    use a better one. On Windows XP this was relatively easy and you could just point the operating system to that other synthesizer manually. Windows Vista and 7 started to hide that functionality; on Windows 7, you could still do it, but it meant diving into the registry or using 3rd party software. On Windows 8/8.1, it is actually impossible to change the default synthesizer in a simple and generalized way.

While it’s nice that Windows just goes and does the MIDI-to-synthesizer thing for you when you want to play a MIDI file with minimal effort, these points are quite a nuisance to many music people. Some solutions and workarounds are explained in later sections. However, due to the progressive lack of support for easily using other synthesizers, some extremely old MIDI editors may end up being chained to the default synthesizer on Windows 8. However, this does NOT mean you can’t set a different output device within other music software on Windows 8/8.1, and any reasonably modern piece of MIDI-related software will let you do so. The only programs I have ever personally seen that did not allow setting the output device actually predated Windows XP.

2.3 Virtual MIDI Ports

A virtual MIDI port is a piece of software that runs in the background to send/receive MIDI messages from other programs or hardware devices. When running, virtual ports will show up in the Windows device manager under “sound, video, and game controllers. Virtual MIDI ports allow communication between MIDI-related programs that are not perceived by Windows as MIDI devices (which is to say that they do not show up in device manager). In other words, these programs might be able to send and receive MIDI messages, but they can’t “see” each other directly—but they will both be able to see a virtual MIDI port and can, therefore, use it to communicate. Hardware ports can be used similarly, although it often requires using a MIDI cable to create an ungainly self-loop (connecting a device’s output to its own input).

3 Audio Interfaces / Soundcards and Audio Drivers

Typically the term “soundcard” is used to refer to audio hardware that sits inside the computer (on the motherboard or a PCI card), while the term “audio interface” is used for external devices connected by USB/firewire/etc. However, external devices are sometimes referred to as “external soundcards” and some internal devices are referred to as “audio interfaces.”

Soundcards or audio interfaces and on-board sound chips are responsible for producing the signals that go into your headphones/speakers and/or for taking audio input from a microphone or other audio device.

These devices do not necessarily have anything to do with MIDI. Some older sound cards have hardware-level support for MIDI (in other words, they had their own synthesizers), and a few
modern cards do as well, but it is rare (see the PCI cards section later on). Most modern ones do not. In other words, with a recent PC and sound card, you are likely to hear the
exact same default Windows synthesizer with your on-board sound and when you plug in an expensive external or PCI sound card. Both will lag terribly even if the latency on the
expensive card is a little less terrible. The fact that a sound card doesn’t act directly as a MIDI synthesizer doesn’t mean that the particular card used is unimportant. In fact, it is quite
important, and the drivers that the device has are one of the most important parts for getting low latency.

3.1 Audio Drivers

As with any device, sound cards require drivers to be usable. Not all of these drivers are equal in their performance. Several types of audio drivers are commonly seen for Windows sound devices, each representing a different protocol for communicating with the audio device.

  • Windows DirectSound
  • Windows Driver Model (WDM)
  • MultiMedia Extensions (MME)
  • Audio Stream Input/Output (ASIO)
  • Windows Audio Session API (WASAPI)

Many devices will come with drivers in the first three categories listed above, and newer ones will also have WASAPI. Device-specific ASIO drivers, however, are typically only supplied with higher-end sound cards and those specifically intended for musical applications. Although some cards can yield perfectly reasonable performance with WDM and MME drivers, most require ASIO drivers to achieve their lowest latency performance with real-time MIDI and synthesizers. However, WASAPI drivers have become a more promising alternative in recent years in situations where ASIO drivers aren’t available.

ASIO drivers are also strictly required by some software synthesizers, which is problematic if the only sound devices available do not have their own ASIO drivers. “Universal ASIO drivers” exist to wrap other types of drivers as ASIO drivers, which will allow ASIO-less devices to be seen by software that will only use ASIO drivers. However, just because the non-ASIO drivers “look” like ASIO, it does not mean that they will perform well. The latency achieved this way will always be greater than what can be achieved with device-specific ASIO drivers.

A note for Windows 10 users: very recent hardware running Windows 10 with nothing but the on-board sound chip can sometimes demonstrate surprisingly good performance with nothing but WASAPI and sometimes even just WDM drivers and built-in sound chips. I have observed this with Microsoft’s Surface tablets, for which the built-in drivers and chip don’t struggle until under quite a heavy load. If you have a very new, high-spec machine running an up-to-date version of Windows 10, you may find that you don’t need special hardware and audio drivers to get the performance you need for simple MIDI applications (massive DAW setups are another matter and still warrant special hardware/drivers). However, you also need very recent software to get that performance out of it and older software may still require ASIO to behave properly. Newer software also often has support for WASAPI Exclusive Mode, which can deliver ASIO-like performance.

4 Recommended MIDI-Related Software

This section contains a list of programs that I have used extensively myself, frequently recommended to people who asked me for help, and advised students to use when setting up their laptops for MIDI-related coursework.

4.1 Virtual MIDI Ports

The following virtual MIDI ports have worked for me on Windows Vista, 7, 8, and 8.1.

Loopbe1
http://www.nerds.de/en/download.html
This program is freeware for 1 virutal port. There is also a paid version that offers 30 ports.

LoopMIDI
http://www.tobias-_erichsen.de/software/loopmidi.html
This is a freeware program that offers a custom number of virtual ports. Setup is a little bit more complicated than for loopbe1, since you need to create the ports yourself from LoopMIDI’s control panel.

4.2 Software Synthesizers

The following software synthesizers all use a virtual instrument format called sound fonts, or sf2 files. This format was defined by Creative Labs. To use the synthesizer, you need to load at least one sf2 file. If you don’t already have sound fonts, you can find some here:

http://www.synthfont.com/soundfonts.html

Note that instrument selection settings within the synthesizers can potentially be overridden by program
change messages.

SyfonOne and SynthFont
http://www.synthfont.com/Downloads.html
SyFonOne is a freeware, sound font-based synthesizer. Synthfont is a low-cost program that can be used to record MIDI files using sound fonts. These programs work with or without ASIO drivers, although performance is greatly improved with ASIO.

CoolSoft’S Virtual MIDI Synth
http://coolsoft.altervista.org/en/virtualmidisynth
This is a very easy-to-use sound font-based synthesizer and, if you do not have ASIO drivers, I highly recommend t as a lowest-possible-latency option. Setup is simple and the program’s performance is quite good. Unfortunately though, it can cause problems with some device-specific software, so your mileage may vary. For example, on Windows 8, the Korg Kontrol Editor would not work for me while I had this program installed. On Windows 10 those problems disappeared. This synthesizer is my go-to option when I need something with good performance when I only have my on-board sound chip to work.

Sforzando
https://www.plogue.com/products/sforzando/
Like the two programs above, Sforzando does not require special drivers to produce sound. It will load soundfonts, but requires that they be converted to another format before being used. This conversion only needs to happen once per soundfont file used.

SFZ and SFZ+
(July 2017) Update: dead links have been removed. Unfortunately it seems that these are no longer available for download from Cakewalk’s site. 
SFZ uses only one file and allows you to configure the instruments per channel. SFZ+ allows for one sf2 and instrument selection per channel. These programs require ASIO drivers.

4.3 Software for Setting the Default MIDI Output Device
(Windows Vista and 7 Only)

Windows XP allowed changing the default MIDI output device under the regular audio settings. That part of the audio settings panel was removed in Windows Vista and later versions, although it was still possible to change the default output device through the registry up through Windows 7. The following programs wrap that functionality, providing a nice user interface instead of forcing the user to dig around in the registry. You may need to run the programs as an administrator to get them to work and/or reboot before changes will take effect.

On Windows 8, 8.1, and 10, there is still a registry entry for default MIDI output similar to what was present in Vista and 7, but as of Windows 8 it only affects Windows Media Player. Because of this, old software that relies on the default output device setting to know where to send MIDI messages will be tied to the default synthesizer. Tools that allow setting the default device on Vista and 7 typically do not work on 8 and later. However, CoolSoft has a new tool called CoolSoft MIDI Mapper that serves as a replacement for Windows 8 through 10 (see the last item in the list below).

PLW MIDI Mapper (Vista and 7 only)
http://sierrahelp.com/Utilities/SoundUtilities/PutzlowitschsVistaMIDI_Mapper.html
This is a control panel item that needs to be added manually. Placement of the file on 64-bit systems can be a bit tricky; sometimes it works right away when put in the right place, sometimes it doesn’t.

Vista MIDI (Vista and 7 only)
http://www.benryves.com/products/vistamidi
This is a stand-alone program for setting the default MIDI output device on Windows Vista that can also be used with Windows 7.

CoolSoft MIDI Mapper (8, 8.1, and 10)
http://coolsoft.altervista.org/en/forum/thread/427
This program re-adds the MIDI mapper functionality for more recent versions of Windows. My testing of it has been extremely limited but it has worked so far for me on one machine running the Windows 10 fall creator’s update, although my testing hasn’t been extensive (as the software standard has shifted to expect it, I now mostly set default devices within a given program’s own settings). Note: you may need to register on the site to gain access to the download links in the thread.

4.4 MIDI Message Routers

The following programs are useful for rounting MIDI messages from one device to another. Note that you  do not need a virtual MIDI port to use these, although they are may certainly be used in conjunction with virutal MIDI ports.

Midi-Ox
http://www.midiox.com/
This is a great tool both for MIDI message routing and debugging device installation and connectivity issues, since not only lets you rout messages between devices but also shows you the messages it relays in a console.

HaskellOx
http://www.donyaquick.com/software
HaskellOx is a little program written by me using Haskell and Euterpea that was inspired by Midi-Ox. Although it isn’t nearly as powerful as MIDI-Ox, it can still connect MIDI devices together and can also be run without installation (so you can do things like run it from a flash drive). However, I haven’t done  extensive testing with it to determine whether there are any latency issues when under a heavy message load. It’s a useful tool for casual applications. Note: the compiled executable may not be broadly compatible across multiple Windows versions. The complete source code is available for it, however, if you wish to compile it yourself: https://github.com/donya/haskellox. I also have a version for Java: https://github.com/donya/javaox, and another in Processing: https://github.com/donya/processingox

4.5 Universal ASIO Drivers

Universal ASIO drivers allow other types of drivers (WDM, MME, etc.) to be perceived by
programs as having the ASIO interface. However, it will not give true ASIO performance.
Latency will still be higher with one of these drivers than when using device-specific ASIO drivers.

ASIO4All
http://www.asio4all.com/
This is the most widely-used and easy to set up universal ASIO driver out there. It is also
well-documented. However, it causes the driver it wraps to be usable by only one program at a time. So, if you are using as synthesizer that needs ASIO, you can only get sound from that one program and no others. ASIO4All will also sometimes get invoked by programs that search through drivers upon startup (common with DAWs), which can cause problems with in-program changes to the audio setup.

Asio Multiclient Wrapper
http://vidance.com/asiomulti/asiomulti.html
This program gets around the one-device limit of ASIO4All to some extent. However, it is trickier to set
up and can cause conflicts with some DAW software (for example, Cakewalk Sonar X1 and X2 crashed
immediately on startup when I had it installed).

JACK Audio
http://jackaudio.org/
JACK is my driver-wrapping tool of choice these days for times when I can’t use device-specific ASIO drivers. Unlike ASIO4All, it doesn’t get invoked automatically by programs searching through drivers. Unfortunately, starting the ASIO wrapper isn’t always easy and can take a few tries before it can successfully get access to the intended driver. Sometimes it even requires logging off and on again so that JACK can be loaded as the first audio program. So, make sure you set it up in advance of when you need it. If you wait until the last minute, you risk getting in front of the audience and then having a dreaded technical difficulty delay.

You can set up JACK as follows:

  1. Install JACK and reboot. Then, open the Jack Control executable.
  2. Under the Setup window’s options, you want the server prefix to be “jackd -S”, the driver to
    be “portaudio”, and the interface to be your driver of choice. Save the settings and close the
    setup window but don’t close the main window.
  3. Start the audio server with the “Start” button. You will need to keep this running while you
    use your soft-synth. Your synth may crash if JACK is closed before the synth is. If JACK
    crashes or gives an error when you try to start the server, check that there are no other
    programs trying to use the same audio device.
  4. Open your soft-synth and you should now see JACK (by the name JackRouter) as an ASIO
    option.

5 Audio and MIDI Hardware

This section contains general information about different types of audio and MIDI hardware I have both used myself and commonly been asked about. With on exception discussed in this section, there are really too many options in this area with too many new ones coming out each year to compare pros and cons of specific makes and models in a document like this. Prices vary widely from fairly cheap (<$50) to mid-range ($200-300) to incredibly expensive ($1000+). If you are looking to build a music PC, determine your budget and connectivity needs (both PC-to-device connectivity and things like TRS/XLR/etc. connections) and then research your options extensively before buying.

Note that old hardware will not necessarily work on later versions of Windows just because it worked on XP. Make sure the manufacturer says that your version of Windows is supported. Some pieces of old audio hardware can be coerced into working with later Windows versions, but others cannot or will be unstable at best.

5.1 On-Board Sound

Nearly every moern motherboard comes with a built-in sound device. While suitable for casual audio, they are generally not suitable for serious audio and MIDI development, particularly for systems where real-time audio and MIDI I/O is involved. On-board sound devices also usually do not have their own ASIO drivers, which are required by many synthesizers. Tools like ASIO4All can allow on-board sound devices to be used by synthesizers that require ASIO, and this will sometimes yield a bit better latency than if the same synthesizer is set up to use another type of driver. However, the latency will most likely still be noticeable.

5.2 PCI Soundcards/Audio Interfaces

PCI-based sound cards usually offer an improvement in sound quality and connectivity over on-board sound. However, once again, many do not come with ASIO drivers. Cards with ASIO drivers are often at least partially intended for music development. Cards intended mainly for entertainment (home theater, gaming, etc.) will not necessarily offer much better performance for real-time MIDI I/O than on-board sound devices.

Many older Creative Labs sound cards intended for audio development had the added benefit
of hardware-level sound font support, meaning that the cards had a very easy-to-customize
MIDI synthesizer. Unfortunately, this type of feature is increasingly hard to find as DAWs
and PCs have become more powerful. A list of sound-font compatibile devices can be found
here:

http://support.creative.com/kb/ShowArticle.aspx?sid=5184.

5.3 USB Audio Interfaces

Although obviously not a possibility in a completely freeware-based setup, there are some cheap USB audio interfaces that come with their own ASIO drivers and can give good latency with synthesizers. However, be warned that you get what you pay for in many ways. Although there are some cheap options, they have lesser audio quality and usually can’t achieve as low latency performance as certain, more expensive alternatives.

Although not a perfect correlation, you do get what you pay for to some extent with audio interfaces. Extremely cheap audio interfaces often have sound quality caveats and do not necessarily come with ASIO drivers (i.e. you must make sure it is explicitly stated somewhere that ASIO drivers exist). On the other hand, mid to high-end USB audio interfaces intended for DAW users will almost certainly have ASIO. More expensive boxes also usually offer more diverse connections, better mic preamps, and so on. Some are portable, others are intended to stay put. Some offer MIDI in/out ports, while others do not. Bear in mind that you don’t necessarily need to have audio and MIDI connectivity rolled together in one box. While convenient and usually with good performance when in one box, it is still quite common to have separate audio and MIDI interfaces, particularly for mobile setups where size needs to be minimized and both features may not be needed at the same time.

The cheapest audio interface option I have explored is the Behringer UCA 202, which is the only specific interface I will discuss here. The UCA 202 is a lightweight, highly portable audio interface that comes with its own ASIO drivers. The device also allows usage of multiple driver types simultaneously (although only one program can be using the ASIO driver at any given time). This means that, for example, you can listen to videos or mp3s online or in Windows Media Player while working with SFZ/SFZ+ in the background. However, don’t expect totally blinding performance from the UCA 202. The sound quality is marginal and, when the device is under rather a lot of strain, it is prone to glitches in the audio: clicks, pauses, etc. As a result, I’ve found it somewhat unreliable for trying to record anything live, since it can take many tries to get a glitch-free result. Nevertheless, it is a great portable and incredibly cheap solution.
Unfortunately it seems that Behringer dropped its ASIO drivers for the UCA series some time ago, removing all download links on its site, and now recommends ASIO4All instead. This is extremely disappointing as the Behringer drivers worked far better. While the old Behringer drivers can be found elsewhere on the web for now, this bizarre change in Behringer’s support for the UCA series means I can’t recommend these devices as a budget solution for ASIO drivers anymore, since one may as well use ASIO4All with the built-in sound chip instead of using a USB interface – or use WASAPI drivers on newer systems. Sadly, I am not aware of any other devices in this price range that are good substitutes for the UCA series with the original Behringer drivers.

5.4 USB MIDI Interfaces

USB MIDI interfaces provide hardware MIDI ports for a PC. Some are simply cables (USB on one end and MIDI in/out on the other), while others are hubs or boxes that require MIDI cables to connect to external MIDI devices.

Generic USB-MIDI cables can be found online for just a few dollars. However, they are not guaranteed to work. The cheap cables are often sufficient for casual music purposes (what I would consider “weak real-time” applications), but, if they are listed as simply “class compliant” and do not have their own drivers supplied by the manufacturer, they may not work on all versions of Windows. It has been my experience that class-compliant USB-MIDI interfaces that work on XP up through Windows 7 will often behave strangely on Windows 8/8.1, if they even work at all. Examples of strange behavior include showing up in device manager but refusing to
send messages through (or sending bad data) even though the throughput lights blink as
they should. If you have Windows 8 or 8.1, make sure the manufacturer supplies compatible
drivers.

6 Configuring MIDI Setups

This section provides examples of specific setup problems and how to solve them with the tools described so far.

6.1 Getting MIDI Input without a Physical Device

Sometimes there are times when it’s useful to have a MIDI input device, but when a physical keyboard or other MIDI controller isn’t available. This is common when developing interactive MIDI applications on the go with a laptop. Although another good solution is to carry a small keyboard like a Korg nanoKey2 or a QuNexus, they are not the only option. From the list of software earlier in this document, you will need the following:

  1. A virtual MIDI port of your choosing
  2. Proxima Controller

Set Proxima Controller to use the virtual MIDI port as its output. Then, take input from the same virtual port in the application requiring MIDI input.

6.2 Sending MIDI Controller Messages to the Default Windows Synth

One may wonder who would want to do this given how laggy and awful the default synth is on Windows, but here is an example situation: suppose you have a small USB keyboard and need to use it to play some notes in a very relaxed way during a presentation with a laptop and don’t have room for a bulky external card. I have been in this position many times. Aside from your MIDI controller being installed and ready, you need one thing: a program for re-routing MIDI messages (MIDI-Ox or my Haskell Ox). Set the re-routing program to take input from the controller (which should show up as a device; if it doesn’t something is likely wrong with the controller’s installation) and have it send those messages to the Microsoft GS Wavetable Synth. And then, off you go with laggy kazoo fun.

6.3 Sending MIDI to a Better Synthesizer

You will need two things:

  1. A virtual MIDI port of your choosing
  2. A software synthesizer of your choosing

Many MIDI players and some simple score editors (particularly old ones) do not have their own audio engine/synthesizer and are designed to just sent out MIDI messages to “something.” By default, that “something” will end up being the Windows synthesizer unless the software is configured to do otherwise.

Not all old software can be configured to do otherwise unfortunately. However, those programs that can usually have an option somewhere for setting the MIDI output device. Use the virtual MIDI port as the output for the score editor or MIDI player. Set the synthesizer to take input from the same MIDI port.

6.4 Sending MIDI Messages between Programs

If two programs can send/receive MIDI messages but cannot “see” each other (they don’t show up as devices), you can allow them to talk through a virtual MIDI port like so:

Program 1 Port Program 2

NOTE: the port should have messages flowing through it in one direction only. In other words, one program should talk while the other listens. If the programs need to have a back-and-forth conversation over MIDI, you will need two virtual MIDI ports to avoid feedback problems:

Program 1 Port 1 Program 2
Program 1 Port 2 Program 2

MIDI interfaces with paired MIDI in/out ports can also be used this way: just connect the output to the input and then connect the programs appropriately. Again, bi-directional communication between the programs would require twice as many ports to avoid feedback.

6.5 Minimizing Latency

First, if you are attempting to minimize the latency of the Windows default synth, it is a lost cause. Your best bet is to use a different synthesizer and follow the instructions in the previous subsection.

CoolSoft’s VirtualMIDISynth allows you to have some control over the output latency without needing special drivers. To minimize the latency, go into Configuration > Options > Advanced Options and set the additional output buffer lower than the default (which is 250ms by default – really high!). I usually recommend starting with a value of 10 and testing playback with at least some chords in it to hear some MIDI polyphony. Some systems can go as low as 0-2ms latency with this synth, although this is somewhat rare and requires a pretty beefy machine (often a desktop tower and good audio hardware). Many lesser machines, however, will still work with 5-7ms. Depending on the particular machine and its settings higher latencies may be required to avoid distortion, clicks, and/or audio dropouts. On laptops in particular, the degree to which you can reel in the latency can be affected by power settings. High performance modes can typically function with lower latencies without audio glitching than battery saving modes are capable of.

If you are using ASIO drivers, you may need to adjust the buffer size to optimize the performance of the device on your system. The larger the buffer, the worse the latency will be, but the less likely you will be to have audio quality problems (clicks, audio dropouts, etc.). High-end audio devices meant for serious music development usually can have the buffer size set quite small. How powerful a PC the audio device is on also impacts this process. For a detailed explanation of the variables involved in minimizing latency, I recommend the following article: http://www.soundonsound.com/sos/jan05/articles/pcmusician.htm

If you do not have an audio device that comes with its own ASIO drivers but have a relatively recent machine running Windows 10 and have kept up with Windows Updates, then there is some good news: you may be able to get low latency out of WASAPI drivers as an alternative to using something like ASIO4All. Instructions for that are located on my post about Minimizing Audio Latency on Windows 10 with WASAPI.

Comments 31

  • Hello,
    I’ve read your interesting page by hazard. I own a brand new PC (Win 8.1 64 bits), a Edirol FA-66 soundcard, a Fatar SL 880 master keyboard and two EMU ESI 4000. Ans less and less of hairs!!!
    I’m engineere in computers, My first synth was a Sequential Circuits, all was OK in those times. You plugged and that’s all. Now, I’ve the last driver : audio works but not midi (cables, keyboard and samplers are OK). Idem with asio4all. The reponse of Roland was (not exactly in those terms) “your device is too old. Buy an other!”. To get the same problems ? Those people are bad programmers (I was researcher in computers, the URL sows you a little part of my job, fully working in the end of 2002, recently retired) and not goog commercials too!
    I’ve tried almost all of the solutions, as far as I know, and I’m completely desesperate.
    So, I permit to call for some help everywhere I can, hoping someone will find the right (and probably esy to do) manip.
    If you can find a very lost musician in Normandy you’ll save me because I really don’t see what to do now.
    Thanks for your help.
    François Bourniche

    • Hi Francois,

      I realize this is a horrendously late response to your post and do apologize for that. However, there’s not much help I can offer for problems like this. Backwards compatibility is a much complained about topic in music, and the options can be pretty limited when you have a really old device. About the only thing I can suggest is installing and/or running the drivers in compatibility mode for a really old OS, but it’s not a guaranteed solution. I managed to get an old Tascam MIDI interface to work with Win7 and Win8 this way, even though the manufacturer even had a built in OS check to block installations on versions later than XP. If you have tried that sort of trick already and it didn’t work, then probably Roland’s initial response to you is correct even if unsatisfactory. To give another but less optimistic example, I once tried to get an old Audigy card into working on 64-bit Win7/8 once and only got partial success. Similarly to what you have seen, some parts of the device worked but others were unresponsive no matter what I tried, and I ended up having to just buy a new piece of hardware.

  • I found you on Google as I am trying to find a way of playing MIDIs from my laptop to my electric piano (which has five pin MIDI in and out sockets. I cant persuade my computer to send the signal to the USB – I see you say I need a “virtual MIDI port of my choosing” I have no idea what that means. Can I download one? Nest step would be playing along with the midi and recording the result. Would the same thing work for that? Sorry to be using you for tech support. I thought your classical woodwind trio generated from number 6 was scarily real. Does it ever end? I mean Can you give the program the means to create a start and a finish?

    • Hi Nick,

      Virtual MIDI ports are programs that show up as MIDI devices and can therefore be used to relay MIDI messages between other pieces of software. There are download links for a couple different virtual MIDI ports under section 4.1 (Loopbe1 and LoopMIDI). However, they are not a substitute for a USB MIDI cable (USB on one end and 2xMIDI on the other) or a USB MIDI interface to connect to a hardware device expecting physical MIDI connectors. USB-based MIDI devices should show up as available ports or input/output devices. If you are having trouble with a USB MIDI device misbehaving, there’s not much advice I can offer aside from the basic steps of making sure you have the most recent drivers and/or reinstalling the drivers. Since I don’t know the details of the hardware you’re using, it is also possible that your keyboard is simply not designed to take MIDI messages over USB. Some older pieces of hardware allow file transfers over USB but still require 5-pin MIDI cables to communicate MIDI messages in real time.

      > I thought your classical woodwind trio generated from number 6 was scarily real. Does it ever end? I mean Can you give the program the means to create a start and a finish?

      Right now all of the output from my algorithmic composition system (Kulitta) has to be finite – so it will have a start/end in that very basic sense (although a couple of the system’s modules can be used in infinite/real-time playback sorts of settings). One big weakness of the system is making musically convincing endings, since the generative process currently doesn’t actually know where it is in the larger piece of music when operating on a particular segment. Adding support for more intelligent generation of time-sensitive musical events (endings, bridges, etc.) is something I’ve been working on a bit this summer but it’s still a work in progress.

  • I just wanted to update my XP Digidesign Pro tools system & built an AMD Athlon X4 based system only to be told that Pro Tools 12 only runs on Intel i5 CPU. doh!
    So then I switched to FL Studio 12 with software synths & midi input for my keyboard
    Only to be told that windows 8 had abandoned Midi
    So what do I do now?
    Drop down to Windows 7?
    Surely someone has designed a midi interface that runs on windows 8.
    It’s not rocket science is it?

    • Hi Max, Windows 8 has not abandoned MIDI. The only thing it has dropped is support for setting a default output device at the operating system level. This means that programs that rely on looking up the OS’s default device will be stuck with the default Windows synthesizer and can’t be pointed to other devices you may have installed. Some very basic MIDI players have this problem as do some very old pieces of software. However, any reasonably recent version of a DAW (like FL Studio) should allow you to select input/output MIDI devices within the program itself, so the default device restriction for Windows 8 really makes no difference to those programs.

  • Thanks for your comments on MIDI and Windows, which I came across when I tried to find out why I couldn’t get Windows 10 to play MIDI files on my Yamaha keyboard through a USB to MIDI adapter, as XP had done. Having been brought to realise that this was not a trivial problem, I thought to try this with a virtual Windows 7 computer running on VMware Workstation 12 Player, which I have had to set up for other purposes. It turned out that VMware let me connect the adapter to the virtual computer, and the PLW MIDI Mapper which you mention above let me direct MIDI to that adapter, and through to the Yamaha. The latency is dreadful, but the virtual computer approach will meet my very modest needs, and (which is why I write this) might be of interest to others, since VMware Player is free for non-commercial use, and recipes for obtaining free limited-lifetime Windows XP are easily found. Thank you again. Richard Corbett

  • Hi, my question is simple.
    Is there any way to get a midi keyboard working on a laptop (any laptop) without latency?
    I have to use my old bulky windows 95 desktop with a soundblaster card to play midi instruments without latency. Don’t even need asio4all. You’d think they got that solved in 2017! but no sigar…

    • Hi Cees,

      No latency on any laptop with no external audio equipment is asking a lot, as there are some very minimal, low-spec laptops out there that are simply not suitable for real-time work in the MIDI and/or audio domains. Better spec laptops can typically get down to 10ms latency on high performance mode with non-ASIO drivers, but you need a software synthesizer that works without them. The Coolsoft synthesizer described on this page does this and also allows setting the latency (configuration > advanced options > additional output buffer). Some very high spec laptops can go down to 2ms with that synth, but how well it does is not just dependent on the machine and power settings, but also use-case factors like how much polyphony is happening at any given time (i.e. a piano solo with one hand might sound fine, but massive chords repeatedly might glitch). If you use that synthesizer, you will need a program like MIDI Ox to rout messages from the keyboard to the synth.

      Since you didn’t mention any details on the MIDI keyboard you’re using, it’s also worth watching the messages from a program like MIDI Ox to see if you notice any obvious delay between depressing a key on the MIDI controller and the corresponding MIDI messages showing up. I have noticed that some Bluetooth controllers can lag visibly with this test on some laptops, and this is sometimes solved by kicking the machine into a more power hungry mode, but not always. Some very cheap USB-to-5-pin-MIDI cables can also suffer from noticeable lag with some systems. Typically controllers that plug directly into the laptop by USB don’t have this issue.

      Regarding how things have changed between Win95 with SoundBlaster cards and the standards in 2017, the expectation these days for serious real-time work with audio and MIDI is that you offload a lot of the burden to an external USB card. This is true of both desktop and laptop rigs; PCI cards are no longer the norm and on-board chips are not sufficient on many systems. Similarly the kind of built-in MIDI synth features of older Soundblasters is not something that exists on most modern sound cards, and the expectation is to use software synths within a digital audio workstation. Although some high-spec laptops can run that kind of software without external devices, it’s most common now to use a USB audio interface run DAWs and the better software synths on the market.

  • What different types of MIDI peripheral hardware can be used in conjunction with a DAW

    • Hi Ella, I either am not understanding your question or it’s too broad for me to answer easily. If you are using a modern DAW, then any relatively modern piece of MIDI equipment should work. The only issue worth noting is that older software (and operating systems) can sometimes experience problems with the new trends in bluetooth-based MIDI controllers. If you are wondering what variety of equipment exists I recommend browsing shops that have electronic music equipment since the options are vast.

  • Hi Donya,
    you might be the one having an answer to my question.
    I´m trying to use different USB Midi interfaces on a windows machine for the same program. Now because each USB Device appears in Windows with it´s own Device ID, the things I programmed only work with the Device that was connected when I set up the function I need. Now when I connect the other device (to have a backup) none of the functions are working (input and ouput wise) because the software expects to get data from another Device ID.

    Do you know if there is like a virtual Midi driver avaialble that merges from several physical Midi devices to one virtual device? Up to know I wasn´t lucky with google.

    Thanks and best regards from Germany

    Christian

    • You can use a virtual MIDI port and MIDI Ox to accomplish a “merge” of sorts when software is only willing to listen to one port. Set MIDI Ox to listen to incoming messages on all of the devices you want to receive from, and then send out through a virtual port. Then, the software on the receiving end only needs to listen to the virtual port and you can use MIDI Ox to decide what you want sending to that port at any given time.

      Loopbe1 is probably the better virtual port for the situation you described, since the device number for it remains constant unless you uninstall and reinstall after adding other devices in between. Retention of port numbers is not a guarantee for LoopMidi since you can add/remove ports dynamically.

  • Hi Donya, great info on this page, thanks. I just want to do a super simple Set-Up, I have a Yamaha-P45 digital piano and a OP-1 Synth, both USB-MIDI in/out. I just want to be able to control de OP-1 from the P-45 full size keyboard with the lightest software/set up possible. I can get the OP-1 work with Proxima Controller, and I can get midi in from the P-45 in Reason 5. But I just cant get routing the P-45 to the OP-1.
    Do you know any software like Proxima Controller which can make set up a USB-MIDI IN and route it to a USB-MIDI out? I use a Windows 8.1 PC.
    The next step I would like to achieve is to recreate this set up using an Andriod device (with no PC). So, do you know an android app to capable of this? (like MidiBridge in iOS)
    Thanks again for this great info.

    • Try using MIDI Ox – it will let you rout between arbitrary MIDI devices on your system. For example, I regularly use MIDI Ox to make a USB-only controller (Korg Nano Key) send messages through my computer to an external 5-pin interface (MOTU Fastlane) that is connected by a physical cable to analog synthesizers. Just make sure you start MIDI Ox and have the ports configured as you want before you run your other software.

      Unfortunately, I can’t be much help with Android as I’ve never had success with it. Devices were recognized in my tests, but no messages would pass through. I have tried quite a few different Android MIDI apps over time to do this but none worked. However, I have never spent the time to debug the issue in a serious way. My general impression is that there hasn’t been as much effort invested in supporting MIDI on Android as there is on iOS.

  • Thank you. I was worried about lag and I got coolsoft virtual midi synth and it got of most of the lag. I took the buffer down to about 30 and it worked out.

  • Hi Donya,
    Thank you for this great information page. I think you may have the answer(s) I need.
    I recently found and started experimenting with MIDI-OX and CoolSoft VirtualMIDISynth, and found that by configuring MIDI-OX to use Coolsoft’s virtual port(s) as it’s MIDI OUT(s), I can plug my KORG K61 controller keyboard to my USB port, and I only need those two tools to re-create the sound of my Sound Canvas (SC-55) with a SF file I found and unpacked. The problem I’m having is that I can’t figure out how to change patches via M-OX or CoolSoft. I am able to split the keyboard with M-OX, and if I pass through to my sequencer (PowerTracks Pro) with LoopMidi, I can use two (or more) CoolSoft “devices” (instances) and assign different patches to the lower and upper, but I can’t figure out how to change patches just using M-OX, and eliminate the need for LoopMidi and my Sequencer when just casually playing.
    If you could instruct me: How to change CoolSoft patches via M-OX so I don’t need to run my sequencer, I’d be grateful! In my sequencer, I’ve got one instance assigned to the lower (bass) and another to the upper (piano), and also assigned as OUTs in M-OX, but the only thing missing is being able to assign the patches I want in M-OX. (The default is GM 1:Acoustic Grand Piano.) M-OX HELP explains it (I think), but I can’t make it happen. I’ve played with the Patch Mapping window in M-OX, but I can’t make anything happen with it. I’ve got two assignable knobs and two assignable buttons on my keyboard, and they do send to M-OX.
    So, in a nutshell, how do I assign/change CoolSoft patches via MIDI-OX?

    Thank you very much for your time!
    Best,
    Kevin

    • Hi Kevin,

      Just to quickly summarize to make sure I understood right: it sounds like you’re routing MIDI messages from a hardware keyboard controller through Midi Ox to a synthesizer and not being able to get program changes to happen. If you can’t send program changes from the keyboard itself then there are only a couple of approaches I can suggest. Not being familiar with the particular MIDI controller you have I don’t know whether the assignable knobs could be made to send program change messages or not.

      The simplest option I think would be to install Proxima Controller and use it to send program changes to the devices and channels you want. Set it to send to the output device you want, change the channel number as needed, and then change the patch number and it should set the synthesizer accordingly and it will send messages. This is what I usually do if I need to send just a program change message somewhere manually.

      While I’m aware of one way to send program change events within Midi Ox, it’s not terribly nice. Set it to send output to just the device you want to change (if you have 2 separate output devices, you have to do this in three steps: one setting step per device then opening both at the end). Go to View > Instrument Panel > load GM.ins, select General MIDI for Instr and Bank, and then pick the instrument under Patch. You have to tick and untick the channel you want to operate on if you want to change one channel at a time. This is not my preferred method since it’s tedious, particularly if you are working with multiple output devices rather than sending to different channels on the same device. There may be other ways to accomplish this within Midi Ox but I’m not aware of them as it’s not something I typically use Midi Ox for. I have never used the patch bay feature.

  • An excellent resource – thanks

  • Hi there! Thanks for this page! I’m trying to read as much as I can on the subject because of a serious backwards compatibility issue. The thing is, I used to make demos of my songs in General MIDI using two very, very old tools: Voyetra’s Digital Orchestrator Pro for creating and editing (which I absolutely loved as a way of transmitting ideas the simplest way!) and the good old Wingroove as a synthesizer (I miss this little potent tool). Ever since I started working on Win10, those tools simply do not install anymore and I haven’t been able to make new music for a few years now. But the urge is there, so I started researching about DAWs and alternative ways to write my stuff. Keep in mind I only want to make demos (for a real band to play) and not professionally sounding final products! What software would you recommend me along those lines, keeping it simple and as close to that DOP editing capability as possible, no bells, no whistles, no special hardware? Thank you so much!

    • I have never used Digital Orchestrator and also never seen the interface for it, so it’s difficult for me to make a recommendation that would be similar. If you’re wanting to avoid big expenditure, see if REAPER has the kinds of features you need – it’s on the cheaper side for DAWs, but it also has somewhat of a learning curve and doesn’t come with much in the way of virtual instruments (which is a lot of what you pay for with some other DAWs). However, if you’re trying to make things for bands and produce sheet music as part of that, then REAPER won’t really help with the sheet music step – in which case you may find something like MuseScore more appropriate.

  • Hi Donya,
    I was just reading through all your info here and have found it most informative. I just thought I could add a little to it. When it comes to virtual MIDI cables I have had great success using “Copperlan” at http://www.copperlan.org/. I’ve also recently came across a second one at https://springbeats.com/sbvmidi/ but have not had time to try it yet. Thanks for all your hard work.

  • Wow, thanks! You’ve written about EXACTLY what I’ve been trying to find – and more, that I wouldn’t be surprised if I need in the future!

    Keep up the good work!

  • Your paper is full of solid information that debunks MIDI myths and offers great advice. I’m trying to use LoopBe1 to route MIDI controller events from either n-Track or Sonar X3. I only need to send MIDI from one track and want to receive on another MIDI compatible software app – Midi Guitar – on a Windows 10 platform. I can’t seem to find LoopBe1 as an output option for the track. I don’t want to send ALL the midi data out. What am I missing? Where should I look for LoopBe1.

    I possess but have not tried Loop Midi.

    Please advise, rick

    • Hi Rick,

      I think you probably need to look in Sonar’s preferences to enable Loopbe1 as an output option. Unfortunately it’s been a while since I’ve used Sonar X3 (I switched to Reaper a couple years back) so my memory is a bit fuzzy, but I do recall that you have to select output devices for them to appear as an option for individual tracks. You need to go into the settings/preferences and then there is a MIDI section with a “devices” menu, and you need to tick any output devices that you want to be available in other parts of Sonar. This doesn’t mean everything goes out to those devices – it must makes them available for selection in other menus for MIDI devices. The second step is that you need to assign Loopbe1 as the MIDI output from the individual track’s settings – and unfortunately I don’t remember what exactly you have to click on for the track itself to do that.

  • Can you help me? I have an old Windows XP system with Realtek onboard audio, that will no longer play MIDI through Windows. In other words, MIDI files will no longer play in my media player, MIDI music in games doesn’t work in DOSBox (it used to), and any Windows programs that try to open a (software) MIDI device will fail.

    If I go to Sounds in the Control Panel and try to set the default device for MIDI playback, the only option available is Microsoft GS Wavetable Synth, but if I select it and click Apply, it just clears the box. However the Music tests in DXDiag work fine. It does say that Direct port acceleration isn’t available though.

    I’ve tried re-installing the audio drivers, but that didn’t fix it. I’ve been Googling the problem (which is how I ended up here), but everything I find assumes that you’re having trouble making an actual hardware MIDI device work. Nobody covers what to do if Windows won’t play MIDI by default.

    • It’s been so long since I had access to an XP machine that my ability to help troubleshoot will be limited. I do remember from my XP days running into two situations at different times that had similar symptoms of MIDI playback just quitting unexpectedly on the system: (1) having to reinstall the default synth specifically because it mysteriously got corrupted somehow and (2) having to add a plugin to Windows media player to make it play MIDI files. However, I don’t remember if 2 was actually on my XP machine at the time or a newer one (I also had a Vista machine at that point I think, so it could have been that machine; my memory isn’t clear there). Checking on those two things is about all I can suggest as far as fixing the issue with media player and the GS synth. Given that the system finds no MIDI devices but has the one synth listed as an option, I’m inclined to suspect #1 as the culprit first, but it’s still a fuzzy guess. As a third possible thing to try just to get any MIDI sound happening, it looks like Coolsoft VirtualMIDISynth is still listed as compatible with XP SP3, so you could try installing that one as an alternative and see if software picks it up. I can’t help with the DOSBox side of things unfortunately.

  • Hello and thank you for your generosity.
    For quite some time I tried without success to find a solution for my inquiry.
    I know that most midi drivers don’t allow multi standalone software synths to be controlled at the same time from one usb midi controller, like Pianoteq and Analog Lab or Lounge Lizard together by my KAWAI MP7SE midi keyboard.
    I tried all programs mentioned in this page without success.
    I was wondering if you know of any program or setup that might permit me to do so.
    I’m sure that my recent 16GB RAM WIN10 system and decent keyboard can’t be the culprit.
    Thanks again for your time.

    • To control multiple synths from a single USB device on Win10, you can use MidiOx and virtual MIDI ports to receive from the USB device and broadcast out to multiple devices. You can use LoopMIDI to create multiple virtual ports that each synth listens to. Be aware that latency may not be identical between standalone synths and you may hear things slightly out of sync as a result.

      Depending on exactly what you’re trying to do with this multi-synth setup, you may also run into audio driver and latency issues that are completely separate from the MIDI multi-client setup. If you plan to use ASIO drivers for low-latency, not all ASIO drivers support multiple simultaneous audio clients (varies from one device to another). If you’re using WDM/WASAPI, you may experience very high latency in shared/multi-client mode. Unfortunately, if you run into either of those audio issues, there is no good solution except for switching to the VST+DAW way of doing things.

  • Thank you for your advice.
    I tried MidiOx and LoopMIDI but my setup was probably not correct.
    So I’ll give it another try and report back.

  • Hello. After some trial end error with Midi-OX, loopMidi and ASIO-Link-Pro I finally I managed to control several standalone modules to work perfectly together without any noticeable latency. Wonderful and thank you so much again.

Leave a Reply to Scott Cancel reply

Your email address will not be published. Required fields are marked *