Интерфейсы и API[attachmentid=164]
Теперь затронем тему выбора API для программирования звукового движка. Выбор на самом деле небольшой: Windows Multimedia, Direct Sound, OpenAL, Aureal A3D.
Начнём с последнего. К сожалению, Aureal A3D не успели доделать (довести до ума драйвера), поэтому на современных Windows 2000 и XP он работает плохо.
Далее, Windows Multimedia system — базовая система вывода звука, унаследованная еще с ранних Windows 3.1. Для игр ее редко используют, так как у нее большая latency, обусловленная большим буфером. Cейчас роль WinMM для игр постепенно отмирает. Однако WinMM используется в некоторых полу-профессиональных карточках, где есть специально оптимизированные WDM-драйвера.
OpenAL, разработка Loki Entertaiment как кросс платформенный АПИ, аналог OpenGL. Активно продвигался Creative Labs в качестве альтернативы Direct Sound. Идея хорошая, но реализация оставляет желать лучшего. К тому же, Loki Entertaiment недавно обанкротились. Мы очень надеемся на появление в скором времени нового альтернативного АПИ для звука, потому что OpenAL — это просто кошмар для программиста. Хотя, как не странно, совершенно недавно, NVIDIA выпустила аппаратный драйвер для OpenAL на своих чипсетах nForce.
Direct Sound и Direct Sound 3D на данный момент самый оптимальный АПИ. И реально альтернатив ему нет. Конечно, есть очень много претензий, но они настолько специфические, что в большинстве случаев просто незаметны, в конце концов, звук он выводит и этого достаточно.
Кроме этих аппаратных АПИ (то есть АПИ, в которых присутствуют аппаратные драйвера, а не эмуляция вывода через DirectSound или WinMM), существуют так называемы врапперы (программные интерфейсы, использующие уже готовый аппаратно-программный интерфейс для создания собственного интерфейса). Как правило, всегда для любой игры пишется wrapper-интерфейс.
Существует много таких API-wrappers (будем называть их так, но реально аппаратной поддержки у них нет): Miles Sound System, RenderWare Audio, GameCoda, FMOD, Galaxy, BASS, SEAL.
МilesSS (http://www.radgametools.com/miles.htm) наверно самый именитый — 2700 игр используют именно этот враппер. Они лицензировали технологию RSX от Intel и предлагают ее в качестве альтернативы софтварному 3D-звуку. Очень много доступных фич, но есть и недостатки — только Win32 и Mac, и очень высокая цена лицензии.
Galaxy Audio разработана для Unreal и, соответственно, используется во всех играх на Unreal-engine. Но последний Unreal 2 выпущен на OpenAL, поэтому можно сказать, что Galaxy уже нет в живых.
Game Coda (http://www.gamecoda.com) и RenderWare Audio (http://www.renderware.com/renderwareaudio.htm) — примерно одинаковые по весу АПИ от Sensaura и Renderware соответственно. Все поддерживают PC, PS2, GameCube и XBOX и много разных фич, но, опять таки — цена лицензии довольно высокая.
И, наконец, FMOD (http://www.fmod.org). Недавно появившись на рынке, сейчас занимает одно из лидирующих позиций благодаря огромному количеству фич и технологий, поддерживаемых в АПИ.
Появившаяся 1995 году компания Firelight Multimedia (Мельбурн, Австралия) состоящая из одного человека — Brett Paterson, уделяла больше внимания музыкальным трекерным форматам MOD, XM, IT, S3M и тогда же вышла первая версия этого АПИ (еще для ДОС). Тогда, это был бесплатный АПИ для некоммерческого использования в демках или других интерактивных приложений.
Так как технологии проигрывания трекерных форматов требуют очень быстрого кода софтварного микширования, FMOD занял лидирующее место среди АПИ, так как его микширующий код был и остается самым быстрым (провено!).
Потом, появились первые карточки с аппаратным 3D-звуком и встал вопрос о совмещения аппаратного и софтварного 3D-звука — и тут началась гонка за технологиями: поддержка Aureal A3D, Creative Labs EAX 1, EAX 2, софтварный менеджер геометрии сцены — для совместимости с А3D.
В 2000 году, компания называется Firelight Technologies и там работают уже 4 человека. В основном портируют код на консоли PS2 и XBOX. Firelight Technologies была одна из первых компаний, которая предложила услуги audio middleware для консолей. Теперь стратегия компании нацелилась на охват как можно большего числа платформ и разработки единого интерфейса (то есть максимально совместимого и эмулирующего софтварно некоторые функции если они не доступны на какой-либо платформе).
Итак 2003 год, единственный АПИ, поддерживающий 7 (семь!) платформ PC (win32), PlayStation2, XBOX, GameCube, Linux, Mac OS (OSX) и PDA (winCE). Также единственный АПИ, поддерживающий технологию Multiple Listeners, 12 компиляторов под любой язык программирования от Visual Basic, до ассемблера, самые быстрые софтварный код микшера, быстрый декодер MP3 (к сожалению нужна дополнительная лицензия Thompson multimedia чтобы использовать MP3 для коммерческих приложений), но есть альтернатива — OGG или WMA. Вот далеко не полный список всего что есть в FMOD. Рекомендую зайти на их сайт
http://www.fmod.org/, чтобы посмотреть все, что там есть, а также цены на лицензирование. По секрету, готовиться аппаратный драйвер FMOD на нескольких платформах windows и на мобильных телефонах (PDA) — так что скоро это будет полноценный АПИ. Возможно, FMOD постигнет участь Aureal — его купит какая-нибудь большая компания, но пока FMOD уверенно завоёвывает позиции на рынке.
«Nice to see that a lot of the things I wanted our Engineers to develop into A3D actually got done by an outside company." David Gasior / Former Technology Evangelist at Aureal» Я особо доверяю David Gasior, и полностью согласен с его высказыванием относительно FMOD. К слову, это все не коммерческая презентация FMOD, а реальное положение вещей на рынке Audio API.
EAX (Environmental Audio Extensions)Теперь рассмотрим по подробнее систему EAX (Environmental Audio Extensions) от Creative Labs. Сразу оговорюсь ЕАХ — это не АПИ, не библиотека, это набор расширений для API DirectSound3D.
Реализовать EAX в игре с точки зрения программирования довольно просто — дело одного-двух дней, но настройка параметров занимает куда больше времени.
Как я уже говорил выше, мы будем рассматривать Слушателя (Listener) и Источники Звука (Sound Sources) отдельно. Система ЕАХ различает настройки параметров отдельно для Слушателя и для Источников звука. Их мы будем называть Параметры Слушателя (Listener parameters) и соответственно Параметры Источников (Sound Source Parameters).
Примерно в 1997-1998 годах Creative выпускает ЕАХ версии 1. Это примитивный набор из 26 пресетов и всего 3х параметров для более точной настройки параметров Слушателя и всего 1 параметр для настройки источников. После некоторого затишья, выходит ЕАХ версия 2. Это существенный прорыв вперед и ЕАХ2 (14 параметров для настройки слушателя и 13 для источников, включая эффекты окклюзии) практически принимают как стандарт для игр. Interactive Audio Special Interest Group (http://www.iasig.org/) создают стандарт IASIG Level 2, который практически базируется на ЕАХ2, но с некоторыми недочетами. Дело в том, что каждая компания, которая внедряет IASIG Level2 — Microsoft Direct Sound 8, Sensaura EnvironmentFX, Aureal A3D вносит свой дополнения: другой порядок расположения параметров, разные названия параметров. Это все вносит некоторые неудобства в настройку и портирования. Я не буду долго останавливаться на ЕАХ2 — это все можно прочитать в SDK на сайте
http://developer.creative.com/.
EAX Advanced HDВ 2001 году Creative анонсирует новую звуковую карту Audigy и новые функции ЕАХ, который теперь и далее называется EAX Advanced HD. Теперь это 25 (!) параметров для точной настройки слушателя и 18 параметров для настройки источников, включая еще 2 новых эффектов окклюзии.
Итак, EAX Advanced HD (для простоты будем говорить ЕАХ3). Для начала рассмотрим параметры Слушателя. Они делятся на 2 группы: высокоуровневые и низкоуровневые.
[attachmentid=165]
Listener ParametersВысокоуровневые параметры — это Environment, выбор из 26 пресетов, полностью обратно совместимых с ЕАХ версий 1 и 2. Второй параметр Environment Size — собственно размер комнаты от 1 до 100 метров. И третья подгруппа — это флаги для автоматического расчета низкоуровневых параметров в зависимости от размера комнаты; это и автоматический расчет времени задержки, и время затухания поздних отражений и т.д. Более подробно об этом можно почитать в SDK и документации, мы рассматриваем только подход.
Низкоуровневые параметры делятся на несколько подгрупп в зависимости от их действия.
Первая подгруппа — это параметры, контролирующие уровни интенсивности (громкости). Сюда входят параметры уровня громкости всех звуков (Room — master volume) и первичных (Reverb) и вторичных (Reflections), отражений масштабирующий коэффициент затухания (Room Roll-off Factor) громкости в зависимости от расстояния.
Вторая подгруппа — это параметры, влияющие на время. Тут находятся времена задержек первичных и вторичных отражений (Reverb и Reflection Delay), а так же время затухания всех отражений Decay Time (все в секундах).
В третью группу вошли параметры, отвечающие за тональный окрас звука. Это чисто субъективный термин, но дающий понять, из какого материала сделаны стены помещений, какова плотность воздуха в окружении (environment). Ведь каждый материал отражает и поглощает определенные частоты. Эти параметры по сути эмулируют поглощение и отражения звука материалом. Это относительные частоты (нижняя LF — Low Frequency и верхняя HF — High Frequency) в переделах которых будут происходить изменения. Например, металлические стены отражают больше, чем деревянные, поэтому для эмуляции металлических стен верхняя граница частоты будет ниже, чем для эмуляции дерева. Например, параметры цеха: нижняя частота 362 Гц, высокая 3762; деревянная комната: нижняя частота 99 и высокая 4900 Гц. Ну и собственно, параметры, которые контролируют влияние этих частот Room LF и HF соответственно (в децибелах). В этой же подгруппе коэффициенты затухания (Decay) для LF и HF и коэффициент поглощения высоких частот воздуха (Air Absorption HF).
Четвертая подгруппа отвечает за зернистость (granularity) отраженного звука. Слово "зернистость" не очень подходит, поэтому я предпочитаю использовать плотность. Тут находиться коэффициент диффузии 0…1 (Environment Diffusion), и параметры эха Echo Depth и Echo Time — число повторений оригинального звука во время затухания. Например, по умолчанию, Echo Time 250 мс — это значит, что эхо повторяется 4 раза в секунду. Если вы стукните в барабан в таком помещении, вы услышите повторение звука удара 4 раза в секунду. Таким образом, эта подгруппа контролирует плотность и соответственно реалистичность.
Одна из самых интересных подгрупп, пятая — эффекты панорамирования. С их помощью можно существенно повысить динамику отраженного звука. Зная минимально расположение комнат можно так настроить программу, чтобы считать и устанавливать направление, откуда больше всего приходят отражения. Например, учитывая положение ближайших стен к игроку. Или, представите ситуацию, что игрок находиться в пространстве без эха (на открытой местности), но слышит отраженный звук из отверстия пещеры, находящийся неподалеку. Программа может панорамировать отраженный звук, как будто он исходит из отверстия пещеры. Для этой цели существует параметр Reverb Pan (первичные отражения) и Reflections Pan (вторичные отражения). Это единичный вектор с координатами (x,y,z), изменяющимися от 0 до 1. По умолчанию все значения равны 0 — это значит, что отражения могут приходить со всех направлений. Значение 1 это экстремальный случай, означает что отражения приходят только с одного направления и поэтому, максимальное значение лимитировано по 0.7 для всех координат.
[attachmentid=166]
И, наконец, последняя подгруппа, Pitch Modulation effects (эффекты модуляции тона)
Эти эффекты не наблюдаются в реальных окружениях (environment). Скорее, они созданы для эмоциональной нагрузки. Например, для создания ощущения головокружения, интоксикации и т.д. Сюда входят Modulation Depth (0...1) и Modulation Time (0.4...4 seconds).
Sound Source ParametersКак и параметры слушателя, параметры источников делятся на несколько подгрупп.
Первая подгруппа, аналогична первой подгруппе Слушателя — контроль уровней громкости. Тут громкость прямого пути (Direct) и дополнительная громкость поглощения высоких частот (Direct HF). И, аналогично, громкость для первичных отражений (Room) и громкость поглощения высоких частот для отраженного звука (Room HF).
Во второй подгруппе находятся 3D свойства источников звука: коэффициенты Roll-off Factor, Room Roll-off Factor и Air Absorption Factor и флаги, для автоматического расчета некоторых параметров.
Третья группа параметров — это эффекты окклюзии. Типы окклюзий мы рассматривали в первой части, поэтому тут сосредоточимся на некоторых деталях. Как я уже говорил, эти эффекты не более чем фильтры, применяемые к звуку прямого пути и/или к отражениям.
Итак, Occlusions (Эффекты, возникающие при прохождении звука через препятствие, когда источник и слушатель разделены непреодолимой для звука преградой) parameters включают 4 параметра: Occlusion, по сути, громкость эффекта в децибелах (-10000 до 0 dB), и Occlusion LF Ratio — коэффициент поглощение низких частот (0...1), Occlusion Room Ratio и Occlusion Direct Ratio — коэффициенты, контролирующие степень фильтрации звука прямого пути и отраженного звука.
Obstructions (И слушатель и источник находятся в одном помещении, путь прямого прохождения звука перекрыт преградой, но отраженный звук доходит до слушателя полностью). Включает в себя 2 параметра: Obstruction (громкость эффекта -10000...0 dB) и Obstruction LF Ratio- коэффициент затухания низких частот (как в Occlusions).
И, наконец, Exclusions (Источник и слушатель находятся в разных комнатах, но в стене есть проем — прямая видимость, и, как следствие, прямой путь полностью попадает к слушателю, а вот отраженный звук доходит частично). Тут тоже два параметра, как и в Obstructions.
EAX4 (EAX Advanced HD version 4)В марте 2003 компания Creative анонсировала EAX Advanced HD version 4, который официально появиться где-то в конце апреля или в мае 2003. К сожалению, сейчас Creative не даёт разрешения на более подробное описание их новой версии ЕАХ4 с техническими подробностями. Поэтому нам придется ограничиться абстрактным описанием. В принципе, все что мы рассмотрели для ЕАХ3 осталось справедливым и для ЕАХ4, но с небольшими изменениями — немного изменилась концепция.
Итак, что же нового в
EAX Advanced HD version 4:
-
Studio quality effects-
Multiple effect slots-
Multiple Environments и
Zoned effects-
EAX4 представляет 11 звуковых эффектов студийного качества. Вы можете использовать любой из эффектов, представленных ниже для 2D и 3D источников звука.AGC Compressor — автоматически выравнивает громкость источника звука
Auto-Wah — автоматическая версия «Wah» педали
Chorus — делает звук одного инструмента как звучание нескольких инструментов
Distortion — симулирует «overdriving» гитарный усилитель
Echo — вносит движение и расширяет звуковое пространство для источника
Equalizer — 4-х полосный эквалайзер
Flanger — создает эффект создания «tunneling» или «whooshing» звука (как реактивный самолет пролетает над головой) — эффект модуляции частоты входного сигнала
Frequency Shifter — сдвигает частоты входного сигнала на заданную величину
Vocal Morpher — накладывает специальные эффекты для вокала на входной сигнал (пара 4-полосных формантных фильтров, создающие эффект Vocoder, но с предустановленными сигналами модуляции)
Pitch Shifter — сдвигает частоту звука с сохранением гармоник и темпа
Ring Modulator — умножает входной сигнал на другой (модулирующий) во временной области
Ну и, конечно,
Environment Reverb — основа ЕАХ.
Более подробно как работают некоторые эффекты можно почитать на
http://www.harmony-central.com/Effects/eff...-explained.html.
Эти эффекты дают бесконечные возможности для творчества и применения для игр. Например, эффект Flanger можно применять для звука machine gun создавая иллюзию перегрева или наоборот стрельбы быстрее в реальном режиме времени, не изменяя звуковой файл или симулировать эффект рации с помощью Distortion и Equalizer. Можно придумать множество идей, но есть одна проблема — всё это будет работать только на Audigy / Audigy 2. В любом случае, часть таких эффектов встроены в Direct Sound 8 или всегда можно эмулировать программно.
Multiple effect slotsВторой объявленной фичей является несколько слотов для эффектов. В эти слоты вы можете добавлять несколько из выше перечисленных эффектов одновременно. Для примера, вы можете слышать звук одновременно в нескольких окружениях (environments) или та же рация, где кроме Distortion и Equalizer еще используется и Environment Reverb, создавая иллюзию переговорного устройства в каком-то помещении с эхом.
Multiple EnvironmentsРассмотрим следующий сценарий. 3 источника звука находятся вокруг слушателя. Источник 1 слышен в окружении (environment) слушателя с эффектом Occlusions. Источник 2 распространяется с Obstructions и Exclusions. Третий источник с Exclusions. Все параметры могут быть установлены вызовом четырёх ЕАХ3 функций — одна для установки окружения слушателя и 3 для установки эффектов Occlusions, Obstructions и Exclusions источников (дополнительные параметры устанавливается во время этих основных установок).
[attachmentid=167]
Теперь, рассмотрим эту же ситуацию для ЕАХ4. Теперь у каждого источника свое окружение (environment) и у слушателя свое — основное. Звук каждого источника распространяется как по своему окружению, так и по окружению слушателя. Эффекты Occlusions, Obstructions и Exclusions источников применяются как к окружению источников, так и к окружению слушателя. То есть, мы получаем результат взаимодействия источников в своем окружении, плюс еще взаимодействие в окружении слушателя.
Конечно же, эти установки требуют большего числа вызовов функций ЕАХ4: надо установить все окружения: для источников, слушателя и эффекты для каждого источника, но зато мы получаем более реалистичное звучание — каждый из источников звучит так, как будто он находиться в разных комнатах со слушателем вместо просто звучания вне комнаты слушателя как в примере с ЕАХ3.
[attachmentid=168]
Zoned effectsТеперь, в СДК документации появилось еще понятие Зон, очень похожее на Room или Environment (на самом деле означает то же самое). Creative Labs рекомендуют разбивать визуальную геометрию на некие зоны, в каждой из которых будут свои свойства — свой пресет для реверберации. Если игра (программа) знает, в какой из зон находится слушатель и все источники, то можно установить соответствующие параметры автоматически. Целесообразнее разбивать на зоны в редакторе уровней, где audio designer сможет расставить идентификаторы для зон и параметры реверберации.
EAX Advanced HD 4 дает больше возможностей для создания плавных переходов между зонами. Как и в ЕАХ3, отслеживается текущая зона (environment), в которой находиться слушатель, и, когда совершается переход в другую зону, включается операция морфирования. Но теперь это уже может быть морфирование параметров в слотах, то есть необязательно каждый раз загружать параметры.
[attachmentid=169]
Например на слайде видны 3 зоны (3 environments). Зона 1 — некое цилиндрообразное помещение, Зона 2 — маленькое помещение с низким потолком и Зона 3 — длинный коридор. В каждом из них будет свой специфический эффект реверберации. Мы загружаем все 3 пакета с параметрами в слоты и когда нужен будет переход — плавно морфируем параметры (см. Environment Morphing).
Особо надо подчеркнуть эффекты панорамирования (Reverb / Reflections panning) и окклюзии. В эти же слоты, которые мы рассмотрели выше, можно будет загрузить несколько разных Environment Reverb-ов для каждой из Зон и динамически менять или морфировать один в другой для полной реалистичности звучания.
На иллюстрации видно, что источник звука находиться в Зоне с пресетом 3, а слушатель а зоне 2. Зона 3 соединена с зоной 2 дверным проемом (Эффект Exclusion — direct path проходит, отражения приглушаются и фильтруются). Зона 3, тем не менее, соединена с Зоной 2. Итак, прямой путь источника звука и приглушенные с помощью окклюзии (в данном случае exclusion) отражения из Зоны 3 проходят в Зону 2, отражаются тут и попадают к Слушателю. На этом можно было и закончить, но у нас есть Зона1 позади слушателя. Сейчас там нет источников звука (если бы был, то и прямой и отраженный пути попали бы на слушателя и соответственно бы провзаимодействовали с Зоной 2). Но, мы можем настроить вектора для панорамирования таким образом, что отражения из Зоны 2 будут попадать в Зону 3, взаимодействовать там и попадать обратно к слушателю. Таким образом, мы получим очень реалистичную звуковую сцену.
Ну вот, вкратце, что нас ждет в ближайшем будущем. Это все, конечно, красиво на словах, а когда все дойдет до реализации — все будет не так радужно, как бы нам хотелось. Основной проблемой будет определение в какой зоне находиться источник звука, правильная загрузка параметров ближайших зон и трассировка каждого источника на предмет Occlusions, Obstructions или Exclusions. Конечно же, совершенно необязательно включать в игру все эффекты, предлагаемые ЕАХ4. Вполне возможно, что в вашем проекте достаточно только реалистичного Environment Morphing и эффекта звука за стенкой — Occlusion.
Автор:
http://www.ixbt.com