DirectSound
DirectSound — это программный интерфейс (API) для работы со звуком, входящий в состав библиотек DirectX компании Microsoft. Он предоставляет разработчикам приложений (преимущественно игр и мультимедийных программ) низкоуровневый доступ к звуковой подсистеме Windows, позволяя воспроизводить, записывать и обрабатывать звук с низкой задержкой, а также использовать аппаратное ускорение звуковых эффектов.
История
Разработка и первые версии (1995—1998)
DirectSound был впервые представлен в составе DirectX 2.0 в 1996 году. До его появления разработчики игр под Windows были вынуждены использовать громоздкий и медленный API Windows Multimedia (waveOut), который не обеспечивал необходимой производительности для игр реального времени. DirectSound, как и другие компоненты DirectX, был создан для обеспечения прямого доступа к аппаратному обеспечению, минуя слой абстракции операционной системы, что позволяло добиться низкой задержки (latency) и высокой скорости обработки звука.
Версия DirectSound 3.0, выпущенная в составе DirectX 3.0 (1997), добавила поддержку 3D-звука (позиционирование источников звука в трёхмерном пространстве) и аппаратного ускорения микширования. Это стало ключевым преимуществом для игр, где требовалось реалистичное звуковое окружение.
Эпоха DirectSound3D (1998—2005)
С выходом DirectX 8.0 (2000) DirectSound был объединён с DirectSound3D в единый API. В этот период он стал стандартом де-факто для звука в играх под Windows. Поддерживались эффекты, такие как реверберация (Echo), затухание (Attenuation), доплеровский сдвиг (Doppler Shift) и позиционирование в пространстве. Аппаратное ускорение реализовывалось через звуковые карты, поддерживающие стандарт EAX (Environmental Audio Extensions), разработанный компанией Creative Technology. Карты на чипах Sound Blaster Live! и Audigy активно использовали DirectSound3D для создания объёмного звука.
Упадок и переход на WASAPI (2005—2010)
С выходом Windows Vista (2007) корпорация Microsoft изменила архитектуру звуковой подсистемы. Вместо прямого доступа к аппаратуре был введён новый стек Windows Audio Session API (WASAPI), который работал через аудиодвижок Audio Engine. DirectSound был переведён в режим эмуляции поверх WASAPI, что привело к потере аппаратного ускорения и увеличению задержки. Аппаратное ускорение DirectSound3D было полностью удалено из Windows Vista и последующих версий.
Это привело к тому, что разработчики игр начали переходить на альтернативные решения, такие как OpenAL (открытый аналог DirectSound3D) и FMOD (проприетарная библиотека), которые могли работать напрямую с оборудованием или через WASAPI. В Windows 10 и 11 DirectSound по-прежнему поддерживается, но используется в основном для обратной совместимости со старыми играми (до 2007 года).
Архитектура и принципы работы
Основные компоненты
DirectSound работает с объектами COM (Component Object Model). Основные объекты:
- IDirectSound8 — основной интерфейс для управления устройством воспроизведения. Создаётся вызовом
DirectSoundCreate8(). Позволяет задать уровень кооперации (cooperative level) — режим, определяющий, как приложение взаимодействует с другими звуковыми программами. - IDirectSoundBuffer — объект, представляющий звуковой буфер (аудиоданные). Буферы делятся на первичные (primary buffer) — выходной поток, который микшируется в устройство, и вторичные (secondary buffer) — отдельные звуки, которые накладываются друг на друга.
- IDirectSound3DBuffer — расширение для вторичных буферов, позволяющее задавать положение, скорость и направление источника звука в трёхмерном пространстве.
- IDirectSound3DListener — объект, представляющий слушателя (пользователя). Определяет положение, ориентацию (forward/up векторы) и скорость слушателя.
Процесс воспроизведения
- Инициализация: приложение создаёт объект
IDirectSound8и задаёт уровень кооперации (например,DSSCL_PRIORITYдля управления первичным буфером). - Создание буфера: для каждого звука создаётся вторичный буфер с заданными параметрами (частота дискретизации, разрядность, количество каналов). Буфер может быть статическим (загружается один раз) или потоковым (обновляется в реальном времени).
- Загрузка данных: аудиоданные (WAV, PCM) копируются в буфер.
- Воспроизведение: вызов
Play()запускает воспроизведение. DirectSound автоматически микширует все активные вторичные буферы в первичный буфер и отправляет сигнал на звуковую карту. - 3D-обработка: если буфер является 3D-буфером, DirectSound рассчитывает громкость, задержку и панораму на основе положения слушателя и источника.
Уровни кооперации
- DSSCL_NORMAL — стандартный режим. Приложение не может изменять формат первичного буфера. Другие приложения могут воспроизводить звук одновременно.
- DSSCL_PRIORITY — приложение может изменять формат первичного буфера, но не может захватить устройство полностью. Другие приложения продолжают работать.
- DSSCL_EXCLUSIVE — приложение получает монопольный доступ к устройству. Другие звуки приглушаются или отключаются.
- DSSCL_WRITEPRIMARY — приложение получает прямой доступ к первичному буферу, отключая микширование DirectSound. Используется редко, в основном для профессиональных приложений.
Возможности и функции
3D-звук
DirectSound3D реализует модель позиционирования, основанную на физических принципах:
- Затухание (Attenuation) — громкость уменьшается с расстоянием по заданному закону (линейному, логарифмическому или обратному квадрату).
- Доплеровский эффект — изменение частоты при движении источника или слушателя.
- Задержка (Delay) — разница во времени прихода звука на левое и правое ухо.
- Реверберация (Reverb) — имитация отражений звука от стен помещения. Реализовывалась через аппаратные эффекты EAX.
Аппаратное ускорение
В эпоху Windows XP и более ранних версий DirectSound мог использовать аппаратное микширование и обработку эффектов на звуковой карте. Это снижало нагрузку на центральный процессор. Карты с поддержкой EAX (например, Sound Blaster) могли обрабатывать до 128 голосов одновременно без потери производительности.
Захват звука
DirectSoundCapture — подмножество API, предназначенное для записи звука с микрофона или линейного входа. Позволяет создавать буферы захвата, управлять началом и остановкой записи, а также обрабатывать данные в реальном времени.
Ограничения и критика
Зависимость от аппаратного обеспечения
До Windows Vista DirectSound сильно зависел от возможностей звуковой карты. На дешёвых картах без аппаратного ускорения 3D-эффекты эмулировались программно, что приводило к высокой нагрузке на CPU. С выходом Vista и удалением аппаратного ускорения DirectSound потерял свои главные преимущества.
Высокая задержка в современных версиях
Из-за эмуляции через WASAPI задержка DirectSound в Windows 10/11 может достигать 50–100 мс, что неприемлемо для профессионального аудио (DAW, синтезаторы). Для игр эта задержка также критична, поэтому разработчики перешли на WASAPI Exclusive Mode или ASIO (Audio Stream Input/Output).
Отсутствие поддержки многоканального звука
DirectSound изначально ограничен 8 каналами (7.1). Для современных форматов (Dolby Atmos, DTS:X) требуется использование более новых API, таких как Spatial Sound (Windows Sonic).
Устаревшая архитектура
DirectSound не поддерживает современные форматы сжатия (AAC, FLAC, Opus) без дополнительного декодирования. Он также не умеет работать с сетевыми потоками (VoIP, стриминг) — для этого используются другие библиотеки.
Применение
Игры
DirectSound был основным звуковым API для игр с 1996 по 2007 год. На нём работали такие проекты, как Half-Life (1998), Unreal Tournament (1999), World of Warcraft (2004), The Elder Scrolls IV: Oblivion (2006). В современных играх DirectSound используется редко, в основном для обратной совместимости (например, в эмуляторах или старых портах).
Мультимедиа
Некоторые медиаплееры (например, Windows Media Player) использовали DirectSound для воспроизведения звука. Однако с появлением WASAPI и Media Foundation этот API был вытеснен.
Профессиональное аудио
В редких случаях DirectSound применялся в простых аудиоредакторах (например, Audacity в старых версиях) для захвата и воспроизведения. Однако из-за высокой задержки он непригоден для серьёзной работы.
Наследие и альтернативы
Современные API
- WASAPI — основной API для звука в Windows 7 и выше. Поддерживает режимы Shared (общий) и Exclusive (монопольный). Обеспечивает низкую задержку и высокое качество.
- ASIO — проприетарный протокол от Steinberg, используемый в профессиональных аудиоинтерфейсах. Обеспечивает минимальную задержку (до 2 мс).
- OpenAL — открытый аналог DirectSound3D, поддерживаемый на Windows, macOS и Linux. Используется в играх (например, Doom 3, Quake 4).
- FMOD и Wwise — коммерческие звуковые движки, используемые в современных играх для управления звуком, включая 3D-позиционирование и динамическое микширование.
Эмуляция
Для запуска старых игр, использующих DirectSound3D, существуют обёртки (wrappers), такие как DSOAL (DirectSound to OpenAL) и Creative ALchemy. Они перехватывают вызовы DirectSound и преобразуют их в OpenAL, восстанавливая аппаратное ускорение на современных картах.
Источники
- Microsoft Corporation. DirectX 8.0 Programmer's Reference. — Redmond, 2000.
- Barker, J. DirectSound 3D Programming. — Charles River Media, 2001.
- Microsoft Docs. DirectSound (Windows). — Архив MSDN, 2007.
- Creative Technology. EAX 4.0 Programmer's Guide. — 2004.
- «История развития звуковых API в Windows». — Журнал «Хакер», № 6, 2009.
- «Уход DirectSound: как Microsoft убила аппаратное ускорение звука». — iXBT.com, 2007.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →