AEF file format: Difference between revisions

From Arx Libertatis Wiki
Jump to navigation Jump to search
mNo edit summary
No edit summary
 
Line 1: Line 1:
{{Stub}}
'''.aef''' files describe EAX 2.0 audio environments: reverb settings, etc.


'''.aef''' files describe audio environments: reverb settings, etc.
See [[Common file format types]] for a description of the type names used here.


They are parsed in [https://github.com/arx/ArxLibertatis/blob/ArxFatalis-1.21/Sources/Athena/Athena_Environment.cpp#L73 <code>ATHENA::Environment::Load()</code>] in Arx Fatalis 1.21.
They are parsed in [https://github.com/arx/ArxLibertatis/blob/ArxFatalis-1.21/Sources/Athena/Athena_Environment.cpp#L73 <code>ATHENA::Environment::Load()</code>] in Arx Fatalis 1.21.


Arx Fatalis only uses a single audio environment (<code>sfx/environment/alley.aef</code>) even though the game ships with multiple environments.
Arx Fatalis only uses a single audio environment (<code>sfx/environment/alley.aef</code>) even though the game ships with multiple environments. Audio environments can be enabled/disabled using the EAX setting.
 
Audio environments are stored as nine 32-bit IEEE 754 floating point numbers without any additional header or magic number:
 
{| class="wikitable"
! Type
! Description
! EAX 2.0 EAXLISTENERPROPERTIES
! EFX AL_EFFECT_REVERB
|-
| <b>f32</b>
| Environment size
| flEnvironmentSize = x
| ''(unused)''
|-
| <b>f32</b>
| Reverb diffusion
| flEnvironmentDiffusion = x
| AL_REVERB_DIFFUSION = x
|-
| <b>f32</b>
| High-frequency air absorption
| flAirAbsorptionHF = x * -100
| AL_REVERB_AIR_ABSORPTION_GAINHF = pow(10, x * -100 / 2000)
|-
| <b>f32</b>
| Reflection gain
| lReflections = 2000 * log10(x)
| AL_REVERB_REFLECTIONS_GAIN = x
|-
| <b>f32</b>
| Reflection delay
| flReflectionsDelay = x / 1000
| AL_REVERB_REFLECTIONS_DELAY = x / 1000
|-
| <b>f32</b>
| Reverb gain
| lReverb = 2000 * log10(x)
| AL_REVERB_LATE_REVERB_GAIN = x
|-
| <b>f32</b>
| Reverb delay
| flReverbDelay = x / 1000
| AL_REVERB_LATE_REVERB_DELAY = x / 1000
|-
| <b>f32</b>
| Decay time
| flDecayTime = x / 1000
| AL_REVERB_DECAY_TIME = x / 1000
|-
| <b>f32</b>
| High-frequency decay time
| flDecayHFRatio = (x / 1000) / flDecayTime
| AL_REVERB_DECAY_HFRATIO = (x / 1000) / AL_REVERB_DECAY_TIME
|}
 
Additionally the following properties are hardcoded:
{| class="wikitable"
! EAX 2.0 EAXLISTENERPROPERTIES
! EFX AL_EFFECT_REVERB
|-
| dwEnvironment = 0
|
|-
| dwFlags = EAXLISTENERFLAGS_DECAYHFLIMIT
| AL_REVERB_DECAY_HFLIMIT = AL_TRUE
|-
| flRoomRolloffFactor = 1.3
| AL_REVERB_ROOM_ROLLOFF_FACTOR = 1.3
|-
| lRoom = 0
| AL_REVERB_GAIN = 1
|-
| lRoomHF = 0
| AL_REVERB_GAINHF = 0.8
|-
|
| AL_REVERB_DENSITY = 1
|}
 
The '''EAXLISTENERPROPERTIES''' column lists the is the EAX property the value was mapped to in AF 1.21 and the '''AL_EFFECT_REVERB''' column lists the EFX property it is currently mapped to in Arx Libertatis. Refer to the [https://kcat.strangesoft.net/misc-downloads/Effects%20Extension%20Guide.pdf OpenAL EFX documentation for detailed descriptions].

Latest revision as of 19:24, 14 May 2019

.aef files describe EAX 2.0 audio environments: reverb settings, etc.

See Common file format types for a description of the type names used here.

They are parsed in ATHENA::Environment::Load() in Arx Fatalis 1.21.

Arx Fatalis only uses a single audio environment (sfx/environment/alley.aef) even though the game ships with multiple environments. Audio environments can be enabled/disabled using the EAX setting.

Audio environments are stored as nine 32-bit IEEE 754 floating point numbers without any additional header or magic number:

Type Description EAX 2.0 EAXLISTENERPROPERTIES EFX AL_EFFECT_REVERB
f32 Environment size flEnvironmentSize = x (unused)
f32 Reverb diffusion flEnvironmentDiffusion = x AL_REVERB_DIFFUSION = x
f32 High-frequency air absorption flAirAbsorptionHF = x * -100 AL_REVERB_AIR_ABSORPTION_GAINHF = pow(10, x * -100 / 2000)
f32 Reflection gain lReflections = 2000 * log10(x) AL_REVERB_REFLECTIONS_GAIN = x
f32 Reflection delay flReflectionsDelay = x / 1000 AL_REVERB_REFLECTIONS_DELAY = x / 1000
f32 Reverb gain lReverb = 2000 * log10(x) AL_REVERB_LATE_REVERB_GAIN = x
f32 Reverb delay flReverbDelay = x / 1000 AL_REVERB_LATE_REVERB_DELAY = x / 1000
f32 Decay time flDecayTime = x / 1000 AL_REVERB_DECAY_TIME = x / 1000
f32 High-frequency decay time flDecayHFRatio = (x / 1000) / flDecayTime AL_REVERB_DECAY_HFRATIO = (x / 1000) / AL_REVERB_DECAY_TIME

Additionally the following properties are hardcoded:

EAX 2.0 EAXLISTENERPROPERTIES EFX AL_EFFECT_REVERB
dwEnvironment = 0
dwFlags = EAXLISTENERFLAGS_DECAYHFLIMIT AL_REVERB_DECAY_HFLIMIT = AL_TRUE
flRoomRolloffFactor = 1.3 AL_REVERB_ROOM_ROLLOFF_FACTOR = 1.3
lRoom = 0 AL_REVERB_GAIN = 1
lRoomHF = 0 AL_REVERB_GAINHF = 0.8
AL_REVERB_DENSITY = 1

The EAXLISTENERPROPERTIES column lists the is the EAX property the value was mapped to in AF 1.21 and the AL_EFFECT_REVERB column lists the EFX property it is currently mapped to in Arx Libertatis. Refer to the OpenAL EFX documentation for detailed descriptions.