Введение
Библиотека программного обеспечения для операционной системы Windows. DirectSound – это устаревший программный компонент библиотеки Microsoft DirectX для операционной системы Windows, замененный XAudio2. Он предоставляет интерфейс с низкой задержкой к драйверам звуковых карт, разработанным для Windows 95 – Windows XP, и позволяет обрабатывать микширование и запись нескольких аудиопотоков. DirectSound был изначально разработан для Microsoft Джоном Майлзом. Помимо основной функции передачи аудиоданных на звуковую карту, DirectSound предоставляет и другие важные возможности, такие как запись и микширование звука, добавление звуковых эффектов (например, реверберации, эха или фленджера), использование аппаратных буферов с ускорением (если звуковая карта поддерживает аппаратное ускорение звука) в Windows 95 – XP, а также позиционирование звуков в трехмерном пространстве. DirectSound также позволяет захватывать звук с микрофона или других источников и управлять эффектами при записи звука. После многих лет разработки DirectSound стал зрелым API и предоставляет множество других полезных функций, включая возможность воспроизведения многоканального звука в высоком разрешении. Изначально DirectSound разрабатывался для игр, но сегодня он используется для воспроизведения звука во многих аудиоприложениях. DirectShow использует возможности аппаратного ускорения звука DirectSound, если звуковая карта поддерживает аппаратное ускорение и эти возможности доступны через драйвер звуковой карты.
DirectSound is a deprecated software component of the Microsoft DirectX library for the Windows operating system, superseded by XAudio2. It provides a low latency interface to sound card drivers written for Windows 95 through Windows XP and can handle the mixing and recording of multiple audio streams. DirectSound was originally written for Microsoft by John Miles. Besides providing the essential service of passing audio data to the sound card, DirectSound provides other essential capabilities such as recording and mixing sound, adding effects to sound (e. g., reverb, echo, or flange), using hardware accelerated buffers (if the sound card supports hardware audio acceleration) in Windows 95 through XP, and positioning sounds in 3D space. DirectSound also provides a means to capture sounds from a microphone or other input and controlling capture effects during audio capture. After many years of development, today DirectSound is a mature API, and supplies many other useful capabilities, such as the ability to play multichannel sounds at high resolution. While DirectSound was designed to be used by games, today it is used to play audio in many audio applications. DirectShow uses DirectSound's hardware audio acceleration capabilities if the sound card's hardware audio acceleration capabilities exist and are exposed by the audio driver.
Особенности
DirectSound — это API пользовательского режима, обеспечивающий интерфейс между приложениями и драйвером звуковой карты, позволяя приложениям генерировать звуки и воспроизводить музыку. DirectSound считался революционным, когда он был представлен в 1995 году, поскольку поддерживал несколько одновременных аудиопотоков и позволял нескольким приложениям одновременно обращаться к звуковой карте. До этого разработчикам игр требовалось самостоятельно реализовывать движок рендеринга звука в программном обеспечении. DirectSound обеспечивает преобразование частоты дискретизации и микширование звука (громкость и панорамирование) для неограниченного числа аудиоисточников, однако практическими ограничениями являются количество аппаратных аудиоисточников и производительность программных микшеров. Архитектура DirectSound основана на концепции «кольцевого буфера», который непрерывно воспроизводится по циклу. Программист приложения создает звуковой буфер, затем непрерывно опрашивает его состояние с помощью «курсора чтения» и обновляет его с помощью «курсора записи». Существуют два типа буферов: буфер «потока», предназначенный для непрерывных звуков, таких как фоновая музыка, и буфер «статический», предназначенный для коротких звуков. На поддерживаемых звуковых картах DirectSound пытается использовать «аппаратно ускоренные» буферы, то есть те, которые могут быть размещены в локальной памяти звуковой карты или доступны звуковой карте из системной памяти. Если аппаратное ускорение недоступно, DirectSound создает аудиобуферы в системной памяти и использует исключительно программное микширование. Некоторые звуковые карты поздней эпохи DOS, такие как Sound Blaster AWE32 и Gravis Ultrasound, оснащались выделенными DSP, позаимствованными из цифровых музыкальных инструментов. Эти карты имели локальную память, которую можно было использовать для буферизации нескольких аудиопотоков и их микширования непосредственно на карте, тем самым снижая нагрузку на процессор и значительно улучшая качество звука. Однако это было возможно только в 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, конвертацию частоты дискретизации KMixer (SRC) для потоков захвата, поддержку многоканального аудио и представила 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 и Windows 7)
Windows Vista включает в себя полностью переработанный аудиостек, основанный на Universal Audio Architecture. Из-за архитектурных изменений в переработанном аудиостеке прямого пути от DirectSound к аудиодрайверам не существует. DirectSound, DirectMusic и другие API, такие как MME, эмулируются как экземпляры сеансов WASAPI. DirectSound работает в режиме эмуляции на программном микшере Microsoft. Эмулятор не имеет аппаратной абстракции, поэтому аппаратное ускорение DirectSound отсутствует, что означает, что оборудование и программное обеспечение, полагающееся на аппаратное ускорение DirectSound, может демонстрировать сниженную производительность. Вероятно, ожидаемое снижение производительности может быть незаметным, в зависимости от приложения и фактической аппаратной конфигурации системы. В случае аппаратных 3D-звуковых эффектов, воспроизводимых с помощью DirectSound3D, они не будут воспроизводиться, что также нарушает совместимость с расширениями EAX. Сторонние API, такие как ASIO и OpenAL, не затрагиваются этими архитектурными изменениями в Windows Vista, поскольку они используют IOCtl для непосредственного взаимодействия с аудиодрайвером. Решением для приложений, желающих воспользоваться преимуществами аппаратного ускорения высококачественного 3D-позиционного звука, является использование OpenAL. Однако это возможно только в том случае, если производитель предоставляет драйвер OpenAL для своего оборудования.
Windows 8 (вводится в действие)
WASAPI аудиостек в Windows 8 представляет поддержку "аппаратной разгрузки" нескольких аудиопотоков на звуковую карту для микширования и обработки эффектов, в дополнение к программной обработке, представленной в Vista, однако эта функциональность реализована только для приложений Windows Runtime. Аппаратные интерфейсы DirectSound и DirectMusic к драйверам звуковых карт не поддерживаются.
Windows CE
Хотя поддержка DirectSound была доступна в версиях Windows CE до 4.2, она была удалена, начиная с версии 5.0. Windows CE 6.0 также не поддерживает DirectSound, а вместо этого рекомендует переписывать приложения с использованием Waveform Audio API.
Замены
После удаления DirectSound в Windows Vista появилось несколько заменных реализаций. Sound Blaster Creative ALchemy (2007) обеспечивает аппаратное ускорение 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, без аппаратного ускорения. DSOAL – это библиотека с открытым исходным кодом, эмулирующая DirectSound 3D и EAX с использованием OpenAL. Можно использовать либо аппаратную реализацию OpenAL, либо OpenAL Soft (которая обеспечивает HRTF).