Підтримка eax в бібліотеці fmod

Знайомство зі специфікацією EAX

Розроблена і просувається фірмою Creative Labs система просторової обробки звуку 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 для роботи з EAX

Популярна серед багатьох розробників (особливо серед ентузіастів, що створюють некомерційне програмне забезпечення) бібліотека функцій роботи зі звуком 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.h визначені три константи: FSOUND_CAPS_HARDWARE, FSOUND_CAPS_EAX2, FSOUND_CAPS_EAX3, які задають бітові поля, які свідчать про підтримку апаратного 3D звуку, EAX 2.0 і EAX 3.0 відповідно.

Функція FSOUND_GetDriverCaps () повинна викликатися до виклику функції FSOUND_Init () або після виклику функції FSOUND_Close ();

Структури FSOUND_REVERB_PROPERTIES і FSOUND_REVERB_CHANNELPROPERTIES

З точки зору програміста специфікацію EAX можна уявити як структуру, що описує ревербераційні параметри приміщення (простору). Таких параметрів може бути більше двох десятків.

Структура FSOUND_REVERB_PROPERTIES містить параметри, загальні для всіх існуючих джерел звуку. Структура FSOUND_REVERB_CHANNELPROPERTIES характеризує окремо взятий джерело (канал). Нижче представлені списки членів цих структур: спочатку для FSOUND_REVERB_PROPERTIES, а потім FSOUND_REVERB_CHANNELPROPERTIES. Детальний розгляд фізичного сенсу зазначених параметрів виходить за рамки статті. З усіх питань слід звертатися до документації по EAX.

Ось список пресетів, які використовуються при роботі з DirectSound3D в системі Windows:

  • FSOUND_PRESET_OFF - обробка реверберації відключена
  • FSOUND_PRESET_GENERIC - параметри за замовчуванням
  • FSOUND_PRESET_PADDEDCELL - "келія (палата), мешкаючи матеріалом"
  • FSOUND_PRESET_ROOM - "кімната"
  • FSOUND_PRESET_BATHROOM - "ванна кімната"
  • FSOUND_PRESET_LIVINGROOM - "житлова кімната"
  • FSOUND_PRESET_STONEROOM - "кімната з кам'яними стінами"
  • FSOUND_PRESET_AUDITORIUM - "аудиторія"
  • FSOUND_PRESET_CONCERTHALL - "концертний зал"
  • FSOUND_PRESET_CAVE - "печера"
  • FSOUND_PRESET_ARENA - "арена"
  • FSOUND_PRESET_HANGAR "ангар"
  • FSOUND_PRESET_CARPETTEDHALLWAY - "коридор (передпокій), викладений килимами"
  • FSOUND_PRESET_HALLWAY - "коридор" ( "передпокій")
  • FSOUND_PRESET_STONECORRIDOR - "коридор з кам'яними стінами і підлогою"
  • FSOUND_PRESET_ALLEY - "алея"
  • FSOUND_PRESET_FOREST - "ліс"
  • FSOUND_PRESET_CITY - "місто"
  • FSOUND_PRESET_MOUNTAINS - "скелі"
  • FSOUND_PRESET_QUARRY - "кар'єр"
  • FSOUND_PRESET_PLAIN - "степ"
  • FSOUND_PRESET_PARKINGLOT - "автостоянка"
  • FSOUND_PRESET_SEWERPIPE - "каналізаційна труба"
  • FSOUND_PRESET_UNDERWATER - "під водою"
  • FSOUND_PRESET_DRUGGED - "загальмований"
  • FSOUND_PRESET_DIZZY - "запаморочливий"
  • FSOUND_PRESET_PSYCHOTIC - "психотичний"

Установка і читання просторових параметрів

Для призначення певних просторових параметрів джерела об'ємного звуку в бібліотеці FMOD призначені функції FSOUND_Reverb_SetProperties () і FSOUND_Reverb_SetChannelProperties (). Для отримання встановлених параметрів, служать зворотні функції FSOUND_Reverb_GetProperties () і FSOUND_Reverb_GetChannelProperties (). Установку параметрів реверберації можна виконувати і під час відтворення звуку. Для того щоб нові параметри вступили в силу, необхідно викликати функцію FSOUND_Update ().

приклад програми

  • fmodbc.lib - для Borland C Builder
  • fmodlcc.lib - для lccwin32
  • fmodvc.lib - для Microsoft Visual C / C ++
  • fmodwc.lib - для Watcom C ++

У пропонованому прикладі використовуються функції Win32 API і бібліотеки FMOD. Для роботи програми ви повинні встановити у себе на комп'ютері бібліотеку fmod або помістити в папку з виконуваним файлом (eaxdemo.exe) файл бібліотеки fmod.dll.

Схожі статті