IDK о Windows в спецификациях c здесь, но Java на Windows, скорее всего, будет настроен на чтение данных как AudioInputStream и будет выводиться как SourceDataLine .
Что касается проблем синхронизации, PCM, обработанный SourceDataLine, будет настроен на заданную частоту дискретизации и байтовую структуру (подробности конфигурации предоставлены в классе AudioFormat). Код, лежащий в основе SourceDataLine, использует буфер и, я думаю, что-то вроде BlockingQueue или реализацию собственного кода чего-то подобного. Я не совсем понимаю эту последнюю деталь.
Но суть в том, что SourceDataLine приостановит работу, пока не сможет выполнить свою задачу. Таким образом, если функция DA C нативного кода не готова, поток SourceDataLine будет приостановлен и будет ждать, пока выходной каскад не будет готов принять следующий блок данных для обработки.
Существует несколько уровней передачи входящих данных, о многих из которых я не знаю достаточно. Но я предполагаю, что если у вас есть способ собрать входящие пакеты в поток (с какой бы то ни было буферизацией), вы сможете получать и воспроизводить PCM. Конечно, в C есть структуры, которые обеспечивают эквивалентные функции Java классов, которые я цитировал.