"The Universal MIDI Packet format adds a (optional) Jitter Reduction Timestamp mechanism. A Timestamp can be prepended to any MIDI 1.0 Protocol message or MIDI 2.0 Protocol message for improved timing accuracy. "
from https://www.midi.org/midi-articles/details-about-midi-2-0-midi-ci-profiles-and-property-exchange
"You must be logged in as a TMA member to download the spec. "
Some notes I made while investigating timestamp support. In short, some vendors implemented their own solutions that either need specific DAW/sequencer from said vendors or OS support.
afaik MOTU interfaces implement their own timestamp that works with MOTU (Digital) Performer. Roland USB Midi interfaeces implements something called FPT (fast path) that works with Cakewalk and Mac OS. Unclear whether Roland timestamps in driver or the hw interface.
MIDI 2.0 standard that is now ready (2020) adds optional timestamp support for both MIDI 1.0 and 2.0. There currently is a price for accessing the spec.
In windows the new WinRT MIDI API has Timestamp support.
https://docs.microsoft.com/en-us/windows/uwp/audio-video-camera/midi
has an example where System.Diagnostics.Debug.WriteLine(receivedMidiMessage.Timestamp.ToString());
prints the timestamp to visual studio debug output window.
https://github.com/stammen/winrtmidi
Is deprecated win32 wrapper for WinRT MIDI, it says
"This project is no longer supported. Please report issues with the Windows::Device::Midi API using the Windows 10 Feedback Hub App"
http://forum.cakewalk.com/m/tm.aspx?m=1178006&p=25 has more on DirectMusic, which is deprecated API.
"To guarantee accurate timing with an acceptably low latency, DirectMusic incorporates a master clock in kernel mode. This clock is based on a hardware timer. DirectMusic automatically selects the system clock as the master clock, but an application can select a different one, such as the wave-out crystal on a sound card.
The master clock is a high-resolution timer that is shared by all processes, devices, and applications that are using DirectMusic. The clock is used to synchronize all audio playback in the system. It is a standard IReferenceClock interface. The IReferenceClock::GetTime method returns the current time as a 64-bit integer (defined as the REFERENCE_TIME type) in increments of 100 nanoseconds."