Reverberation Actor
last updated: Geoffrey Zheng, September 20, 1998
Background
The artificial reverberation actor is based upon M. R. Schroeder's classical
comb/all-pass filter network reverberator, and some other sources described
at the end of this document. This kind of artificial reverberator is designed
to imitate both the time and frequency responses of real reverberation
of all sorts of environment, mainly enclosures like room and concert hall.
Based on acoustics and experiments, a lot factors characterize enclosure
reverberation. A network consists of cascaded reverberation units is appropriate
to realize these characteristics.
The reverberator always map all the channels of the sound source down to 1
before all calculation. The localization actor can be used AFTER the reverberator
to localize sound.
All the technical details of the reverberation network is described
in a separate file for more inquisitive users.
The following parameters can to be set by actor and handler messages for general
use:
Parameter |
Message |
Valid range |
Description |
Reverberation mix |
SetMix |
[0,1] |
The balance between dry (direct) and wet sound (reverberation). Setting
it to 1 yields purely wet, and 0 purely dry. |
Reverberation gain |
SetGain |
[0,10] |
Scaling of reverberation sound BEFORE it is mixed with the dry sound.
The bigger value the louder reerberation. Be aware that clipping may occur
if the gain is too high. Combinations of reverberation gain and mix can
produce arbitrary distance perception of the sound source. |
Reverberation time |
SetTime |
(0,1] |
Length of reverberation. The actual reverberation time depends on the
subtle interation between almost all parameters including revberation
mix, gain, time, brightness, and the volume that the sound is playing.
The bigger value the longer reverberation. With default values, set the
time to 1 will produce an approximate 15-second reverberation. |
Reverberation brightness |
SetBright |
(0,1] |
Brightness of reverberation. The bigger value, the brighter reverberation
sounds. However, value greater than 0.4 is not recommended, because it
will lead to annoying ringing and metallic sound. A "warm" reverberation
can be produced by setting brightness low and raising the reverberation
gain. |
Damp ratio |
SetDampRatio |
[1,30] |
Ratio of low-frequency reverberation time to high-frequency reverberation
time. For any kind of enclosure, high-frequency components of a sound decay
away faster than low-frequency components. The bigger value, the faster
high-frequency components die out than low-frequency components. |
The following table lists other parameters for more advanced user to
have more controls over the reverberation.
Please note one thing special about the early
reflection delays. The amount of delay of each early reflection
denotes the amount of milliseconds that reflection will be heard after
the PREVIOUS reflection, but not the original sound, with the exception
of the first reflection. So if there're 3 early reflections and their delays
are a, b, c respectively, they will be heard at a, a+b and a+b+c milliseconds
after the original sound. Also for saving memory, the maximum delay is
500ms. (With 22050Hz sampling rate, a 500ms float data delay line requires
22050*0.5*4 = 44KByte of memory. With maximum number of early reflections,
comb filters and all-pass filters, the ReverbActor requires about 313KB
memory.) If any reflection delay longer than 500ms is required,
multiple reflection delays can be added up, with the coefficients to be
zeroes except the last one, as the preset Canyon.
Parameter |
Message |
Valid range |
Description |
Input bandpass filter pole |
SetPole |
[-0.5,0.5] |
Pole position of the input bandpass filter. The bigger value, the low
center frequency of the filter. |
Early reflection
Number
Delay
Coefficients
|
SetEarlyRefNum
SetEarlyRefDelay
SetEarlyRefCoeff |
[0,6]
[0.1,500](ms)
[0,1] |
Parameters controlling early reflections. Early reflection is simply
a delayed and scaled version of the original sound. |
Comb filter
Number
Delay |
SetCombNum
SetCombDelay |
[0,6]
[0.1,100](ms) |
Parameters controlling comb filters. |
All-pass filter
Number
Delay |
SetAllPassNum
SetAllPassDelay |
[0,3]
[0.1,10](ms) |
Parameters controlling all-pass filters. |
To find the right combination of all the parameters
above for a specific kind of reverberation is not trivial. 5 presets are
provided as a starting point for further adjustment for individual requirements:
Preset name |
Default
|
SmallRoom
|
Hall
|
Echo
|
Canyon
|
Description |
Default values for a moderate reverberation with mininum computational
load. |
Reverberation in a small-size room. |
Reverberation in a midium-size hall. |
Reverberation with distinct echoes. |
Reverberation in a grand canyon. |
Reverberation mix |
0.5 |
0.4 |
0.5 |
0.5 |
0.75 |
Reverberation gain |
1. |
1. |
1. |
1. |
1.5 |
Reverberation time |
0.3 |
0.2 |
0.5 |
0.5 |
0.7 |
Reverberation brightness |
0.15 |
0.15 |
0.15 |
0.15 |
0.1 |
Damp ratio |
1. |
5. |
8. |
8. |
10. |
Pole |
0. |
0.25 |
0.25 |
0.25 |
0.45 |
Early reflection
Number
Delay
Coefficients |
2
20. 18.
.82 .63 |
5
20. 23. 30. 35. 39
.82 .82 .63 .72 .53
|
5
20. 23. 30. 35. 39
.82 .82 .63 .72 .53
|
0 |
6
500. 500. 450. 450. 400. 400.
0. .92 0. .8 0. .6
|
Comb filter
Number
Delay |
4
50. 56. 61 .68 |
6
50. 56. 61. 68. 72. 78.
|
6
50. 56. 61. 68. 72. 78.
|
1
100.
|
6
50. 56. 61. 68. 72. 78.
|
All-pass filter
Number
Delay |
1
6. |
1
6.
|
3
6. 1.7 .63
|
3
6. 1.7 .63
|
3
6. 1.7 .63
|
To play with all the parameters, use the standard testcase audpanel by
running make test at command prompt. Five message groups are dedicated
to adjust all parameters. The first contains all "global" parameters
including RevMix, RevGain, RevTime, RevBright, DampRatio, Pole, EarlyRefNum,
CombNum and AllPassNum. It is recommended to use the "hit" button
instead of check "Send when changed". The second message group
contains early reflection delays, the third for early reflection coefficients,
the fourth for comb filter and all-pass filter delays, the fifth for preset.
Usage
To use the reverberation actor, load reverb.so and create an
actor of type ReverbActor. Then create a handler of the actor
using BeginSound, and use SetInput to direct a sound
source through the reverberator. It is recommended to use sleep
command after creating a ReverbActor handler or setting preset to give
time for allocating memory and setup reverberator.
ReverbActor messages
In addition to the messages understood by all generator actors, the
ReverbActor understands the following messages:
- SetMix hActor x
- Set the default reverberation mix for new instances
createdby this actor to x. Valid range is [0,1].
- SetAllMix hActor x time
- Set the reverberation mix of all children to x, and set the
default effect mix for all future children. If time is
specified, children will modulate to the new value over the specified duration.
Default value is always set immediately regardless of time.
- SetTime hActor x
- Set the default reverberation time for new instances
created by this actor to x. Valid range is (0,1].
- SetAllTime hActor x time
- Set the reverberation time of all children to x, and set the
default value for all future children.
- SetGain hActor x
- Set the default reverberation gain for new instances
created by this actor to x. Valid range is (0,10].
- SetAllGain hActor x time
- Set the reverberation gain of all children to x, and set the
default value for all future children.
- SetBright hActor x
- Set the default reverberation brightness for new instances
created by this actor to x. Valid range is (0,1].
- SetAllBright hActor x time
- Set the reverberation brightness of all children to x, and set the
default value for all future children.
- SetDampRatio hActor x
- Set the default damp ratio for new instances
created by this actor to x. Valid range is [1,30].
- SetAllDampRatio hActor x time
- Set the damp ratio of all children to x, and set the
default value for all future children.
- SetPole hActor x
- Set the default pole for new instances
created by this actor to x. Valid range is [-0.5,0.5].
- SetAllPole hActor x time
- Set the pole of all children to x, and set the
default value for all future children.
ReverbActor handler messages
In addition to the messages understood by all handlers, the handler
for the ReverbActor understands the following messages:
- SetIdle hHandler boolean
- Set the handler idle state, 1 is idle, 0 is not. An idle handler doesn't do
anything except receiving messages until it is set not to be idle. SetIdle can
be used to reduce ReverbActor's machine usage when it is not currently in use.
- SetInput hHandler hSound
- Set the input to come through the handler hHandler.
- SetPreset hHandler x
- SetPresetNum hHandler x
- SetPresetFile hHandler x
- Set this handler to use preset x. Available presets
are described above. SetPreset accepts preset name Default, SmallRoom,
Hall, Echo or Canyon. SetPresetNum accepts preset number 0 to
4. SetPresetFile accepts preset data file name. A sample
data file is given.
- SetMix hHandler x time
- Set the reverberation mix for this handler to x.
If time is specified, move to the new value over the specified
duration.
- SetGain hHandler x time
- Set the reverberation gain for this handler to
x. Valid range is (0,10].
- SetTime hHandler x time
- Set the reverberation time for this handler to x.
Valid range is (0,1].
- SetBright hHandler x time
- Set the reverberation brightness for this handler
to x. Valid range is (0,1].
- SetDampRatio hHandler x time
- Set the damp ratio for this handler to x. Valid
range is [1,30].
- SetPole hHandler x time
- Set the pole for this handler to x. Valid range
is [-0.5,0.5].
- SetEarlyRefNum hHandler x
- Set the number of early reflections for this handler
to x. Valid range is [0,6]. 0 will let sound through directly. If no early
reflection delays and coefficients are specified afterwards, default values
will be used.
- SetEarlyRefDelay hHandler [x1 x2 x3 ...]
- Set the early reflection delays. Valid range is from [0.1,500](ms).
The number of delays must agree with the number previously set by SetEarlyRefNum.
If delays provided are less than the number of early reflections, default
values will be used. If more, the first several ones will be taken.
- SetEarlyRefCoeff hHandler [x1 x2 x3 ...]
- Set the early reflection coefficients. Valid range is [0,1]. The number
of coefficients must agree with the number previously set by SetEarlyRefNum.
If coefficients provided are less than the number of early reflections,
default values will be used. If more, the first several ones will be taken.
- SetCombNum hHandler x
- Set the number of comb filters for this handler
to x. Valid range is [1,6].
- SetCombDelay hHandler [x1 x2 x3 ...]
- Set the comb filter delays. Valid range is [0.1,100](ms). The number
of delays must agree with the number previously set by SetCombNum. If delays
provided are less than the number of comb filters, default values will
be used. If more, the first several ones will be taken.
- SetAllPassNum hHandler x
- Set the number of all-pass filters for this handler
to x. Valid range is [0,3]. 0 will let sound through directly. If no all-pass
delays are specified afterwards, default values will be used.
- SetAllPassDelay hHandler [x1 x2 x3 ...]
- Set the all-pass filter delays. Valid range is [0.1,10](ms). The number
of delays must agree with the number previously set by SetAllPassNum. If
delays provided are less than the number of all-pass filters, default values
will be used. If more, the first several ones will be taken.