Jaki jest czas opóźnienia (lub opóźnienia) dla wywołań zwrotnych z metody API waveOutWrite?

Prowadzę debatę z niektórymi programistami na innym forum dotyczącym dokładnego generowania zdarzeń MIDI (komunikaty Note On itd.). Ludzkie ucho jest dość wrażliwe na niewielkie niedokładności czasowe i myślę, że ich główny problem wynika z użycia timerów o stosunkowo niskiej rozdzielczości, które kwantyzują ich zdarzenia w odstępach około 15 milisekund (co jest wystarczająco duże, aby spowodować zauważalne niedokładności).

Około 10 lat temu napisałem przykładową aplikację (Visual Basic 5 w systemie Windows 95), która była połączonym syntezatorem programowym i odtwarzaczem MIDI. Podstawowym założeniem był system odtwarzania bufora skokowego z każdym buforem trwającym szesnastą nutę (przykład: przy 120 ćwierćnutach na minutę każda ćwierćnuta wynosiła 500 ms, a zatem każda szesnastka miała 125 ms, więc każdy bufor wynosi 5513 próbek). Każdy bufor był odtwarzany za pomocą metody waveOutWrite, a funkcja wywołania zwrotnego z tej metody była używana do kolejkowania następnego bufora, a także do wysyłania komunikatów MIDI. Dzięki temu dźwięk oparty na WAV i dźwięk MIDI są zsynchronizowane.

Dla mnie ta metoda działała doskonale - nuty MIDI nie brzmiały nawet nieznacznie poza krokiem (podczas gdy zwykły zegar z dokładnością do 15 ms do odtwarzania nut MIDI, będą one brzmieć wyraźnie poza krokiem).

Teoretycznie metoda ta dawałaby dokładność MIDI dokładną do próbki lub 0,0227 milisekundy (ponieważ jest 44,1 próbek na milisekundę). Wątpię, czy to jest prawdziwe opóźnienie tego podejścia, ponieważ przypuszczalnie istnieje niewielkie opóźnienie między zakończeniem bufora a powiadomieniem zwrotnym waveOutWrite. Czy ktoś wie, jak duże byłoby to opóźnienie?