Aleś trafił. Akurat wchodziłem na forum i widziałem jak pojawiał się temat
Odnośnie pytania, musisz zastosować tzw. "podwójne buforowanie"
Polega to na tym, że na początku od razu wysyłasz 2 pakiety. W momencie gdy skończy się odtwarzanie pierwszego system od razu odtwarza następny a ty w tym czasie po otrzymaniu WOM_DONE przygotowujesz 3 pakiet do wysłania. I tak w kółko.
Schematycznie wygląda to tak:
WOM_OPEN
buffer #1
buffer #2 - oba wysyłasz zaraz po WaveOutOpen
WOM_DONE:
buffer #3
WOM_DONE:
buffer #4
... itd. aż do wyczerpania tych buforów chyba, że chcesz zapętlić to wtedy przestawiasz pozycję, odczytu itp.
A tak naprawdę lepiej stosować więcej buforów co możesz zauważyć w WaveLab czy Sound Forge gdzie mamy możliwość ustawienia ich ilości.
Także 3 bufory to jest minimum i tak mniej więcej wyglądało by to w praktyce.
WOM_OPEN
buffer #1
buffer #2
buffer #3 - wszystkie trzy wysyłasz po WaveOutOpen, albo przynajmniej dwa już wystarczy
WOM_DONE: buffer #1
WOM_DONE: buffer #2
WOM_DONE: buffer #3
WOM_DONE: buffer #1
WOM_DONE: buffer #2
itd.
Na przykład karty Creamware źle odtwarzają dźwięk w trybie podwójnego buforowania i trzeba stosować minimum 3 bufory jak wyżej.
Wszystko też zależy od wielkości tego bufora bo tryb MME ma spore ograniczenia i nie można zejść tak nisko z latencją jak się to ma w ASIO.