DirectSound — устаревший программный компонент библиотеки Microsoft DirectX для операционной системы Windows , замененный XAudio2 . Он обеспечивает интерфейс с низкой задержкой для драйверов звуковых карт , написанных для Windows 95 — Windows XP, и может обрабатывать микширование и запись нескольких аудиопотоков. DirectSound изначально был написан для Microsoft Джоном Майлзом . [1]
Помимо предоставления основной услуги по передаче аудиоданных на звуковую карту, DirectSound предоставляет другие основные возможности, такие как запись и микширование звука, добавление эффектов к звуку (например, реверберация , эхо или флэнжер ), использование аппаратно-ускоренных буферов (если звуковая карта поддерживает аппаратное ускорение звука) в Windows 95 через XP и позиционирование звуков в трехмерном пространстве . DirectSound также предоставляет средства для захвата звуков с микрофона или другого входа и управления эффектами захвата во время захвата звука. [2]
После многих лет разработки сегодня DirectSound является зрелым API и предоставляет множество других полезных возможностей, таких как возможность воспроизведения многоканального звука с высоким разрешением. Хотя DirectSound был разработан для использования в играх, сегодня он используется для воспроизведения звука во многих аудиоприложениях. DirectShow использует возможности аппаратного ускорения звука DirectSound, если возможности аппаратного ускорения звука звуковой карты существуют и предоставляются аудиодрайвером. [3]
DirectSound — это API пользовательского режима , который обеспечивает интерфейс между приложениями и драйвером звуковой карты , позволяя приложениям воспроизводить звуки и музыку.
DirectSound считался революционным, когда был представлен в 1995 году, поскольку он имел несколько одновременных аудиопотоков и позволял нескольким приложениям одновременно получать доступ к звуковой карте. До этого разработчикам игр приходилось реализовывать собственный движок рендеринга звука в программном обеспечении.
DirectSound обеспечивает преобразование частоты дискретизации и микширование звука ( громкость и панорамирование ) для неограниченного количества источников звука; однако практическими ограничениями являются количество аппаратных источников звука и производительность программных микшеров.
Архитектура DirectSound включает концепцию «кольцевого буфера», который непрерывно воспроизводится в цикле. Программист приложения создает звуковой буфер, затем непрерывно опрашивает его состояние через «курсор чтения» и обновляет его с помощью «курсора записи». Существует два типа буферов — «потоковый» буфер, который содержит непрерывные звуки, такие как фоновая музыка, и «статический» буфер, который содержит короткие звуки.
На поддерживаемых звуковых картах DirectSound попытается использовать буферы с "аппаратным ускорением", то есть те, которые либо могут быть размещены в локальной памяти звуковой карты, либо могут быть доступны звуковой карте из системной памяти. Если аппаратное ускорение недоступно, DirectSound создаст аудиобуферы в системной памяти и будет использовать чисто программное микширование.
Некоторые звуковые карты поздней эры DOS " wavetable ", такие как Sound Blaster AWE32 и Gravis Ultrasound, имели выделенные DSP , которые были заимствованы из цифровых музыкальных инструментов . Эти карты имели локальную память, которую можно было использовать для буферизации нескольких аудиопотоков и их микширования на плате, тем самым разгружая ЦП и значительно улучшая качество звука. Однако это было возможно только в DOS путем прямого программирования оборудования, и полнофункциональное "аппаратное ускорение" из локальной памяти никогда не было реализовано на этих картах из-за сложностей двойной буферизации . Более поздние карты, такие как Sound Blaster Live!, Audigy и X-Fi, способны получать прямой доступ к буферам системной памяти.
DirectSound3D (DS3D) — это расширение DirectSound, представленное вместе с DirectX 3 в 1996 году с целью стандартизации 3D-звука в Windows. DirectSound3D позволяет разработчикам программного обеспечения использовать звук, написав его один раз для одного аудио API вместо того, чтобы переписывать код много раз для работы с каждым поставщиком аудиокарт.
В DirectX 5 DirectSound3D получил поддержку звуковых карт, использующих сторонние алгоритмы 3D-аудио, для надлежащего ускорения DirectSound3D с помощью методов, одобренных Microsoft.
В DirectX 8 DirectSound и DirectSound3D (DS3D) были официально объединены и получили название DirectX Audio , однако API по-прежнему обычно называют DirectSound.
EAX — это расширение DirectSound и DirectSound3D, которое обеспечивает обработку звуковых эффектов в аппаратно-ускоренных буферах.
В Windows 95, 98 и Me компонент микшера DirectSound и драйверы звуковой карты были реализованы как драйвер VxD режима ядра (Dsound.vxd), что позволяло напрямую обращаться к первичному буферу, используемому аудиооборудованием, и, таким образом, обеспечивало минимально возможную задержку между API пользовательского режима и базовым оборудованием, но в некоторых случаях приводило к нестабильности и ошибкам типа «синий экран» .
Windows 98 представила WDM Audio и драйвер Kernel Audio Mixer ( KMixer ), которые обеспечивали цифровое микширование, маршрутизацию и обработку одновременных аудиопотоков с более высоким качеством преобразования частоты дискретизации, а также потоковую передачу ядра. В WDM DirectSound отправляет данные в программный KMixer. Windows 98 Second Edition улучшила поддержку звука WDM, добавив аппаратную буферизацию DirectSound, аппаратную абстракцию DirectSound3D, преобразование частоты дискретизации KMixer (SRC) для потоков захвата, поддержку многоканального звука и введение DirectMusic . Если аудиооборудование поддерживает аппаратное микширование (также известное как аппаратная буферизация или аппаратное ускорение DirectSound), DirectSound буферизуется непосредственно на устройстве рендеринга. [4] Если потоки DirectSound используют аппаратное микширование, KMixer и его задержка обходят стороной. [5] В Windows 98 и Windows Me предпочтительными были драйверы звука WDM, но совместимость с моделью драйвера VxD была сохранена.
Хотя модель драйверов Windows (WDM) была доступна, начиная с Windows 98, ее использовали лишь немногие производители звуковых карт. Из-за внутренней буферизации KMixer вносил значительную задержку обработки (30 мс на современных системах). Windows 98 также включает драйвер потокового класса WDM (Stream.sys) для удовлетворения этих требований к обработке потока мультимедийных данных в реальном времени. Когда звуковая карта использует пользовательский драйвер для использования с системным драйвером класса порта PortCls.sys или реализует мини-драйвер для использования с драйвером потокового класса, приложения могут полностью обойти KMixer и вместо этого использовать потоковые интерфейсы ядра для уменьшения задержки.
В Windows 2000 Microsoft также реализовала тот же основанный на WDM аудиостек в Windows NT , представив аудиодрайверы WDM и компонент микшера ядра ( KMixer ). [6] В Windows XP Microsoft представила еще один улучшенный драйвер класса потоковой передачи ядра, AVStream . Начиная с Windows XP, аппаратное ускорение было также добавлено для обработки эффектов захвата DirectSound [7], таких как подавление акустического эха для USB-микрофонов, подавление шума и поддержка массива микрофонов.
Windows Vista имеет полностью переписанный аудиостек на основе Universal Audio Architecture . Из-за архитектурных изменений в переработанном аудиостеке прямого пути от DirectSound к аудиодрайверам не существует. [8] DirectSound, DirectMusic и другие API, такие как MME, эмулируются как экземпляры сеанса WASAPI . DirectSound работает в режиме эмуляции на программном микшере Microsoft. Эмулятор не имеет аппаратной абстракции, поэтому аппаратное ускорение DirectSound отсутствует, что означает, что аппаратное и программное обеспечение, полагающееся на ускорение DirectSound, может иметь ухудшенную производительность. Вероятно, предполагаемое падение производительности может быть незаметным, в зависимости от приложения и фактического аппаратного обеспечения системы. В случае аппаратных 3D-аудиоэффектов, воспроизводимых с помощью DirectSound3D, они не будут воспроизводиться; это также нарушает совместимость с расширениями EAX. [9]
Сторонние API, такие как ASIO и OpenAL, не затронуты этими архитектурными изменениями в Windows Vista, поскольку они используют IOCtl для прямого взаимодействия с аудиодрайвером. Решением для приложений, которые хотят воспользоваться преимуществами высококачественного позиционного 3D-аудио с аппаратным ускорением, является использование OpenAL. Однако это работает только в том случае, если производитель предоставляет драйвер OpenAL для своего оборудования. [10]
Аудиостек WASAPI в Windows 8 обеспечивает поддержку «аппаратной выгрузки» нескольких аудиопотоков на звуковую карту для микширования и обработки эффектами в дополнение к программной обработке, представленной в Vista, [11] [12] однако эта функциональность доступна только для приложений Windows Runtime . [13] Аппаратные интерфейсы DirectSound и DirectMusic для драйверов звуковых карт не реализованы.
Хотя поддержка DirectSound была доступна в версиях Windows CE до 4.2, она была удалена, начиная с версии 5.0. [14] Windows CE 6.0 также не поддерживает DirectSound, вместо этого предлагая переписать приложения для использования API Waveform Audio.
После удаления DirectSound в Windows Vista появилось несколько его замен.
Creative ALchemy (2007) от Sound Blaster обеспечивает аппаратное ускорение DirectSound3D и аудиоэффектов, таких как EAX. [15] Creative ALchemy перехватывает вызовы DirectSound3D и преобразует их в вызовы OpenAL для обработки поддерживаемым оборудованием, таким как Sound Blaster X-Fi и Sound Blaster Audigy . Для программных аудиорешений Creative ALchemy использует свой встроенный 3D-аудиодвижок, вообще не используя OpenAL.
У Realtek , производителя интегрированных HD-аудиокодеков , есть похожий на ALchemy продукт под названием 3D SoundBack. У C-Media , производителя чипсетов звуковых карт для ПК , также есть решение под названием Xear3D EX, хотя оно работает, перехватывая вызовы DirectSound3D прозрачно в фоновом режиме без какого-либо вмешательства пользователя.
IndirectSound — это бесплатная библиотека, которая эмулирует DirectSound 3D с помощью XAudio2, без использования аппаратного ускорения. [16]
DSOAL — это библиотека с открытым исходным кодом, которая эмулирует DirectSound 3D и EAX с помощью OpenAL. Можно использовать либо аппаратно-ускоренную реализацию OpenAL, либо OpenAL Soft (которая предоставляет HRTF). [17]