Звук вывожу через DirectSound. Три буфера длиной 1/50 секунды.
Синхронизируюсь по звуку при помощи GetCurrentPosition.
У... ты в курсе, что погрешность маркера текущей позиции в буфере может варьироваться до километра? Т.е. показывает, что он в позиции, допустим, 500, а на самом деле позиция 200 или 700.