public sealed class ReverbEffectA room, built out of eight comb filters and four allpasses per channel.
No guide page documents this yet — the page shows what the code says about itself.
Remarks
Jezar's Freeverb, which is public domain and is the reverb in a surprising share of everything. It was chosen over a convolution reverb for the reason a game engine always chooses it: an impulse response is a per-room asset somebody has to author and a partitioned convolution to run it, where this is four hundred lines of adds and one knob a level designer understands. A convolution reverb is a later, larger effect that plugs into the same IAudioEffect.
The delay lengths are prime-ish and mutually irrational on purpose. Comb filters at related lengths reinforce each other into a ringing pitch instead of a diffuse tail, which is why these particular numbers and not round ones. They are quoted at 44 100 Hz, as Freeverb defines them, and scaled to whatever rate the device opened at — a reverb that ignored the rate would be a third shorter at 48 kHz and audibly different on two machines.
The stereo image comes from a 23-sample offset per channel, not from two different reverbs. Beyond two channels each one gets its own offset and is processed independently; Width only means anything with exactly two, where there is a left and a right to cross-feed.
Fields and properties (7)
public float RoomSizeHow big the room is, from a cupboard at 0 to a cathedral at 1.
public float DampingHow fast the high frequencies die away, from a tiled bathroom at 0 to a carpeted one at 1.
public float WetHow much of the reverberated signal to add.
public float DryHow much of the untouched signal to keep.
public float WidthHow wide the stereo image of the tail is, from mono at 0 to fully spread at 1.
public bool EnabledWhether it does anything. A bypassed effect costs one branch a block.
public IReadOnlyList<string> PropertiesThe knobs this effect will answer to, by name.
Methods (5)
public void Prepare(in AudioFormat format, int maxFrames)Sizes and clears every buffer the effect needs.
public void Process(Span<float> buffer, int frameCount, int channels)Processes a block in place.
public void Reset()Throws away everything the effect remembers about what came before.
public bool TrySetProperty(string name, float value)Sets one of the effect's knobs by name, for automation.
public bool TryGetProperty(string name, out float value)Reads one of the effect's knobs by name.
Used by (8)
- AllpassVixen.Audio
- AudioEffectTestsVixen.Audio.Tests
- AudioRoutingTestsVixen.Audio.Tests
- MixControlServerTestsVixen.Audio.Tests
- MixControlTestsVixen.Audio.Tests
- MixerAssetTestsVixen.Audio.Tests
- MixerParameterTestsVixen.Audio.Tests
- ReverbEffectAssetVixen.Audio