Direct Sound в объятиях программиста

Фленов Михаил

Спецвыпуск Xakep, номер #044, стр. 044-014-1

(www.vr-online.ru)

Кодим простейший плеер с помощью знаменитого API

В статье про стандарты мы уже говорили о такой могучей вещи, как DirectSound, и даже расписали все ее позитивные стороны. Но наш номер был бы неполным без сурового взгляда кодера на этот вопрос :).

Звуковые карты бывают разными, и возможности их отличаются очень сильно. Так ESS может с приемлемым качеством воспроизводить и записывать звук, а Creative Sound Blaster Live 256 уже поддерживает полноценный четырехканальный звук с множеством эффектов, фильтров и 3D. Если написать прогу, которая будет воспроизводить звук через ESS, то она будет работать практически везде. Но если задействовать уникальные возможности определенного железа, то где гарантия, что она будет работать и с другой железкой? Конечно же, гарантии нет, и в этом случае можно поиметь кучу проблем за свои же деньги :). Логично предположить, что должна быть какая-то библиотека, которая позволит использовать максимум возможностей различных звуковух. Первой из таких библиотек под Windows была Multimedia System (MMSystem), которая давала возможность получить доступ к основным возможностям воспроизведения и записи. Если звуковуха что-то не поддерживала, то это «что-то» просто обрубалось. Такие вещи, как 3D звук, тогда просто отсутствовали.

Рождение Direct Sound

Уже в середине 90-х корпорация Microsoft начала понимать, что библиотека MMSystem устарела по всем статьям. Нужно было что-то новое и более мощное. Адаптировать старую библиотеку уже не было смысла, поэтому в пакет DirectX был интегрирован блок Direct Sound. Тут существовала небольшая засада, поскольку времена тогда были темные, а DirectX весил довольно много и присутствовал далеко не на каждом компьютере. Именно поэтому, начиная с Windows 98, вся библиотека DirectX вместе DirectSound входит в стандартную поставку, и теперь разработчики могут быть уверены в ее наличии на компьютере пользователя. Теперь не нужно заставлять кого-то качать мегабайты по медной паре только для того, чтобы заставить работать утилиту в пару килобайт.

Эмуляция

Когда разрабатывалась Direct Sound для окон (а это были времена Windows 3.x), MS сделала так, чтобы можно было работать с большим количеством оборудования, при этом максимально используя его возможности. В DirectX (и, конечно же, в Direct Sound) звуковая система может работать на двух уровнях:

- HAL (Hardware Abstraction Layer или уровень абстракции оборудования) позволяет абстрагироваться от звуковухи и вне зависимости от железки использовать все навороченные возможности. Например, драйвер встроенной в чипсет звуковухи может требовать одни функции для создания какого-то эффекта, а драйвер звуковой от Creative - другие функции. Благодаря Direct Sound нам глубоко параллельны эти функции. Достаточно использовать API из DirectSound, а он уже сам заставит звук литься так, как надо.

- HEL (Hardware Emulation Layer или уровень эмуляции оборудования) позволяет эмулировать возможности, которые аппаратно не поддерживаются железом. Таким образом, вне зависимости от железки, которая установлена на компьютере пользователя, прога будет работать корректно.

Содержание  Вперед на стр. 044-014-2
ttfb: 3.4849643707275 ms