И DirectSound, и Wave API в конечном итоге предоставляют вам буферы, заполненные аудиоданными, которые вы можете обрабатывать. Размер этих буферов может варьироваться, но реально вам нужно будет поддерживать задержку менее 10 мс для полезной обработки в реальном времени. Это означает обработку данных в течение 10 мс после их поступления в буфер, за вычетом времени между поступлением в звуковое оборудование и получением в буфер, что будет зависеть от драйвера. По этой причине я бы рекомендовал обрабатывать не более 5 мс данных одновременно.
Основное архитектурное различие между ними заключается в том, что с DirectSound вы выделяете кольцевой буфер, который затем заполняется аудио драйвером DirectSound, тогда как Wave API берет очередь предварительно выделенных буферов WAVEHDR, которые заполняются, возвращаются приложению и затем переработано. Для обоих API существуют различные методы уведомления, такие как оконные сообщения или события. Однако для обработки с малой задержкой, вероятно, целесообразно поддерживать выделенный поток потоков и ждать поступления новых данных.
По разным причинам я бы порекомендовал DirectSound поверх Wave API для новых разработок - конечно, будет легче добиться меньшей задержки.
Какой бы метод вы ни выбрали для захвата, когда у вас есть данные, вы просто передаете их в свой алгоритм обработки и ждете готовности следующего буфера. Пока вы можете обрабатывать данные быстрее, чем они поступают, у вас будет (псевдо) анализ в реальном времени.
Существуют также альтернативные API, которые могут быть более подходящими. Взгляните на ASIO , потоковую передачу ядра (только для XP - я бы не стал беспокоиться) и, впервые в Vista, Core Audio APIs .