В данном случае через интерфейс DirectSound ПО имело прямой доступ к аппаратным ресурсам звуковой карты - микширование, преобразование частоты дискретизации, различные эффекты (включая 3D позиционирование) - в общем, всё, что было необходимо, как для музыки/фильмов, так и для игр.
Конечно, были свои проблемы, в частности с микшером Windows (неточная регулировка громкости, принудительная некачественная передискретизация всего и вся до 48 кГц), но они вполне легко обходились с помощью Kernel Streaming (тот самый поток, идущий мимо kmixer), а иногда даже с помощью хороших драйверов (у Creative например таковые появись только в линейке X-Fi. На аудиокартах Audigy микшер ведет себя не вполне адекватно, но, при желании, справиться с этим не сложно).
API - Application Programming Interface
APO - Audio Processing Object
CPT - Cross Process Transport
KST - Kernel Streaming Transport
Теперь поясню. Суть такова: все программы, заточенные под вывод на DirectSound и ничего не знающие о новом интерфейсе, подключаются к WASAPI в общем режиме (WASAPI Shared), далее происходит следующее:
Составляющие WASAPI (используя только ресурсы центрального процессора), выполняют все нужные (и не очень) преобразования:
Базовые возможности обработки для звуковых карт не умеющих обрабатывать звук «своими силами»
+ поддержка на входе практически любого формата аудио - многоканальное аудио с частотой дискретизации до 192 кГц и глубиной квантования до 32-bit float
+ повышенная стабильность (спорное утверждение, в принципе)
Принудительный ресемплинг сомнительного качества
- микширование каналов без эффектов окружения (или же они очень примитивны)
- сужение динамического диапазона (особенно в режиме 16 бит)
- отсутствие доступа к аппаратному DSP, т.е. потеря всего его функционала, включая эффекты EAX в играх (в т.ч. и на картах, где EAX эмулировался программно - так как в WASAPI такого понятия даже нет нет)
- щелчки, хрипы и прочие последствия связанные с использованием ресурсов ЦП.
Как видно, больше всего не повезло компьютерным меломанам-аудиофилам (надеюсь, никто не обидится) и геймерам.
Люди же, не особо интересующиеся тем, что происходит со звуком на пути к звуковой карте - возможно даже получат определенное улучшение (хотя, опять же, им скорее всего всё равно - лишь бы работало)
А теперь, о том как преодолеть большинство из вышеперечисленных проблем, ибо, к великому несчастью, с выходом так любимой многими Windows 7, Microsoft никакой революции в плане звука нам не устроила.
2. Есть и другой способ. Если ваша звуковая карта имеет родной драйвер ASIO - вам крупно повезло. ASIO функционирует совершенно отдельно от WASAPI, так что, при прослушивании музыки системные звуки не будут отключаться - потоки ASIO и WASAPI будут микшироваться самой звуковой картой.
Вывод: если ваш драйвер ASIO не вызывает сомнений, используйте его.
Да, чуть не забыл - ASIO4ALL использовать нежелательно
- как и Kernel Streaming, в этой ОС он работает очень нестабильно (судя по всему, из-за того, что другие звуки, идущие через WASAPI, периодически блокируют Kernel Transport).
Теперь непосредственно к делу .
Конечно же, для прослушивания музыки я рекомендую foobar2000 с плагином ASIO Output или WASAPI output support - ни за что другое ручаться я не могу. Подробная настройка вывода звука через foobar2000 описана .
Любителей AIMP я разочарую - WASAPI Exclusive не предполагается даже в AIMP3 beta (только Shared), а ASIO в нем пока что сильно хромает (не умеет выставлять правильное количество каналов вывода, что приводит к нехорошим результатам).
Пользователям Winamp могу предложить плагины ASIO output Plugin или даже такое: OpenAL Output - кстати, еще один способ обхода WASAPI (видно из блоксхемы).
В современных играх звук занимает значимое место. Безусловно, приятно наблюдать на экране красивую картинку, однако немаловажную роль в создании атмосферы имеет и звук. Ведь пространство не ограничивается областью, попадающей в поле зрения протагониста. Толковая реализация позволяет услышать разницу в выстреле из разных видов вооружения, определить, находится ли враг в помещении или на открытом пространстве. В жанрах вроде ужастиков и сетевых шутеров значимость звукового ряда вовсе трудно переоценить.
Именно о трехмерном звуке, движках, производителях мы поговорим в данной обзорной статье.
3D-звук подразумевает расположение источников звука вокруг слушателя.
3D-звук можно разделить на две составные части. Во-первых, это атмосфера (музыка, эффекты общего плана, реверберация - тип помещения, окружение). Во-вторых, позиционирование, чтобы игрок мог определить, где расположен источник звука, а также, в идеале, его высоту и размеры.
Схематическое изображение того, как эффекты реверберации позволяют на слух определять параметры помещения
Для усиления ощущения при восприятии звука слушателем применяются различные технологии. Именно их качественное воплощение заставляет окружающий игрока мир не просто источать яркие краски, но и превращает его в действительно трёхмерное пространство.
На сегодняшний день существует целый ряд различных звуковых API . Мы поговорим о тех, которые либо до сих пор используются, либо представляют историческую ценность.
Этот API использует эффекты EAX. Данный интерфейс задействован в движках id Tech 3 и 4 (DOOM 3, Enemy Territory: Quake Wars, Prey, Quake 4, Wolfenstein), некоторых играх, основанных на Unreal Engine 3, а также в ряде множества других проектов (Battlefield 2, S.T.A.L.K.E.R., F.E.A.R., FarCry, Time Shift и прочие).
Интересно, что компания Creative позволила использовать свою запатентованную технологию обработки теней студии id Software только в обмен на поддержку OpenAL в DOOM 3
OpenAL развивался исключительно программистами Creative. Полноценная реализация наиболее значимых функций и возможностей OpenAL существует только для карт Creative под Windows. Для прочих карт и ОС реализация очень упрощенная, базовая. Всё потому, что это требует наличие аппаратной поддержки, а аппаратный процессор есть только у карт Creative.
Таким образом, если игра использует OpenAL, то звучание на интегрированном звуке на звуковой карте Creative будет разительно отличаться. Разумеется, в пользу последнего. Если же у звуковой карты Creative нет аппаратного процессора, то там используется программная эмуляция до EAX 4.0, не доступная картам других производителей. Хотя данную технологию эмуляции можно лицензировать за деньги даже для интегрированного звука. В то же время EAX 5.0 без аппаратной поддержки не существует. Развитие OpenAL остановилось в 2005 году.
Программный интерфейс, являющийся частью DirectX. Самый старый и распространенный API. Данный API позволяет имеет слабую и ресурсоемкую программную реализацию 3D-звука, которую в играх никто не использует, но зато позволяет задействовать аппаратную реализацию имеющихся эффектов. Таким образом, звучание разных DirectSound звуковых карт отличается.
Интересно, что «аппаратные» вызовы у многих карт реализованы программно. Таким образом, интегрированный звук часто имеет «аппаратный» 3D-звук, реализованный в драйверах. Эта реализация по качеству и возможностям сильно отличается от настоящей аппаратной.
C выходом Windows Vista и значительными изменениями в её архитектуре DirectSound лишился поддержки 3D-звука. Тут возникла одна проблема: многие игры, вышедшие до релиза новой операционной системы, остались без звуковых эффектов. В 2007 году компания Creative разработала технологию Creative ALchemy для X-Fi и Audigy, перехватывающую вызовы DirectSound и транслирующие их в аналогичные команды OpenAL. Благодаря этому старые игры имеют поддержку 3D-звука и EAX в операционных системах Windows Vista и Windows 7. Кроме того компания ASUS предлагает Xonar GX2.5, также позволяющий эмулировать DirectSound в несовременных проектах. Эмуляция ASUS предсказуемо уступает из-за отсутствия аппаратных возможностей в картах этого производителя, кроме того, менее стабильно работает.
В свое время покупатели Windows Vista были сильно озадачены отсутствием 3D-звука в играх. Одна из многих причин, почему хардкорные игроки не спешили переходить на новую тогда операционную систему
Кроме звуковых API существуют ещё и звуковые движки . Это примерно как графические движки, которые отвечают за внешний вид игр. Они представляют собой высокоуровневые функции, сильно упрощающие жизнь программистам. На низком уровне звуковые движки используют базовые функции DirectSound или какого-то другого API по выводу звука.
Ещё семь лет назад FMOD считался «молодым и перспективным», а сейчас активно набирает обороты. Одной из особенностей является мультиплаформерность (поддержка Xbox 360, Playstation 3 и Nintendo Wii) и возможность работать с различными форматами на разных платформах. Уже вышло немало проектов использующих FMOD, в том числе такие хиты как World of Warcraft, Bioshock 1 и 2, Starcraft 2: Wings of Liberty, Mafia 2 и прочие. Также заявлены Crysis 2, Deus Ex: Human Revolution, The Witcher 2: Assassins of Kings.
MilesSS - безусловно, самый именитый из существующих сегодня звуковых движков. На официальном сайте заявлена поддержка в 5000 играх. Однако во внушительном списке не так уж много проектов последних нескольких лет, хотя там присутствуют Call of Duty: Modern Warfare и Call of Duty: World at War. Данный движок использовали и Painkiller, и Gothiс, и многие другие популярнейшие игры. Кроме того, Valve использует MSS библиотеку версии 6.6a в движке Source (Half-Life 2, Portal, Team Fortress 2, Left for Dead 1 и 2). Последняя версия MilesSS датируется октябрём 2008 года.
Наконец, остановимся на системе EAX (Environmental Audio Extensions). Сейчас разработчикам доступна EAX 5.0, поддерживающая многие возможности. В частности, именно эта система есть в самом распространённом на сегодняшний день движке Unreal Engine 3. Помимо этого EAX разных версий можно встретить во множестве игр. Грамотное использование потенциала этой технологии позволяет создавать потрясающие звуковые эффекты.
Именно EAX оказал значительное влияние на развитие звуковых карт, способствовал внедрению многих эффектов для создания неповторимой атмосферы. Знатоки помнят, что одной из ключевых особенностей теперь уже культового проекта Thief была не только уникальная игровая механика, но и потрясающий звук. Именно звуковое сопровождение позволяло позиционировать каждый шорох, грамотно оценивать ситуацию, с головой погружаться в мир воришки Гаррета. По меркам того времени это стало настоящим прорывом. Thief: The Dark Project стал одной из первых игр, показавших, что у 3D-звука и технологии EAX есть будущее.
Благодаря технологичному звуку Thief обладал потрясающей атмосферой и был одним их главных поводов покупки звуковых карт Creative
Спецификации разных версий EAX стоит рассмотреть отдельно.
Функции по отношению к предыдущей версии
Звуковые карты Creative поддерживающие технологию
Примеры игр, поддерживавших технологию
Функции по отношению к предыдущей версии
Звуковые карты Creative поддерживающие технологию
Примеры игр, поддерживавших технологию
Функции по отношению к предыдущей версии
Звуковые карты Creative поддерживающие технологию
Примеры игр, поддерживавших технологию
Функции по отношению к предыдущей версии
Звуковые карты Creative поддерживающие технологию
Примеры игр, поддерживавших технологию
Вывод из представленного выше материала напрашивается сам собой, а именно: кроссплатформерность и простота в использовании являются необходимыми условиями для успеха. Всё-таки в нынешней ситуации, когда все издатели (кроме Microsoft, Sony и Nintendo) предпочитают выпускать свои игры сразу на трёх (минимум на двух) платформах одновременно, возможность с лёгкостью применить функции и на PC, и на консолях выходит на первый план. Набравший популярность FMOD тому ярчайшие доказательство.
Разумеется, когда заходит разговор о звуковых картах игровой направленности, многим на ум сразу приходит именно компания Creative . За почти три десятка лет своего существования производитель неоднократно преподносил любителям звука приятные сюрпризы, хотя и ценовая политика компании вызывала неоднозначную реакцию. Сейчас в ассортименте компании достаточно продуктов серии X-Fi с привычным PCI Express интерфейсом и с USB, от бюджетной ценовой категории до карт премиум класса.
Корейская компания Auzentech выпускает игровые звуковые карты на чипе Creative X-Fi. Эти продукты обладают интересными характеристиками и подходят и для аудиофилов и для игр, но, к сожалению, у нас про эту компанию мало кто знает и данную продукцию не так-то просто найти в магазинах.
Не так давно на рынке звуковых карт появился ещё один игрок, которого трудно не заметить. Речь идет о компании ASUS , имя которой ассоциировалось с материнскими платами, видеокартами, ноутбуками, оптическими приводами.
Эти звуковые карты разрабатывает и производит дружественная тайваньская компания C-Media. ASUS выступает только OEM-заказчиком и спонсором разработки. С этим связана зачастую нестабильная работа карт ASUS и скромные возможности, что нетипично для других продуктов этого производителя.
В данный момент есть несколько серий звуковых карт все под общим названием Xonar. Каждая серия позиционируется под различные нужды: одна ориентирована на игры, другая - на просмотр кино, третья - на прослушивание музыки. В интересующей нас игровой линейке достаточно моделей с весьма заманчивыми особенностями. Однако карты ASUS не предлагают каких-то преимуществ в играх перед интегрированным звуком. Подводит программная реализация многих функций, к тому же не самая новая.
Называть всех производителей мы не будем. Причин тому предостаточно: и отсутствие должной информации от компаний, и проблемы с доставкой в Россию, и ориентация на узкий круг профессионалов, а не на широкие массы потребителей. Для игроков они не представляют особого интереса.
Сейчас производители предлагают широкий спектр самых разных звуковых карт, поддерживающих современные эффекты. Благодаря доступности и достаточно демократичной ценовой политике вопрос приобретения отдельной звуковой карты стоит не столь остро. К примеру, стоимость «игровой» звуковой карты X-Fi Xtreme Gamer с настоящим аппаратным звуковым процессором X-Fi составляет $80, что не так много по сравнению с «игровыми» видеокартами, процессорами и другими комплектующими.
Система пространственной обработки звука Environmental Audio eXtensions™ (EAX) используется многими разработчиками игр для создания естественного объемного звука с учетом специфики того помещения или пространства, где развиваются события игры и где находятся источники звуков. EAX можно представить как набор спецификаций, определяющих модели и алгоритмы для создания звуковых эффектов окружающего пространства или помещения, основанных на реверберации (Environmental Audio означает пространственный звук).
Под понятием «реверберация» (от ср.-век. лат. reverberatio - отражение) понимают послезвучание, сохраняющееся после выключения источника звука и обусловленное неодновременным приходом в данную точку отраженных или рассеянных звуковых волн. Реверберация оказывает значительное влияние на слышимость речи и музыки в помещении.
EAX также включает в себя набор функций API, позволяющих программисту воспользоваться аппаратной поддержкой EAX. На момент подготовки этой статьи уже появилась четвертая версия EAX, которая доступна на сайте Creative Labs в разделе для разработчиков .
EAX API является расширением базовой системы создания объемного звука DirectSound3D. Во время работы EAX приложения процесс обработки звука разделяется: DirectSound3D управляет местоположением, скоростью движения в 3D пространстве источников звука и слушателя, а EAX вносит в звук такие изменения, которые характеризуют окружающее источник звука пространство.
Поддержка системы EAX обеспечивается на аппаратном уровне встроенными аудиопроцессорами звуковых плат (звуковыми акселераторами). Разумеется, что в первую очередь такая поддержка реализована на платах Creative.В основу EAX положена технология E-mu Environmental Modeling, поддерживаемая аудиопроцессором EMU10K1, установленном на серии звуковых карт SBLive! В моделях EAX учитывается тип звукоизлучателей: наушники, стерео- и квадросистема. Аудиоакселератор EMU10K1 раскладывает любой звуковой поток на множество каналов, а потом на каждый канал в реальном времени накладывает реверберации. Благодаря чему создаются новые звуки, более близкие к их естественному звучанию в реальном пространстве.
так как человеческое ухо слышит не только звук, исходящий непосредственно от источника, но воспринимает и вторичные (и более поздние) звуковые колебания, которые определяются расстоянием до источника, а также параметрами реверберации, то именно дистанцию и реверберацию можно считать основными характеристиками пространства или помещения.
Изначально предполагалось, что EAX не будет использовать геометрическую модель сцены, то есть источники звука могли быть не связаными с графическими объектами. Главное было создать звуковую атмосферу игровой сцены, то есть воздействовать на эмоциональное состояние игрока подобно тому, как в кинофильме звуковое сопровождение всегда подчеркивает остроту переживаний, акцентируясь на самом важном и пренебрегая незначительными звуковыми подробностями. Руководствуясь этим подходом, создатели EAX в качестве основы выбрали статическую модель звуковой среды, а не ее геометрические параметры. В статической модели автоматически рассчитываются эффекты реверберации и отражения относительно слушателя с учетом размеров помещения, направления звука и других параметров, которые программист может устанавливать для каждого источника звука. Расчет статической модели требует меньших вычислительных ресурсов, чем моделей, основанных на геометрическом подходе. EAX использует подготовленные заранее звуковые модели, которые представляют собой набор числовых значений параметров помещения или пространства. Параметры эти характеризуют не расположение предметов в помещении, как это бывает в геометрической модели, а поведение звуковых волн в таком помещении или пространстве, то есть задержки распространения, степень затухания, звукопоглощение и звукоотражение на разных звуковых частотах. Если по сюжету игры необходимо сменить длинный коридор на большой ангар, то достаточно сменить одну статическую модель (модель коридора) на другую (модель ангара). Модели различных помещений (их числовые значения) представлены в EAX в виде пресетов (предустановок). Такой подход обеспечивает более простое программирование 3D звука в игре, позволяет уменьшить объем вычислений при моделировании звуковой панорамы. Получаемый звук обладает весьма реалистичным звучанием. С другой стороны, статичность метода может служить причиной того, что выбранный пресет в процессе игры может перестать соответствовать графическому (геометрическому) представлению сцены. Например, в геометрической модели, если, например, рухнули стены помещения, то звук изменится в силу самой модели, а не принудительно, исходя из каких-то иных флагов или признаков. В случае статической модели звук будет оставаться таким же, как и до обрушения стен, пока не будет выбран другой пресет.
EAX 1.0 Поддерживает изменение места реверберации и отражений; имеет большое количество пресетов; позволяет (с некоторыми ограничениями) изменять реверберационные параметры помещения; автоматически менять интенсивность реверберации, в зависимости от положения источника звука. EAX 1.0 строит звуковую сцену на основе заранее созданных пресетов, учитывая дистанцию между источниками звука и слушателем.
В EAX 2.0 Обновлена реверберационная модель; добавлены эффекты звуковых преград (Occlusions) и препятствий (Obstructions); реализовано отдельное управление ранними и поздними отражениями; возможен продолжительный контроль размеров помещений; учитываются акустические свойства воздуха (поглощение звука). Теперь для использования эффектов Environmental Audio не требуется описание геометрии помещения. EAX 2.0 построен на возможностях первой версии и создает еще более реалистичные эффекты.
EAX 3.0 позволяет осуществить контроль за началом реверберации и ранними отражениями для каждого источника звука; реализует динамический переход между моделями пространства; содержит улучшенную дистанционную модель для автоматического управления реверберацией и начальными отражениями в зависимости от положения источников звука относительно слушателя. В этой спецификации уже происходит некоторый отход от статической модели и в ее состав включены методы, свойственные для геометрических моделей: Расчеты Ray-Tracing (отражение лучей) для получения параметров отражения для каждого источника звука. Кроме того, реализованы отдельные отражения для дальних эхо. Улучшенное дистанционное представление, призванное заменить статические реверберационные модели. EAX 3.0 совмещает вторую версию с новыми возможностями. Более высокий уровень реализма достигается благодаря поддержки местных отражений, изолированных отражений, продолжительных переходов между звуковыми сценами и др.
Популярная среди многих разработчиков (особенно среди энтузиастов, создающих некоммерческое программное обеспечение) библиотека функций работы со звуком FMOD (разработчик Firelight Technologies Pty) предоставляет ряд возможностей для работы с системой EAX. О них далее и пойдет речь.
Для того чтобы получить определенное представление о библиотеке FMOD, рекомендуется прочитать статью Использование FMOD в звуковых играх , в которой рассказано об основных принципах работы с этой библиотекой, а также изложена последовательность действий (вызовов функций API FMOD) для создания источников объемного звука и расчета звуковой панорамы.
На данный момент (речь идет о версии FMOD 3.74) библиотека поддерживает EAX 2.0 и 3.0 (однако, предполагается, что спецификации EAX совместимы "снизу вверх", то есть настройки для EAX 2.0 будут корректно поддерживаться звуковыми картами, реализующими EAX 3.0 и т.д.).
Прежде чем использовать EAX в целях создания реалистичной звуковой панорамы, необходимо определить, есть ли такая поддержка у звуковой карты. Для этой цели в библиотеке FMOD предназначена функция FSOUND_GetDriverCaps(). В качестве параметра эта функция получает целое число, указывающее номер звуковоспроизводящего устройства в системе. Нулевое значение соответствует устройству принятому по умолчанию. На компьютерах с одной звуковой картой устройство по умолчанию и есть эта звуковая карта. В качестве второго параметра функция получает указатель на целочисленную переменную, то есть на адрес в памяти, по которому будет записано целое число, представляющее собой набор битовых полей. Эти битовые поля указывают, какие режимы работы поддерживает звуковая карта. При удачном выполнении функция возвращает TRUE, при ошибке - FALSE.
В файле fmod.h определены три константы: FSOUND_CAPS_HARDWARE, FSOUND_CAPS_EAX2, FSOUND_CAPS_EAX3, которые задают битовые поля, свидетельствующие о поддержке аппаратного 3D звука, EAX 2.0 и EAX 3.0 соответственно.
/* Пример анализа возможностей звуковой карты */ /* для win32 */ ... UINT caps = 0; UINT device_id = 0; //устройство по умолчанию char msg_buf ; //буфер для сообщения FSOUND_GetDriverCaps(device_id, &caps); msg_buf = 0; if (!caps) sprintf(msg_buf, "Нет аппаратной поддержки 3D звука и EAX.\r\n"); if (caps & FSOUND_CAPS_HARDWARE) strcat(msg_buf, "* Поддержка 3D звука\r\n"); if (caps & FSOUND_CAPS_EAX2) strcat(msg_buf, "* Поддержка EAX 2 \r\n"); if (caps & FSOUND_CAPS_EAX3) strcat(msg_buf, "* Поддержка EAX 3 \r\n"); // Вывод сообщения MessageBox (NULL, msg_buf, "Информация", MB_OK); ...
Функция FSOUND_GetDriverCaps () должна вызываться до вызова функции FSOUND_Init () или после вызова функции FSOUND_Close ();
С точки зрения программиста спецификацию EAX можно представить как структуру, описывающую реверберационные параметры помещения (пространства). Таких параметров может быть более двух десятков.
Структура FSOUND_REVERB_PROPERTIES содержит параметры, общие для всех существующих источников звука. Структура FSOUND_REVERB_CHANNELPROPERTIES характеризует отдельно взятый источник (канал). Ниже представлены списки членов этих структур: сначала для FSOUND_REVERB_PROPERTIES, а затем FSOUND_REVERB_CHANNELPROPERTIES. Подробное рассмотрение физического смысла указанных параметров выходит за рамки статьи. По всем вопросам следует обращаться к документации по EAX.
/* FSOUND_REVERB_PROPERTIES */ / Числа отражают диапазон значений и значение, установленное по умолчанию. */ /* Целые числа, как правило, представляют децибелы, */ /* вещественные числа представляют линейную зависимость. */ unsigned int Environment /* 0 , 25 , 0 , sets all listener properties (WIN32/PS2 only) */ float EnvSize /* 1.0 , 100.0 , 7.5 , Размер помещения (пространства) в метрах(WIN32 only) */ float EnvDiffusion /* 0.0 , 1.0 , 1.0 , Проницаемость (диффузность) пространства(WIN32/XBOX) */ int Room /* -10000, 0 , -1000 , Уровень выраженности эффекта комнаты (на средних частотах) (WIN32/XBOX/PS2) */ int RoomHF /* -10000, 0 , -100 , Относительный уровень выраженности эффекта комнаты на высоких частотах(WIN32/XBOX) */ int RoomLF /* -10000, 0 , 0 , Относительный уровень выраженности эффекта комнаты на низких частотах(WIN32 only) */ float DecayTime /* 0.1 , 20.0 , 1.49 , Время затухания реверберации на средних частотах(WIN32/XBOX) */ float DecayHFRatio /* 0.1 , 2.0 , 0.83 , high-frequency to mid-frequency decay time ratio (WIN32/XBOX) */ float DecayLFRatio /* 0.1 , 2.0 , 1.0 , low-frequency to mid-frequency decay time ratio (WIN32 only) */ int Reflections /* -10000, 1000 , -2602 , Уровень раннего отражения относительно эффекта комнаты(WIN32/XBOX) */ float ReflectionsDelay /* 0.0 , 0.3 , 0.007 , Время задержки начальной реверберации(WIN32/XBOX) */ float ReflectionsPan /* , , Панорамный вектор раннего отражения (WIN32 only) */ int Reverb /* -10000, 2000 , 200 , Уровень позднего отражения относительно эффекта комнаты (WIN32/XBOX) */ float ReverbDelay /* 0.0 , 0.1 , 0.011 , Время задержки позднего отражения относительно начальной реверберации (WIN32/XBOX) */ float ReverbPan /* , , Панорамный вектор позднего отражения (WIN32 only) */ float EchoTime /* .075 , 0.25 , 0.25 , echo time (WIN32/PS2 only. PS2 = Время запаздывания для эхо/DELAY modes only) */ float EchoDepth /* 0.0 , 1.0 , 0.0 , Глубина эха (WIN32/PS2 only. PS2 = Feedback level for ECHO mode only) */ float ModulationTime /* 0.04 , 4.0 , 0.25 , Время (период) модуляции(WIN32 only) */ float ModulationDepth /* 0.0 , 1.0 , 0.0 , Глубина модуляции(WIN32 only) */ float AirAbsorptionHF /* -100 , 0.0 , -5.0 , Изменение уровня на единицу длины (поглощение) на высоких частотах(WIN32 only) */ float HFReference /* 1000.0, 20000 , 5000.0 , reference high frequency (hz) (WIN32/XBOX) */ float LFReference /* 20.0 , 1000.0, 250.0 , reference low frequency (hz) (WIN32 only) */ float RoomRolloffFactor /* 0.0 , 10.0 , 0.0 , Подобно FSOUND_3D_SetRolloffFactor но для эффекта комнаты(WIN32/XBOX) */ float Diffusion /* 0.0 , 100.0 , 100.0 , Value that controls the echo density in the late reverberation decay. (XBOX only) */ float Density /* 0.0 , 100.0 , 100.0 , Value that controls the modal density in the late reverberation decay (XBOX only) */ unsigned int Flags /* FSOUND_REVERB_FLAGS - Модифицирует поведение вышеуказанных членов структуры (WIN32/PS2 only) */ /* FSOUND_REVERB_CHANNELPROPERTIES */ int Direct /* -10000, 1000, 0, direct path level (at low and mid frequencies) (WIN32/XBOX) */ int DirectHF /* -10000, 0, 0, relative direct path level at high frequencies (WIN32/XBOX) */ int Room /* -10000, 1000, 0, Уровень выраженности эффекта комнаты (на низких и средних частотах) (WIN32/XBOX/PS2) */ int RoomHF /* -10000, 0, 0, Относительный уровень эффекта комнаты на высоких частотах(WIN32/XBOX) */ int Obstruction /* -10000, 0, 0, Основное управление обструкцией (attenuation at high frequencies) (WIN32/XBOX) */ float ObstructionLFRatio /* 0.0, 1.0, 0.0, Уровень обструкции на низких частотах re. main control (WIN32/XBOX) */ int Occlusion /* -10000, 0, 0, main Управление окклюзией (attenuation at high frequencies) (WIN32/XBOX) */ float OcclusionLFRatio /* 0.0, 1.0, 0.25, occlusion low-frequency level re. main control (WIN32/XBOX) */ float OcclusionRoomRatio /* 0.0, 10.0, 1.5, relative occlusion control for room effect (WIN32) */ float OcclusionDirectRatio /* 0.0, 10.0, 1.0, relative occlusion control for direct path (WIN32) */ int Exclusion /* -10000, 0, 0, main exlusion control (attenuation at high frequencies) (WIN32) */ float ExclusionLFRatio /* 0.0, 1.0, 1.0, exclusion low-frequency level re. main control (WIN32) */ int OutsideVolumeHF /* -10000, 0, 0, outside sound cone level at high frequencies (WIN32) */ float DopplerFactor /* 0.0, 10.0, 0.0, like DS3D flDopplerFactor but per source (WIN32) */ float RolloffFactor /* 0.0, 10.0, 0.0, like DS3D flRolloffFactor but per source (WIN32) */ float RoomRolloffFactor /* 0.0, 10.0, 0.0, like DS3D flRolloffFactor but for room effect (WIN32/XBOX) */ float AirAbsorptionFactor /* 0.0, 10.0, 1.0, multiplies AirAbsorptionHF member of FSOUND_REVERB_PROPERTIES (WIN32) */ int Flags /* FSOUND_REVERB_CHANNELFLAGS - modifies the behavior of properties (WIN32) */
Как уже говорилось, фирма Creative Labs предоставляет наборы числовых значений для членов, входящих в указанные структуры. Эти числовые значения присутствуют в библиотеке FMOD как предустановки (пресеты). Благодаря пресетам отпадает необходимость самостоятельно проводить физические эксперименты по определению параметров того или иного помещения, а также звукопоглощения и звукоотражения материала, из которого сложены стены. Пресеты составлены только для структуры FSOUND_REVERB_PROPERTIES. Числовые параметры пресетов можно посмотреть в файле fmod.h, в котором они объявлены посредством инструкции #define. В силу этого пресеты можно использовать только для инициализации структур при их объявлении, например:
FSOUND_REVERB_PROPERTIES prop = FSOUND_PRESET_AUDITORIUM;
Вот список пресетов, используемых при работе с DirectSound3D в системе Windows:
Для назначения определенных пространственных параметров источнику объемного звука в библиотеке FMOD предназначены функции FSOUND_Reverb_SetProperties () и FSOUND_Reverb_SetChannelProperties (). Для получения установленных параметров, служат обратные функции FSOUND_Reverb_GetProperties () и FSOUND_Reverb_GetChannelProperties (). Установку параметров реверберации можно выполнять и во время воспроизведения звука. Для того чтобы новые параметры вступили в силу, необходимо вызвать функцию FSOUND_Update().
Функции FSOUND_Reverb_SetProperties () и FSOUND_Reverb_GetProperties () предназначены для установки и получения общих параметров окружающего пространства соответственно. Обе функции получают один единственный параметр - указатель на структуру FSOUND_REVERB_PROPERTIES , соответствующую спецификации EAX. В случае FSOUND_Reverb_SetProperties () этот указатель должен адресовать уже инициализированную структуру, заполненную необходимыми числовыми значениями. В случае FSOUND_Reverb_GetProperties () указатель адресует область памяти, предназначенную для сохранения числовых значений. При успешном завершении функции возвращают TRUE, в противном случае - FALSE.
/* Пример установки параметров реверберации */ FSOUND_REVERB_PROPERTIES props = FSOUND_PRESET_STONEROOM; if (!FSOUND_Reverb_SetProperties (&props)) { /* обработка ошибки */ ... }; FSOUND_Update(); ...
Отдельному источнику звука (каналу) можно назначить параметры реверберационной модели (в том числе и такие, как обструкция и окклюзия) посредством функции FSOUND_Reverb_SetChannelProperties (), а прочитать их с помощью FSOUND_Reverb_GetChannelProperties (). Эти функции получают два параметра. Первый, как и для всех функций FMOD, работающих с каналами, это номер канала, через который идет воспроизведение звука. Второй параметр - это указатель на структуру FSOUND_REVERB_CHANNELPROPERTIES. При вызове FSOUND_Reverb_SetChannelProperties() он должен адресовать уже инициализированную структуру, а при вызове FSOUND_Reverb_GetChannelProperties () - свободное место в памяти, достаточное для сохранения полученных значений. Для функции FSOUND_Reverb_SetChannelProperties () bбиблиотека FMOD не располагает пресетами, поэтому выбор числовых значений для тех или иных членов структуры FSOUND_REVERB_CHANNELPROPERTIES ложится на плечи программиста.
/* Пример установки параметров реверберации */ /* для отдельного источника звука */ ... int channel; // номер канала FSOUND_SAMPLE *samp = NULL; // указатель на звуковой буфер // инициализация структуры необходимыми значениями FSOUND_REVERB_CHANNELPROPERTIES channel_props = {... }; // загрузка звуковых данных samp = FSOUND_Sample_Load (FSOUND_FREE, "motor.wav", FSOUND_HW3D | FSOUND_LOOP_NORMAL, 0, 0); // открытие канала воспроизведения channel = FSOUND_PlaySound(FSOUND_FREE, samp); // установка параметров реверберации if (!FSOUND_Reverb_SetChannelProperties (channel, &channel_props)) { /* обработка ошибки */ ... }; FSOUND_Update(); ...
В качестве примера работы с функциями FMOD и системой EAX предлагается программа на языке программирования Си (ANSI C), создающая приложение Windows в форме диалогового окна, в котором можно выбрать из списка один из пресетов и прослушать, как изменится звучание источника объемного звука. При запуске приложения выводится диалог для выбора звукового файла. Кроме того, приложение позволяет просмотреть параметры звуковой карты: наличие аппаратной поддержки для 3D звука и EAX (разумеется, что эффекты пространственного звучания будут иметь место только, если звуковая карта поддерживает EAX). Программа написана и откомпилирована при помощи пакета lccwin32, однако программисту, использующему иную среду разработки, не составит труда адаптировать исходный код для своих нужд. Следует учесть, что в состав FMOD входят несколько библиотек (.lib), каждая из которых предназначена для своего компилятора.
В предлагаемом примере используются функции Win32 API и библиотеки FMOD. Для работы программы вы должны установить у себя на компьютере библиотеку fmod или поместить в папку с исполняемым файлом (eaxdemo.exe) файл библиотеки fmod.dll.
Заинтересовался вопросом: актуальна ли поддержка технологий аппаратной обработки звука, типа EAX? Есть ли смысл апгрейдить свою Creative X-Fi с разъемом PCI на нечто более современное? Или с появлением Windows Vista, лишенной поддержки аппаратного ускорения DirectSound/DirectSound3D можно забыть про покупку дорогих звуковых карт? Погуглил EAX 5.0, с удивлением узнал, что эта технология записана в устаревшие самим разработчиком: "cогласно спецификации OpenAL 1.1 компании Creative, EAX должен считаться устаревшим. Новые разработки должны использовать интерфейс OpenAL EFX". Погуглил игры с поддержкой OpenAL и увидел весьма скорбный список (http://connect.creativelabs.com/alchemy/Lists/Games/AllItems.aspx):
Americas Army,
ARMA (но не ARMA2, где обработка звука полностью софтовая, силами самой игры),
Battlefield 2,
Battlefield 2142,
Bioshock,
Brian Lara"s International Cricket 2007,
Call of Juarez,
Cold War,
Colin McRae Rally DiRT,
Doom3,
El Matador,
Gears of War,
GRID,
Mage Knight Apocalypse,
Mass Effect,
Prey,
Quake 4,
Red Orchestra: Ost Front,
S.T.A.L.K.E.R,
Serious Sam 2,
Spaceforce II: Rogue Universe,
Star Wars Republic Commando,
Star Wars Jedi Knight: Jedi Academy,
Star Wars Jedi Knight II: Jedi Outcast,
The Regiment,
Tom Clancy"s Ghost Recon: Advanced Warfighter,
Trackmania Nations Forever,
Unreal Tournament 2003,
Unreal Tournament 2004,
Unreal Tournament 3,
Vanguard: Saga of Heroes.
Большинство вышеперечисленных игр очень старые, например Quake 4 вышел в 2005 году, а Doom 3 - в 2004. Игры, в которые кто-то станет играть сегодня, можно пересчитать по пальцам одной руки. Покупать дорогую звуковую карту ради них нет смысла. Получается, что игр, поддерживающих OpenAL и гарантированно работающих в Windows 7 на сегодняшний день очень мало, а те, что использовали DirectSound3D (более 80% игр) запускаются с аппаратной поддержкой звука как бог пошлёт - через программные костыли третьих разработчиков, которые не всегда работают. Причем у всех костыли свои: у Creative - ALchemy, перехватывающая обращения игры к DirectSound3D и конвертирующая их в свой OpenAL. У Realtek есть аналогичная технология 3D SoundBack, у C-Media - Xear3D EX и т.д.
Очевидно, что ни DirectSound3D, ни OpenAL в будущих играх поддерживаться не будут. Благодаря Microsoft, разработчики сделали 2 шага назад и вернулись в 1995 год, когда не существовало стандартов аппаратной обработки звучания и эта работа ложилась на процессор. DirectSound3D, EAX и OpenAL отправлены в мусорное ведро, а покупателю теперь выгоднее потратить деньги на хороший ЦАП, усилитель и высокоомные наушники, чем покупать дорогую звуковую карту, которая даст лишь ЦАП среднего качества.
EAX (E nvironmental A udio E xtensions) — технология, разработанная студией Creative Labs. Обладает функциями создания звуковых эффектов окружающей среды. Применяется совместно со студийными звуковыми картами Sound Blaster и Creative NOMAD/Creative Zen. В настоящее время технология EAX имеет версию 5.0, она была представлена в линейке звуковых карт X-Fi, в августе 2005 года.
Системы аудиопозиционирования имеют возможность управлять местоположением источников звука и слушателя в 3D-пространстве. К примеру, в играх применяется эффект DirectSound3D, который служит для создания отдельных источников звука для каждого объекта в игре. Так, различные звуки (к примеру, выстрелы или шаги) могут звучать в разных местах 3D-мира. Эти звуки, так же как и слушатель, могут перемещаться в пространстве.
Технология EAX улучшает эффект DirectSound3D путем создания виртуального окружающего аудио-мира. EAX эмулирует реверберации и отражения, направляющиеся со всех сторон от слушателя. Данный эффект создает впечатление, что вокруг слушателя существует реальный мир со своими параметрами. Звук описывает все: размеры помещения, свойства стен и прочие тонкости и детали. Разработчики игр могут создавать различные акустические эффекты для различных помещений. Так, пользователь, играющий в EAX-игру, слышит разницу в звуке при переходе, скажем, из помещения в тоннель.
Плюс ко всему, вместе с созданием окружающих эффектов, EAX может изменять параметры и различных источников звука. Если изменяется место расположения источника звука относительно слушателя, изменяются и параметры реверберации.
Технология EAX применена во многих известных современных компьютерных играх (Half-life, Counter-Strike, Grand Theft Auto IV, S.T.A.L.K.E.R., Doom 3). Данные игры поддерживают EAX версии 4.0 и 5.0, если на ПК установлено аудиоустройство с драйвером, поддерживающим OpenAL.
В зависимости от версии EAX, растет и число одновременной аппаратной обработки голосов: чем выше версия, тем это число больше. Так, EAX 1.0 поддерживает до 8 одновременных потоков каналов, а EAX 5.0 - уже 128 потоков + до 4 различных эффектов для каждого.
Существует множество версий EAX, каждая из последующих получала от разработчиков все больше функциональных возможностей. Рассмотрим имеющиеся на сегодняшний день версии EAX и их функции, в сравнении с предыдущими версиями:
EAX 1.0 применялась в звуковых картах Sound Blaster Live!.
Звуковая сцена в версии EAX 1.0 создается на основе заранее созданных пресетов. В них учитывается дистанция между источниками звука и слушателем. EAX 1.0 обладает огромным набором пресетов. Кроме того, реализована возможность изменения параметров поздней реверберации, а также автоматического изменения уровня, в зависимости от расстояния, за счет чего достигается улучшенное восприятие расстояния до источника.
Версия EAX 2.0 во многом повторяет первую, и более того, построена на ее основе. Имеет возможность создавать еще более реалистичные эффекты, благодаря внедрению поддержки преграждения и отражения звука. Кроме того, реализована улучшенная технология определения направления звука. А также:
Версия EAX 3.0, по сути, является расширенной второй. В ней реализован новый уровень реальности, которого удалось достичь благодаря поддержке местных и изолированных отражений. Также реализован "бесшовный" переход между звуковыми сценами.
Технология EAX 4.0 реализована в звуковых картах Sound Blaster Audigy 2.
Версия EAX 5.0 представлена в аудиокартах Sound Blaster X-Fi и ASUS ROG Xonar Phoebus.
Спецификация OpenAL 1.1 от компании Creative диктует динамику развития технологии EAX. Согласно этой спецификации, технология считается устаревшей. Новые разработки будут применять интерфейс OpenAL EFX. Он более глубоко интегрирован в среду OpenAL.
Студия Creative также выпустила специальные драйвера, позволяющие эмулировать технологию EAX. Они применяются в компьютерах, оснащенных встроенной звуковой картой.