Как Windows обрабатывает USB-источники звука не в реальном времени? - PullRequest
2 голосов
/ 28 января 2020

В настоящее время я изучаю возможность создания устройства, которое выводит звук PCM через интерфейс потоковой передачи аудио класса USB. Это устройство имеет собственные часы и, что немаловажно, не генерирует выборки с частотой, кратной 1 Гц, как может указывать USB spe c, и генерирует пакеты в асинхронном режиме. Как Windows справляется с этим, когда аудиопоток USB последовательно дает сэмплы со скоростью выше или ниже, чем указывает дескриптор USB, и на каком уровне ОС это обрабатывается?

Секунда (и в зависимости от на ответ на первый вопрос, на который уже может быть дан ответ), вся цель этого проекта будет заключаться в том, чтобы захватить этот цифровой звук в его собственном формате и частоте дискретизации. Какие прикладные программы Windows API предоставят точный вход PCM из аудиопотока USB без интерполяции или других изменений или артефактов?

1 Ответ

0 голосов
/ 29 января 2020

IDK о Windows в спецификациях c здесь, но Java на Windows, скорее всего, будет настроен на чтение данных как AudioInputStream и будет выводиться как SourceDataLine .

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

Но суть в том, что SourceDataLine приостановит работу, пока не сможет выполнить свою задачу. Таким образом, если функция DA C нативного кода не готова, поток SourceDataLine будет приостановлен и будет ждать, пока выходной каскад не будет готов принять следующий блок данных для обработки.

Существует несколько уровней передачи входящих данных, о многих из которых я не знаю достаточно. Но я предполагаю, что если у вас есть способ собрать входящие пакеты в поток (с какой бы то ни было буферизацией), вы сможете получать и воспроизводить PCM. Конечно, в C есть структуры, которые обеспечивают эквивалентные функции Java классов, которые я цитировал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...