1014451 visitors has seen the Tim-Carter.com site. Thanks!
76 visitors has seen the Tim-Carter.com site today.
Search :  
>>> Home >> Music Production > Midi Latency (This page has been seen 20394 times)

Midi Latency Problems

Are you experiencing that your midi notes starts to early or to late when recording? Here is a rough guide to try to get rid of your midi problems, hopefully that should solve your problems.

This article applies to Cubase and Nuendo

1. Emulated Ports
By far, the most common cause of MIDI timing problems is using emulated MIDI ports. Once upon a time, there was only one type of MIDI driver, known as Windows MIDI. Later on, Microsoft introduced a new driver type, DirectMusic, which could theoretically offer better timing, but due to some limitations, this was mostly taken advantage of by gaming cards, not pro-audio cards.

To encourage application developers to switch from Windows MIDI to DirectMusic, Windows provides “emulated” DirectMusic ports for all Windows MIDI drivers; as far as the application knows, it’s talking to a genuine DirectMusic driver, with Windows doing the translation under the covers. This means that an application like Nuendo can, in theory, be written solely to the DirectMusic interface, and if your card doesn’t actually support DirectMusic, Windows will cover for it.

The reality is more complicated; sometimes the emulated DirectMusic drivers don’t work at all, or only work in one direction. Sometimes the emulated ports don’t work but the original Windows MIDI ports do. Sometimes the timing is off on one port or the other. Sometimes there are actually both Windows MIDI and genuine DirectMusic drivers for a device. So if there is both a Windows MIDI and DirectMusic version of a port, Nuendo tries to guess which one is the right one, and it filters out the other. Sometimes—usually, in my experience—it guesses wrong, especially where emulated ports are involved. And on some systems, though certainly not all, the emulated ports have timing problems.

(By the way, these two driver types—driver APIs, really—have nothing to do with WDM vs. MME drivers. Those are driver models, and affect how a driver is built, not what API it uses. A WDM driver can be either Windows MIDI or DirectMusic, and I believe the same is true of MME. We don’t care about WDM vs. MME here.)

The fix Nuendo keeps a zero-length file called ignoreportfilter in the directory C:\Program Files\Steinberg\Nuendo\MIDI Port Enabler. Using Windows Explorer, you can drag this file up one level to the Nuendo directory, restart Nuendo, and you will now see both the emulated and non-emulated ports. In my experience, you nearly always want the non-emulated ports; you should go into Device Setup and set “Show” to “No” for the emulated DirectMusic ports so that you don’t accidentally use them.

This will only solve your problem if yours is a system where the emulated ports have timing issues. On my system, they don’t.

2. The two-clock problem
All MIDI interfaces on Windows timestamp their data before providing it to the application. This avoids timing problems when the application doesn’t immediately see the incoming notes, perhaps due to higher-priority interrupts, or things chewing up CPU time, or simply a burst of notes too quick for the app to process. The app just looks at the timestamp, does a quick calculation, and poof: instant latency compensation for all MIDI. This has been part of the MIDI driver spec forever.

But Windows provides two different multimedia timers - specifically, one called timeGetTime, or TGT, and one called QueryPerformanceCounter, or QPC. The QPC timer is more precise (although the actual precision is up to the motherboard), and often more accurate, but it’s only available on newer versions of Windows, and there were some motherboards a while back that had major inaccuracies with it, and some current dual-CPU boards still don’t keep the two CPUs in sync.

So drivers, especially Windows MIDI drivers, that descend from older code, or have to work on older OS’s, or that are simply more cautious, are likely to use TGT, which is what Nuendo normally uses; the VST and ASIO specs are based on TGT. Newer drivers, especially those written under DirectMusic, are likely to use QPC. Since the two end up out of sync on most PCs, you’ll end up with timing problems in Nuendo if your MIDI driver uses QPC.

This problem is likely to affect any sequencer, not just Nuendo - although some sequencers might be based around QPC instead of TGT, and thus they’ll have problems with exactly the interfaces that work fine on Nuendo and vice versa. Sonar does have a hidden option that lets you ignore ALL timestamping from the interface, which is fine unless Sonar can’t keep up with the interface, at which point you’ll have really sloppy timing on ANY interface.

The fix
Nuendo and Cubase 2.20 provide an option in the DirectMusic settings called “Use system timestamp”. This tells Nuendo that for MIDI tracks, they should keep track of time using QPC, not TGT. This affects only DirectMusic drivers. That means that if you have a Windows MIDI driver that uses QPC, you’ll have to use the emulated DirectMusic drivers, which is the exact opposite of what is normally recommended! Hopefully future versions will offer this option in both DirectMusic and Windows MIDI flavors. Meanwhile, hopefully your system isn’t one of those that has timing problems on the emulated ports. My system, an Asus P4C800-E, doesn’t, but certainly some do. A future version of MIDITime will test DirectMusic emulated ports as well, so you’ll know exactly what you’re up against.

The test
If you want to be certain that this is the problem you’re having, and help out the user community at the same time, you can download my MIDITime Utility. You take a cable from a MIDI output port to a MIDI input port, and run the utility until your clocks get out of sync; it then tells you which clock is correct, and thus what setting to use. Simple and definitive.

And please, if you run the utility, and your interface isn’t already listed below, e-mail me the results so I can share them! (I’d prefer that you not leave them as comments, so others don’t have to wade through the details.) The utility can take up to an hour to run (it waits that long to decide that your clocks are staying in sync), but more often takes about 5 minutes.

The following MIDI interfaces will work best with the DirectMusic emulated ports and the “Use System Timestamp” option checked:
  • Echo Mia
  • EMU 1212M
  • Frontier Design Dakota
  • M-Audio 410 Firewire
  • M-Audio Audiophile 2496
  • MOTU 828 MKII
  • MOTU Express XT
  • Steinberg MIDEX-8
  • Terratec EWS88MT
  • Yamaha SW1000XG

The following MIDI interfaces will work best with the native DirectMusic ports and the “Use System Timestamp” option checked:

  • Wami Rack-24

The following MIDI interfaces will work best with the “Use System Timestamp” option unchecked, and (presumably) the non-emulated Windows MIDI ports:

  • Aardvark LX6
  • Aardvark Q10
  • Edirol UMT-880
  • Digi 001
  • Emagic Unitor8 MK1
  • Emagic Unitor8 MK2
  • Emagic AMT-8
  • M-Audio MIDISport
  • RME Digiface
  • RME 9632
  • Roland SC-8820
  • Roland Super MPU-64
  • Roland UM-4

The following lucky motherboards have clocks that don’t drift, and so can use any interface with any setting:

  • Asus A7V333
  • Asus A7N8X-X
  • Asus P4D-800D
  • Asus P4T-533C
  • Asus TUSL2-C

3. Constrain Latency Compensation One person has reported that using the Constrain Latency Compensation option—which should, in theory, affect only audio—also improved his MIDI timing. This has not been confirmed by other reports, but it’s certainly easy enough to try. If you find this setting to be helpful, please let me know.
Links to resources that made this article possible.


Like (20)
Dislike (1)

Keywords for this article:
MIDI-Latency || MIDI Notes recorded to early || MIDI Notes recorded to late || MIDI Notes are doubled

Post comment



Code Language:


Here you can paste a code example. It will then be processed by SyntaxHighlighter and formatted for easier readability.
Please remember to select the correct Code Language in the select above so the SyntaxHighlighter can highlight the code properly.


Please enter the code you see above

What is 3 + 1 =

Submit Comment

Comment submitted by Meiken Noir
Submitted date 2013-05-20 16:16:06
Hi Tim, how can I get your MIDITime Utility? Thanks

Comment submitted by Ronnie
Submitted date 2012-03-06 13:40:55
I'm using an Alesis multimix8 USB fx interface, it has no midi in and out, so i use a simple usb midi in out interface, with a Roland PC200 midi keyboard. I've tried everything but shooting myself to resolve the problem of latency. if you can let me know what drivers i need with this hardware you will be saving my life!!!. The software is Cubase 5 LE running on windowsXP 64.

Advertisement by Google