Windows directsound что это

Обновлено: 05.07.2024

DirectSound - это устаревший программный компонент библиотеки Microsoft DirectX для операционной системы Windows , замененный XAudio2 . Он обеспечивает интерфейс с малой задержкой для драйверов звуковых карт, написанных для Windows 95 через Windows XP, и может обрабатывать микширование и запись нескольких аудиопотоков. DirectSound был первоначально написан для Microsoft Джоном Майлзом .

Помимо предоставления основной услуги передачи аудиоданных на звуковую карту, DirectSound предоставляет другие важные возможности, такие как запись и микширование звука, добавление эффектов к звуку (например, реверберация , эхо или флэнджер ) с использованием буферов с аппаратным ускорением в Windows 95 - XP. и размещение звуков в трехмерном пространстве . DirectSound также предоставляет средства для захвата звуков с микрофона или другого входа и управления эффектами захвата во время захвата звука.

После многих лет разработки DirectSound сегодня представляет собой зрелый API , предоставляющий множество других полезных возможностей, таких как возможность воспроизводить многоканальные звуки с высоким разрешением. Хотя DirectSound был разработан для использования в играх, сегодня он используется для воспроизведения звука во многих аудиоприложениях. DirectShow использует возможности аппаратного ускорения звука DirectSound, если возможности аппаратного ускорения звука звуковой карты существуют и предоставляются аудиодрайвером.

СОДЕРЖАНИЕ

Функции

DirectSound - это API пользовательского режима, который обеспечивает интерфейс между приложениями и драйвером звуковой карты , позволяя приложениям создавать звуки и воспроизводить музыку.

DirectSound считался революционным, когда он был представлен в 1995 году, поскольку он позволял использовать несколько одновременных аудиопотоков и позволял нескольким приложениям одновременно обращаться к звуковой карте. До этого от разработчиков игр требовалось реализовать собственный движок звукового рендеринга в программном обеспечении.

DirectSound обеспечивает преобразование частоты дискретизации и микширование звука ( громкость и панорамирование ) для неограниченного количества источников звука; однако практические ограничения заключаются в количестве аппаратных источников звука и производительности программных микшеров.

В архитектуре DirectSound реализована концепция «кольцевого буфера», который будет непрерывно воспроизводиться в цикле. Прикладной программист создает звуковой буфер, затем непрерывно запрашивает его состояние с помощью «курсора чтения» и обновляет его с помощью «курсора записи». Есть два типа буферов - «потоковый» буфер, в котором хранятся непрерывные звуки, например фоновая музыка, и «статический» буфер, содержащий короткие звуки.

На поддерживаемых звуковых картах DirectSound будет пытаться использовать буферы с «аппаратным ускорением», то есть буферы, которые могут быть помещены в локальную память звуковой карты или доступны звуковой карте из системной памяти. Если аппаратное ускорение недоступно, DirectSound создаст звуковые буферы в системной памяти и будет использовать чисто программное микширование.

Некоторая поздня DOS-эпоха « табличные » звуковые карты , такие как Sound Blaster AWE32 и Gravis Ultrasound признаков посвященных ЦСП , которые были заимствованы из цифровых музыкальных инструментов . Эти карты имели локальную память, которую можно было использовать для буферизации нескольких аудиопотоков и микширования их на плате, тем самым разгружая процессор и значительно улучшая качество звука. Однако это было возможно только в DOS путем прямого программирования оборудования, а полнофункциональное «аппаратное ускорение» из локальной памяти никогда не было реализовано на этих картах из-за сложности двойной буферизации . Более поздние карты, такие как Sound Blaster Live! , Audigy и X-Fi могут напрямую обращаться к буферам системной памяти.

DirectSound3D

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

В 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, преобразование частоты дискретизации (SRC) KMixer для захвата потоков, поддержку многоканального звука и введение DirectMusic . Если аудиооборудование поддерживает аппаратное микширование (также известное как аппаратная буферизация или аппаратное ускорение DirectSound), DirectSound выполняет буферизацию непосредственно в устройстве рендеринга. Если потоки DirectSound используют аппаратное микширование, KMixer и его задержка задержки игнорируются. В Windows 98 и Windows Me звуковые драйверы WDM были предпочтительнее, но совместимость с моделью драйвера VxD была сохранена.

Хотя модель драйвера Windows (WDM) была доступна начиная с Windows 98, немногие производители звуковых карт использовали ее. Из-за внутренней буферизации KMixer представил значительную задержку обработки (30 мс в современных системах). Windows 98 также включает драйвер класса потоковой передачи WDM (Stream.sys) для удовлетворения этих требований к обработке потоков мультимедийных данных в реальном времени. Когда звуковая карта использует специальный драйвер для использования с поставляемым системой драйвером класса порта PortCls.sys или реализует мини-драйвер для использования с драйвером класса потоковой передачи, приложения могут полностью обходить KMixer и вместо этого использовать потоковые интерфейсы ядра для уменьшения задержки. .

Windows 2000 / XP

В Windows 2000 Microsoft также реализовала тот же звуковой стек на основе WDM в Windows NT , представив звуковые драйверы WDM и компонент микшера ядра ( KMixer ). В Windows XP Microsoft представила еще один улучшенный драйвер класса потоковой передачи ядра, AVStream . Начиная с Windows XP, аппаратное ускорение было также добавлено для обработки эффектов захвата DirectSound, таких как подавление акустического эха для USB-микрофонов, подавление шума и поддержка массивных микрофонов.

Windows Vista / Windows 7

Windows Vista имеет полностью переписанный звуковой стек, основанный на универсальной звуковой архитектуре . Из-за архитектурных изменений в переработанном звуковом стеке прямой путь от DirectSound к звуковым драйверам не существует. DirectSound, DirectMusic и другие API, такие как MME , эмулируются как экземпляры сеанса WASAPI . DirectSound работает в режиме эмуляции на программном микшере Microsoft. Эмулятор не имеет аппаратной абстракции, поэтому нет аппаратного ускорения DirectSound, а это означает, что аппаратное и программное обеспечение, полагающееся на ускорение DirectSound, могло снизить производительность. Вероятно, предполагаемое снижение производительности может быть незаметным, в зависимости от приложения и реального оборудования системы. В случае аппаратных 3D-звуковых эффектов, воспроизводимых с использованием DirectSound3D, они не будут воспроизводиться; это также нарушает совместимость с расширениями EAX.

Сторонние API, такие как ASIO и OpenAL , не подвержены этим архитектурным изменениям в Windows Vista, поскольку они используют IOCtl для непосредственного взаимодействия с аудиодрайвером. Решением для приложений, которые хотят воспользоваться преимуществами аппаратного ускорения высококачественного трехмерного позиционного звука, является использование OpenAL. Однако это работает, только если производитель предоставляет драйвер OpenAL для своего оборудования.

Windows 8

Аудиостек WASAPI в Windows 8 представляет поддержку «аппаратной разгрузки» нескольких аудиопотоков на звуковую карту для микширования и обработки эффектов, в дополнение к программной обработке, представленной в Vista, однако эта функциональность доступна только для приложений среды выполнения Windows . Аппаратные интерфейсы DirectSound и DirectMusic для драйверов звуковой карты не реализованы.

Windows CE

Хотя поддержка DirectSound была доступна в версиях Windows CE до 4.2, она была удалена, начиная с 5.0. Windows CE 6.0 также не поддерживает DirectSound, вместо этого предпочитая переписывать приложения для использования API Waveform Audio.

Реализации замены

После удаления DirectSound в Windows Vista появилось несколько заменяющих его реализаций.

Creative ALchemy (2007) от Sound Blaster обеспечивает аппаратное ускорение DirectSound3D и звуковых эффектов, таких как EAX. 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 без использования аппаратного ускорения.

Каждый, кто сталкивался с вопросом о качественном воспроизведении звука рано или поздно встречается с аббревиатурой ASIO, как важной и необходимой опцией.

Что это и в чем практический смысл?

Прежде всего, ASIO имеет отношение только к звуковой части записи/воспроизведения с компьютера через звуковую карту или USB-ЦАП под операционными системами семейства Windows. Тем, кто слушает музыку со смартфона или с сетевого проигрывателя с собственной ОС иметь представление ASIO тоже полезно, т.к. знание об этой «опции» позволяет избежать ряд проблем, присутствующих в смартфонах и соответственно позволяющая понять, почему не все платформы для звука одинаково полезны.

ASIO – это программный интерфейс передачи данных от программы, которая воспроизводит или принимает звуковой сигнал напрямую в драйвер звуковой карты, минуя звуковую подсистему ОС.

Необходимость в ASIO возникла исключительно для профессиональных задач. Самой большой проблемой была и остается минимальная задержка для передачи аудио сигнала. Когда мы смотрим фильм, нам не важно, сколько времени требуется системе для старта воспроизведения видео и аудио, доли миллисекунды или пару секунд после нажатия на кнопку «play». Главное, чтобы видео и аудио были синхронны относительно друг друга. В студии же требования очень жесткие, т.к. часто требуется игра вживую на виртуальных инструментах, с которых звук необходимо обрабатывать в реальном времени. Невозможно полноценно играть на midi клавиатуре, если нажатие на клавишу слышишь не сразу, а спустя секунду.

Штатно в ОС семейства Windows задержка составляет от 7 до 300 мс и зависит от текущей загруженности системы. Как несложно догадаться, звуковая система не является приоритетной в Windows и все что от нее требуется, это что бы звук просто не заикался, а для этого аудио данные собираются отдельный буфер и передаются сразу большим куском. Для сверх малых задержек буфер должен быть маленьким и постоянно передаваться небольшими пакетами.


ASIO является альтернативным мостом, который обеспечивает передачу звукового потока от программы до драйвера с фиксированным значением буфера, минуя штатную систему передачи данных ОС. Т.к. ASIO не является разработкой Microsoft (которой, к слову, на звук традиционно положить три кучи), то поддержка вывода и приема в ASIO ложится на плечи производителя ПО и звуковых устройств. Первоначально ASIO был разработан компанией Steinberg под свои продукты в момент перехода от MIDI к виртуальному синтезу и сегодня поддерживается практически всем профессиональным софтом и звуковыми интерфейсами.

Как несложно догадаться, аудиофилам без разницы на то, какая задержка в системе. Но полезно знать, на что ОС тратит свои силы под передачу звука и как это сказывается на качестве.

Как влияет звуковая подсистема ОС на звук


В ОС много программ, которые являются источниками звука, это Skype, ICQ, браузер с музыкой в вКонтакте, системными звуками, видеопроигрывателем и другими приложениями. Все эти звуковые потоки различаются как дискретностью, так и частотой семплирования, а на ЦАП должен придти всего один стерео поток с определенной разрядностью и частотой дискретизации. Соответственно все звуковые потоки необходимо заранее смикшировать. Что бы представить уровень проблемы, представим, что есть несколько фотографий с разными исходными разрешениями, которые нужно одновременно вывести на экран ЖК монитора, при этом каждая фотография должна заполнить весь экран. Если фото вывести пиксель в пиксель и фото займет часть экрана – это будет аналогично тому, что звук будет воспроизводиться медленнее или быстрее.

Если разрешение фотографии 600х480 пикселей, а разрешение монитора 1024х768, то необходимо фотографию предварительно перевести в 1024х768. Четкость фотографии несомненно снизится. Примерно так страдает и звук, который система пересчитывает из 44,100 кГц в 48000 или 96000 кГц. Качество ресемплера в Windows оставляет желать лучшего, т.к. идет максимальная экономия ресурсов.

Возвращаясь к фотографии, у нас есть фото с разрешением в 600х480 пикселей, 1024х768 пикселей и 2048х1536 пикселей и все фотографии надо вывести на 1024х768 пикселей. До сложения необходимо 600х480 и 2048х1536 пересчитать в 1024х768 и после три фотографии просуммировать, накладывая одну картинку на другую.

Обычно только одна программа воспроизводит основной звук, а остальные проигрывают звук периодически (ICQ, Skype) и их можно сравнить с логотипами и надписями поверх основной фотографии. Вполне очевидно, что картинка с исходным разрешением в 1024х768 меньше всего пострадает в качестве и если она будет основной и совпадать с разрешением монитора, то в снизится качество лишь вспомогательных картинок: логотип и надписи.

Так же и в системе можно формально выставить конечную частоту семплирования 44.100 кГц под аудиоплеер и пренебречь качеством системных звуков, которые звучат лишь время от времени.

Однако для наименьших потерь в качестве при микшировании звуковых потоков добавляется специальный шум (диттер) и системе все равно, одна программа воспроизводит звук или несколько. Таким образом, даже при воспроизведении всего одного звукового потока без его конвертирования в другую частоту семплирования, он все равно подвергается обработке и уже не поступит на ЦАП «бит в бит».

Если раньше ОС отслеживала, с какой частотой семплирования поступают на вход данные и автоматически выставляла максимальную поддерживаемую звуковой картой частоту дискретизации к входящим звуковым потокам (например при входящих 22, 44,1 и 48 кГц выставлялась 48 кГц, а при 22 и 44,1 понижалась до 44,1 кГц ), то начиная с Win7 в системе принудительно выставляется общая частота семплирования и автомата опорной частоты нет. Стабильность ОС повысилась, но метод не всех обрадовал.

Описанная ситуация в равной степени справедлива для всех ОС и платформ, которые могут воспроизводить звук одновременно с разных программ. В мобильном телефоне это к примеру воспроизведение телефонного разговора и системный сигнал о севшей батарее.



Условно общая схема выглядит так. При использовании ASIO Звуковой поток направляется сразу в микшер драйвера звуковой карты (Mixer Driver), минуя ресемплер (SRC) и микшер ОС.

Для необходимости воспроизвести звуковой поток «бит-в-бит” есть специальные режимы, в ОС Windows это «Kernel Streaming» (версии до XP) и WASAPI (версии после XP включительно). В таком режиме право передать звуковой поток имеет только одна программа в системе и тут полностью исключается микширование и пересчет данных. Более того, есть поддержка системой автоматического переключения опорной частоты (но при соответствующей поддержке драйвера звуковой карты).

Этот режим не рекомендуется использовать обычному пользователю, т.к. несет за собой разные проблемы. Например, пользователь включает Foobar2000 с WASAPI и после запускает видео ролик с ранее запущенного браузера. Звуковой драйвер не принимает звуковой поток от браузера и происходит крах флеш плагина. Налицо — система порушилась, а это: «печаль, беда и огорченье». Производители ПО крайне редко делают возможность вывода звука в KS/WASAPI, т.к. воинствующие пользователи будут винить в проблемах не свои кривые руки, а программу «из-за которой все порушилось».

Режимы KS/WASAPI можно встретить только в аудиоредакторах, секвенсорах и редких программных плеерах, предназначенных для аудиофилов – под подготовленных пользователей, которые понимают, что будет страдать стабильность работы ОС и кроме плеера/аудиоредактора/секвенсора звука не будет. Продвинутые аудиофилы, отказавшиеся от встроенного звука обычно для музыки используют отдельную звуковую карту, а системные звуки направляют на встроенный звук, что обеспечивает высокую стабильность работы ОС.

Т.е. по сути, KS/WASAPI – это идеальный вариант для вывода звука для аудиофила. Поддерживается в Foobar2000, AIMP, Winamp. Тем, кто хочет и фильмы в качестве слушать – есть плеер Light Alloy.

ASIO или WASAPI?

Профессионалы используют режим ASIO, который передает в драйвер звуковой поток «бит-в-бит» и обеспечивает фиксированный уровень задержки. WASAPI штатными настройками ОС не позволяет управлять задержкой. Уровень задержки в профессиональной работы приоритетнее, а «бит-в-бит» лишь приятный бонус.

Что происходит, когда задействованы одновременно звуковая система ОС и ASIO?

Для звукового драйвера есть два звуковых потока, одни из них приходит из подсистемы ОС, другой из ASIO. Исключительно от того, как был написан драйвер, будет происходить микширование финального потока до ЦАП. В одних случаях, если есть звуковой поток из ASIO, то звук от подсистемы ОС отключается, в других случаях происходит микс потоков из ОС и ASIO и «бит-в-бит» остается только в теории. ASIO, как и WASAPI позволяет лишь избежать алгоритмов SRC (передискретизации) и микширования подсистемы ОС и ничего более. Целостность финального потока будет зависеть от драйвера.

В любом случае, практически всегда звуковая карта работает в том же режиме семплирования, что и поступающий поток из ASIO, что дает некоторое преимущество для ASIO.

Микширование в драйвере может быть программным, а может аппаратным. Особенно забавно выглядят попытки аудиофилов в качестве источника ставить профессиональный интерфейс для «качественной цифры», где цифра выдается после аппаратного микширования. Впрочем, некоторым отмикшированный звук нравится больше оригинального … чище, прозрачнее и душевней…

Если логически просмотреть цепочку, по которой должен пройти звуковой поток, то для идеологии «бит-в-бит» звуковой интерфейс должен поддерживать всего один вариант, либо отключать микширование потоков при работе только одного интерфейса. Только в этом случае шансы получить «бит-в-бит» максимальны.


К примеру, возьмем OPPO HA-1 c поддержкой ASIO. Если запустить одновременно Foobar2000 с WASAPI и AIMP с ASIO, то на выходе мы услышим одновременно оба звуковых потока. Цифровых выходов у OPPO нет и соответственно нет возможности проверить звуковой поток на «бит-в-бит» отдельно для ASIO и WASAPI перед ЦАП.

А вот с ASUS Essence STU ситуация иная. Если AIMP с ASIO играет, то Foobar2000 с WASAPI уже молчит, звуковые потоки не смешиваются, отдавая приоритет для ASIO. Проверить цифровой поток аналогично возможности нет, но шансов, что звуковой поток поступил «бит-в-бит» на порядок больше.

Считается, что USB-ЦАП обязательно должен поддерживать ASIO, но на практике мы получаем дополнительное звено, где должны смешиваться или переключаться потоки из звуковой системы ОС и ASIO. И тут отсутствие ASIO – это отсутствие неизвестного звена, где может быть принудительное микширование, которое нельзя протестировать без цифровых выходов. В тоже время микширование на этом этапе обычно производится в разрядности 24 или 32 бита и соответственно услышать шум диттера маловероятно. Проблема лишь в идеологии «Hi-End».

Является ли ASIO панацеей от всех бед?

Как показывает практика, все зависит от драйвера звукового устройства. Если устройство профессиональное, то обычно стабильности и качеству у производителя ASIO максимум внимания. Если устройство бытовое, то ASIO может работать на порядок хуже режима KS/WASAPI. С практической точки зрения при выборе использования KS/WASAPI и ASIO нужно использовать тот интерфейс, с которым ОС работает более стабильно.

Универсальный драйвер ASIO4ALL


Драйвер ASIO4ALL необычайно популярен, но является при этом мостом между выходом ASIO из программы на вход KS/WASAPI в ОС. Это важно знать, т.к. если у вас звуковая карта не поддерживает ASIO, то после установки ASIO4ALL в том же Foobar2000 у вас выбор, выбрать изначально вывод в KS/WASAPI или ASIO через ASIO4ALL, который направит звуковой поток в тот же KS/WASAPI в ОС.

Ремарка для фанатов ASIO4ALL – да, там есть еще разные настройки, вроде выбора буфера и т.п., но эти возможности нужны лишь в профессиональной работе и ничего полезного не дают аудиофилам, для которых предназначен данный материал.

Что дает право утверждать, что ASIO4ALL доносит данные «бит-в-бит» до KS/WASAPI? Ведь теория и практика зачастую дают противоположные результаты. Для оценки качества работы ASIO4ALL был задействован Audiolab M-DAC с функцией проверки входящего звукового потока на «bit perfect» через воспроизведение специального звукового файла. Тест подтвердил, что данные приходят действительно «бит-в-бит» при воспроизведении из Foobar2000 через ASIO4ALL.

Кстати, приходили утверждения со стороны программистов, что например ASIO драйвер внешних карт E-MU (USB версий) сделан аналогично ASIO4ALL в виде моста и именно это является источником низкой стабильности карт…

Android и «бит-в-бит»

Возвращаясь к плеерам на базе ОС Android. В данной ОС есть аналогичный режим KS/WASAPI, но вот явных настроек под него нет. Единственный программный плеер, в котором есть режим прямого вывода в ЦАП используется в iBasso DX100. Разумеется, собственный программный плеер работает только в DX100 его нельзя скачать и поставить например в плеер Sony.

Проверить работу в Android на «бит-в-бит» очень просто. Запустите любой будильник и плеер. Если поверх звука из плеера вы услышите будильник, то никаких «бит-в-бит» на выходе нет.

ASIO – это возможность передать звуковой поток “бит-в-бит” минуя обработку звука в подсистеме ОС, но помимо ASIO есть и альтернативный вариант KS/WASAPI. Качество и точность передачи в конечном итоге обеспечивает лишь драйвер звукового устройства и порой отсутствие ASIO лишь отдельный плюс.



Наверное практически всем известно, что с выходом Windows Vista ещё в 2007 году, а в след за ней и во всех последующих версиях Windows звуковой API DirectSound3D был удален из Windows, вместо DirectSound и DirectSound3D стали использоваться новые API XAudio2 и X3DAudio. Вследствие чего в старых играх стали недоступны звуковые спецэффекты ЕАХ(звуковые эффекты окружающей среды). В этой статье я расскажу, как вернуть тот самый DirectSound3D/EAX во все старые игры, которые поддерживают данные технологии играя на Windows 7/8/10. Конечно, опытные геймеры всё это знают, но возможно кому-то статья будет полезна.

Старые игры не ушли на свалку истории, наоборот они пользуются огромным спросом, как у пользователей старшего поколения, так и у младшего. Старые игры лучше смотрятся на современных мониторах с высоким разрешением, для многих игр выходят моды улучшающие текстуры и шейдеры, но вот со звуком поначалу не повезло. С выходом следующего поколения Windows Vista, вслед за Windows ХР, разработчики Microsoft сочли, что DirectSound3D морально устарел — он имел ограничение в 6-канальный звук, не поддерживал сжатие звука, был процессорно зависимым и поэтому ему пришел на смену XAudio2/X3DAudio. А так как технология ЕАХ компании Creative была не самостоятельным API, как был в своё время A3D от компании Aureal, а всего лишь расширением DirectSound3D — звуковые карты компании Creative оказались за бортом. Если не использовать специальные программные врапперы, то играя на Windows 7/8/10 в старых играх пункты меню включающие EAX будут не активны. А без EAX звук в играх будет не таким сочным, объемным, позиционируемым.

Для решения этой проблемы компания Creative разработала программу-враппер ALchemy, которая перенаправляет вызовы DirectSound3D и EAX в кроссплатформенный API OpenAL. Но эта программа работает официально со звуковыми картами компании Creative и то не совсеми моделями. Например, современная карта Audigy Rx имеющая аппаратный DSP-процессор СА10300 официально не работает. Для владельцев других звуковых карт, например встроенной Realtek, нужно использовать ещё программный-драйвер Creative Sound Blaster X-Fi MB, который стоит денег. Можно ещё попробовать родную программу 3DSoundBack, но она не была закончена компанией Realtek — остановилась на стадии beta версии, работает не качественно и не со всеми чипами. Но есть способ лучше, он проще в использовании и бесплатен.

Первый способ

Начну со звуковых карт компании ASUS. Звуковые карты компании ASUS DGX/DSX/DX/D1/Phoebus базируются на чипах C-Media и даже чипы ASUS AV66/AV100/AV200 — это всё те же перемаркированные чипы C-Media. В характеристиках этих звуковых карт написано, что они поддерживают ЕАХ 1/2/5. Все эти чипы получили в наследство от своего предшественника CMI8738 DSP-блок программно-аппаратный EAX 1/2, EAX 5 уже программный.

Владельцам карт серии Xonar очень повезло, все видели кнопку GX на панели драйвера, но возможно не все знают, что она делает. Покажу на скриншотах из программы AIDA64, вот так выглядит закладка DirectX-звук при не активной кнопке и у владельцев встроенных звуковых карт Realtek в Windows 7/8/10:


Все звуковые буферы равны нулю, все API не активны. А вот сразу после включения кнопки GX мы видим


Т.е. очень удобно — не нужно запускать дополнительные программы, как Creative ALchemy и копировать в каждую папку с игрой файл dsound.dll. Вот возникает большой вопрос, почему так не сделала компания Creative в своих драйверах? Более того, она во всех новых моделях Sound Blaster Z/Zx/AE не использует аппаратный DSP-процессор для обработки ЕАХ, а делает это программно через драйвер по упрощенным алгоритмам. Некоторые люди считают, что программной обработки звука достаточно, потому что современные ЦП намного мощней процессоров звуковых карт 10-летней давности, которые аппаратно обрабатывали звук. Это совсем не так. ЦП оптимизирован обрабатывать х86-команды, а DSP гораздо быстрей обрабатывает звук центрального процессора, как и видеокарта быстрей производит растеризацию, чем ЦП. Центрального процессора хватит для не сложных алгоритмов, а вот качественная реверберация с множеством источников звука будет отнимать слишком много ресурсов даже мощного ЦП, что скажется на падении ФПС в играх. Это уже признала компания Microsoft и уже вернула поддержку обработки звука DSP-процессорами в Windows 8, а также компания Sony, которая добавила в свою приставку PS5 отдельный чип для обработки 3D-звука.

Второй способ

Этот вариант подойдет для пользователей встроенной звуковой карты в материнскую плату, которых большинство. Есть такой проект DSOAL — это программная эмуляция DirectSound3D и ЕАХ с помощью OpenAL(OpenAL должен быть обязательно установлен в системе) не требующая аппаратного ускорения. Если ваш звуковой чип имеет какие-то аппаратные функции для обработки звука то они будут использоваться автоматически. Программа настолько хорошо работает, что через неё ЕАХ заработал у меня на всех старых играх, где есть галочка ЕАХ в настройках. Вот так выглядит окно AIDA64, если скопировать файлы DSOAL в папку программы:


Если же этого не произошло и у вас картинка, как на самом первом скриншоте, значит родной Windows dsound.dll не даёт перехватить API, как это было и в моём случае. Тогда поможет такой метод — нужно будет загрузиться с какого-нибудь Windows Live-CD образа и удалить файл dsound.dll не без помощи утилиты Unlocker (предварительно сделав копию на случай отката) из каталога С:\Windows\SysWOW64 и записать вместо него те самые dsoal-aldrv.dll и dsound.dll. Я так сделал и у меня, как сама Windows, так и все игры работали без сбоев и так даже удобней — не нужно каждый раз копировать эти файлы в папки с играми, в крайнем случае, можно будет вернуть обратно родной dsound.dll на место. Правда такой способ подойдет, если вы не будете пользоваться другими звуковыми картами ASUS или Creative, потому что в этом случае у вас всегда DirectSound3D будет работать только через DSOAL, а не через родной драйвер или ALchemy.

Послушать DSOAL можно в этом видео:

Сравнивая как звучит ЕАХ на разных звуковых картах я с удивлением обнаружил, что на встроенном Realtek ЕАХ звучит лучше, чем на Асусах или на моей Audigy Rx. Если почитать даташиты, то практически все чипы Realtek поддерживают DirectSound3D/ЕАХ 1&2. Запустив AIDA64 из под Windows XP можно увидеть:


Оказывается, Реалтеки в отличии от ASUS и Creative звуковых карт поддерживают ещё какой-то I3DL2 (не в каждом Реалтековском даташите об этом написано). I3DL2(Interactive 3D Audio Level 2) — это открытый промышленный стандарт для работы с 3D интерактивным звуком, это расширение для DirectSound3D для работы с реверберацией и окклюзией. В принципе аналог ЕАХ, но звучит приятней — более приятная реверберация в играх шагов, когда персонаж бежит по пещере или замку, более реалистичное звучание объемного звука в помещениях. Поэтому если старая игра работает на Windows XP то я играю только на ХР, вдруг звуковой движок сможет задействовать I3DL2. DSOAL хоть и открытый проект и его любой может усовершенствовать, но он никогда не сможет задействовать I3DL2, т.к. OpenAL не работает с I3DL2, а только с ЕАХ 1-5. Но есть и хорошая новость — начиная с Windows 8 I3DL2 включен в библиотеку XAudio 2.7. Так что звук в новых играх под Windows 10 будет лучше, чем под Windows 7.

Ну и напоследок хочу напомнить, что все эти технологии 3D-звука разрабатывались для наушников, на 2х колонках вы практически 3D-звука не услышите. Чтобы насладиться детальным звуком наушники уровня SVEN AP860 не подойдут, из недорогих наушников нужно начинать с Axelvox HD 241 — уже будет разница со SVEN AP860, как небо и земля. Вот как-то так ориентируйтесь.

DirectSound - это устаревший программный компонент библиотеки Microsoft DirectX для операционной системы Windows , замененный XAudio2 . Он обеспечивает интерфейс с малой задержкой для драйверов звуковых карт, написанных для Windows 95 через Windows XP, и может обрабатывать микширование и запись нескольких аудиопотоков. DirectSound был первоначально написан для Microsoft Джоном Майлзом .

Помимо предоставления основной услуги передачи аудиоданных на звуковую карту, DirectSound предоставляет другие важные возможности, такие как запись и микширование звука, добавление эффектов к звуку (например, реверберация , эхо или флэнджер ) с использованием буферов с аппаратным ускорением в Windows 95 - XP. и размещение звуков в трехмерном пространстве . DirectSound также предоставляет средства для захвата звуков с микрофона или другого входа и управления эффектами захвата во время захвата звука.

После многих лет разработки DirectSound сегодня представляет собой зрелый API , предоставляющий множество других полезных возможностей, таких как возможность воспроизводить многоканальные звуки с высоким разрешением. Хотя DirectSound был разработан для использования в играх, сегодня он используется для воспроизведения звука во многих аудиоприложениях. DirectShow использует возможности аппаратного ускорения звука DirectSound, если возможности аппаратного ускорения звука звуковой карты существуют и предоставляются аудиодрайвером.

СОДЕРЖАНИЕ

Функции

DirectSound - это API пользовательского режима, который обеспечивает интерфейс между приложениями и драйвером звуковой карты , позволяя приложениям создавать звуки и воспроизводить музыку.

DirectSound считался революционным, когда он был представлен в 1995 году, поскольку он позволял использовать несколько одновременных аудиопотоков и позволял нескольким приложениям одновременно обращаться к звуковой карте. До этого от разработчиков игр требовалось реализовать собственный движок звукового рендеринга в программном обеспечении.

DirectSound обеспечивает преобразование частоты дискретизации и микширование звука ( громкость и панорамирование ) для неограниченного количества источников звука; однако практические ограничения заключаются в количестве аппаратных источников звука и производительности программных микшеров.

В архитектуре DirectSound реализована концепция «кольцевого буфера», который будет непрерывно воспроизводиться в цикле. Прикладной программист создает звуковой буфер, затем непрерывно запрашивает его состояние с помощью «курсора чтения» и обновляет его с помощью «курсора записи». Есть два типа буферов - «потоковый» буфер, в котором хранятся непрерывные звуки, например фоновая музыка, и «статический» буфер, содержащий короткие звуки.

На поддерживаемых звуковых картах DirectSound будет пытаться использовать буферы с «аппаратным ускорением», то есть буферы, которые могут быть помещены в локальную память звуковой карты или доступны звуковой карте из системной памяти. Если аппаратное ускорение недоступно, DirectSound создаст звуковые буферы в системной памяти и будет использовать чисто программное микширование.

Некоторая поздня DOS-эпоха « табличные » звуковые карты , такие как Sound Blaster AWE32 и Gravis Ultrasound признаков посвященных ЦСП , которые были заимствованы из цифровых музыкальных инструментов . Эти карты имели локальную память, которую можно было использовать для буферизации нескольких аудиопотоков и микширования их на плате, тем самым разгружая процессор и значительно улучшая качество звука. Однако это было возможно только в DOS путем прямого программирования оборудования, а полнофункциональное «аппаратное ускорение» из локальной памяти никогда не было реализовано на этих картах из-за сложности двойной буферизации . Более поздние карты, такие как Sound Blaster Live! , Audigy и X-Fi могут напрямую обращаться к буферам системной памяти.

DirectSound3D

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

В 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, преобразование частоты дискретизации (SRC) KMixer для захвата потоков, поддержку многоканального звука и введение DirectMusic . Если аудиооборудование поддерживает аппаратное микширование (также известное как аппаратная буферизация или аппаратное ускорение DirectSound), DirectSound выполняет буферизацию непосредственно в устройстве рендеринга. Если потоки DirectSound используют аппаратное микширование, KMixer и его задержка задержки игнорируются. В Windows 98 и Windows Me звуковые драйверы WDM были предпочтительнее, но совместимость с моделью драйвера VxD была сохранена.

Хотя модель драйвера Windows (WDM) была доступна начиная с Windows 98, немногие производители звуковых карт использовали ее. Из-за внутренней буферизации KMixer представил значительную задержку обработки (30 мс в современных системах). Windows 98 также включает драйвер класса потоковой передачи WDM (Stream.sys) для удовлетворения этих требований к обработке потоков мультимедийных данных в реальном времени. Когда звуковая карта использует специальный драйвер для использования с поставляемым системой драйвером класса порта PortCls.sys или реализует мини-драйвер для использования с драйвером класса потоковой передачи, приложения могут полностью обходить KMixer и вместо этого использовать потоковые интерфейсы ядра для уменьшения задержки. .

Windows 2000 / XP

В Windows 2000 Microsoft также реализовала тот же звуковой стек на основе WDM в Windows NT , представив звуковые драйверы WDM и компонент микшера ядра ( KMixer ). В Windows XP Microsoft представила еще один улучшенный драйвер класса потоковой передачи ядра, AVStream . Начиная с Windows XP, аппаратное ускорение было также добавлено для обработки эффектов захвата DirectSound, таких как подавление акустического эха для USB-микрофонов, подавление шума и поддержка массивных микрофонов.

Windows Vista / Windows 7

Windows Vista имеет полностью переписанный звуковой стек, основанный на универсальной звуковой архитектуре . Из-за архитектурных изменений в переработанном звуковом стеке прямой путь от DirectSound к звуковым драйверам не существует. DirectSound, DirectMusic и другие API, такие как MME , эмулируются как экземпляры сеанса WASAPI . DirectSound работает в режиме эмуляции на программном микшере Microsoft. Эмулятор не имеет аппаратной абстракции, поэтому нет аппаратного ускорения DirectSound, а это означает, что аппаратное и программное обеспечение, полагающееся на ускорение DirectSound, могло снизить производительность. Вероятно, предполагаемое снижение производительности может быть незаметным, в зависимости от приложения и реального оборудования системы. В случае аппаратных 3D-звуковых эффектов, воспроизводимых с использованием DirectSound3D, они не будут воспроизводиться; это также нарушает совместимость с расширениями EAX.

Сторонние API, такие как ASIO и OpenAL , не подвержены этим архитектурным изменениям в Windows Vista, поскольку они используют IOCtl для непосредственного взаимодействия с аудиодрайвером. Решением для приложений, которые хотят воспользоваться преимуществами аппаратного ускорения высококачественного трехмерного позиционного звука, является использование OpenAL. Однако это работает, только если производитель предоставляет драйвер OpenAL для своего оборудования.

Windows 8

Аудиостек WASAPI в Windows 8 представляет поддержку «аппаратной разгрузки» нескольких аудиопотоков на звуковую карту для микширования и обработки эффектов, в дополнение к программной обработке, представленной в Vista, однако эта функциональность доступна только для приложений среды выполнения Windows . Аппаратные интерфейсы DirectSound и DirectMusic для драйверов звуковой карты не реализованы.

Windows CE

Хотя поддержка DirectSound была доступна в версиях Windows CE до 4.2, она была удалена, начиная с 5.0. Windows CE 6.0 также не поддерживает DirectSound, вместо этого предпочитая переписывать приложения для использования API Waveform Audio.

Реализации замены

После удаления DirectSound в Windows Vista появилось несколько заменяющих его реализаций.

Creative ALchemy (2007) от Sound Blaster обеспечивает аппаратное ускорение DirectSound3D и звуковых эффектов, таких как EAX. 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 без использования аппаратного ускорения.

Читайте также: