This file is an overview - more details are provided on each sub-page.
## Enable Reverb
Enable reverb on an emitter by setting `ReverbRayCount` to a value greater than 0:
```cs
var listener = new Emitter()
{
ReverbRayCount = 32,
ReverbBounceCount = 64,
ReverbEnergyCap = 32 * 64 * 0.05,
MaxEchogramTime = 1000, // milliseconds
EchogramGranularity = 10, // milliseconds
AffectsGroupedEAX = false,
HasReverbPan = false,
EAXPanInnerThreshold = 0.6f,
EAXPanOuterThreshold = 0.8f,
};
context.AddEmitter(listener);
```
I recommend having a much higher bounce count for reverb than other ray types (occlusion, permeation, etc). Read more about all reverb fields here: [[Reverb Settings]].
## Access Reverb Results
Reverb results are exposed via the `OnReverbUpdated` callback on the `RaytracingContext`. This gives you a chance to create/update reverb effects before playing a sound.
```cs
var listener = new Emitter()
{
ReverbRayCount = 32,
...
};
var context = new RaytracingContext()
{
OnReverbUpdated = () =>
{
// Access reverb stats
Console.WriteLine(listener.RawReverb.ReturnedTotal);
Console.WriteLine(listener.ProcessedReverb.OutsidePercent);
Console.WriteLine(listener.EAX.DecayTime);
// Update reverb effects
// ...
}
};
context.AddEmitter(listener);
```
The values in `Emitter.EAX` can be copied directly onto an EAX reverb effect in your engine. If you wish to calculate these values yourself, see [[raytraced-audio/v110/Formulas/Custom EAX Formulas|Custom EAX Formulas]].
> [[raytraced-audio/v110/Planned Features|Planned feature]]: calculate reverb properties for Godot, FMOD and Wwise (they are slightly different to EAX)
## Raw Reverb
`Emitter.RawReverb` contains the raw results of raytracing, such as the number of rays returned to the listener. Read more: [[raytraced-audio/v110/Classes/RawReverbResults|RawReverbResults]].
```cs
public class RawReverbResults
{
public float DistanceTotal;
public float ReturnedTotal;
public float OutsideTotal;
}
```
## Processed Reverb
`Emitter.ProcessedReverb` contains the results of raytracing that have been processed into a more dev-friendly format. Read more: [[raytraced-audio/v110/Classes/ProcessedReverbResults|ProcessedReverbResults]].
## Grouped EAX
Every emitter has its own EAX object, but it's expensive to run many reverb effects in real time. The engine will group emitters with similar reverb properties together. These grouped EAX objects can be accessed in the `context.GroupedEAX` list.
Read more: [[Grouped EAX]].
## Reverb Pan
Vercidium Audio can calculate the direction of reverb for each entry in `context.GroupedEAX`.
To enable this, set `HasReverbPan` to true on the emitter that you would like to hear directional reverb from (usually just your main listener emitter):
```cs
var emitter = new Emitter()
{
HasReverbPan = true,
};
```
Then access the `pan` dictionary on each entry in `context.GroupedEAX`:
```cs
context.OnReverbUpdated = () =>
{
foreach (var eax in context.GroupedEAX)
{
Vector3F pan = eax.Pan[listener];
}
};
```
Read more: [[Reverb Pan]].