Robine Studio

Room Reverb

Delay & reverb · Circuit · Bronze

Room Reverb, as the Robine Studio app draws it

A small room, to be there rather than heard: eight reflections off its walls in its first few tens of milliseconds, then a short tail, from a third of a second to most of one with Decay. Size makes the room smaller or larger, Tone says how much of the highs its walls give back.

The sound of your amp in a room, not in a cathedral. You notice it most when you switch it off: the guitar goes flat and dry, as if played into a cushion. Switched on at a little of its Mix, it puts some air around the notes, a few walls answering within the first tens of milliseconds, then a short tail that is gone before the next chord. Turn Decay and Size up and the room grows, never into a hall.

Its story

There is no pedal behind it: it is a recipe. In 1962 Manfred Schroeder, at Bell Labs, made the first artificial reverberation out of delays fed back into themselves and allpass filters that blur an echo without colouring it. In 1979 James A. Moorer added what Schroeder’s tails lacked to sound like a real space: the first reflections off the walls, as a delay line read at a few points, before the tail. The same year Jont Allen and David Berkley published the image method: a reflection off a wall arrives as if from a copy of the source mirrored behind that wall, which gives its delay and its level from the size of the room. In 1997 Jon Dattorro published a complete reverberator, a ring of four delays and allpasses, which the library’s Plate Reverb plays as he drew it.

The variant you play

The Room Reverb is written for Robine Studio from those three pieces:

  • the first reflections are those the image method gives for an imagined room of 9 by 6.5 by 3.2 m, the amp on one side, the microphone across the room: the walls only, one and two bounces, each bounce keeping 0.8 of the sound. Eight reflections, from 5.9 to 32.3 ms after the direct sound. Floor and ceiling are left out: they come back within 3 ms and would only colour the dry sound;
  • the tail is Dattorro’s ring at 0.18 of its size (one turn of 130 ms instead of 725), after his four input diffusers at half of theirs. Its reverberation time (the time to fall by 60 dB) goes from 0.30 s to 0.81 s over Decay;
  • Size scales every delay together, the room from 0.71 to 1.41 times the one above: the reflections from 4 to 23 ms at 0, from 8 to 46 ms at 1;
  • Tone sets how much of the highs the walls give back, and how fast they leave the tail; Mix goes from the dry sound alone to the room alone.

It is in the basic rig, the one an empty engine is given, with Size at 0.3, Decay at 0.3 (0.33 s), Tone at 0.4 and Mix at 0.15: behind the rig, after a chord played hard, its tail is 31 dB under the chord at 0.15 s and 62 dB under at 0.35 s.

What it is not:

  • a particular room: the reflections are those of an imagined one, and the tail has the density and the decay of a room, not the resonances of any;
  • a circuit one could build: a reverb’s heart is not an electronic part, and the delay line is an ideal one;
  • stereo or moving: it is mono and nothing in it is modulated.

The circuit

One line per part: its name, the nodes it connects, its value (1e3 is 1 kΩ, 1e-8 is 10 nF). An A line is a delay line, its time between min and max set by a knob; an E line is an ideal amplifier, the last number its gain; a P line is a potentiometer (its two ends, then the wiper). gang=Size ties every delay to the one Size knob, as gang=Decay and gang=Tone do for theirs.

Robine room reverb
* Written for robine-spice: a small room, its early reflections then a short
* diffuse tail, in the manner J. A. Moorer describes ("About This Reverberation
* Business", Computer Music Journal 3(2), 1979): a tapped delay line for the
* reflections, a recirculating network fed by them for the rest.
*   - The reflections are the image sources (J. B. Allen and D. A. Berkley,
*     JASA 65(4), 1979) of a room of 9 x 6.5 x 3.2 m, the amplifier at (1.5,
*     1.5, 1.2) m, the microphone at (6, 4.2, 1.6) m: the walls only, up to two
*     bounces, each keeping 0.8 of the pressure, so eight taps from 5.9 to
*     32.3 ms after the direct sound. Floor and ceiling are left out: their
*     reflections come within 3 ms and would comb the dry signal;
*   - the tail is the tank of the plate reverb next to it (J. Dattorro, "Effect
*     Design, Part 1", JAES 1997) at 0.18 of its size, a loop of 130 ms, after
*     his four input diffusers at half of theirs, read at his seven taps
*     (scaled with it). A low-pass on two of its quarters, 16 to 1.5 kHz
*     with Tone, makes the highs leave first.
*     Its reverberation time runs from 0.3 to 0.8 s over Decay;
*   - Size scales every delay together, the room from 0.71 to 1.41 times the
*     one above (the reflections 4 to 23 ms at 0, 8 to 46 ms at 1).
* Measured on an impulse, Size and Tone at 0.5: T60 of 0.30, 0.44 and 0.81 s for
* Decay at 0, 0.5 and 1 (0.21 to 0.56 s with Size at 0, 0.44 to 1.15 s at 1); at
* Decay 0.5 the tail is 6 dB under the reflections, and on noise the wet is
* within 1 dB of the dry.
* It is not a model of a particular room: the reflections are those of one
* imagined room, and the tail has the density and the decay of a room, not the
* modes of any. Nothing is modulated, and it is mono. Nothing here is a circuit
* one could build; it is in the library because a reverberator is delay lines
* and filters, which the delay element makes expressible, and as a discreet
* room for any rig.
* Controls: Size, Decay, Tone (0 dark, 1 bright), Mix. Size, Decay and Tone
* each move several elements at once (gang=).
Vin in 0 DC 0
Rin in 0 1e6
Ebuffer dry 0 in 0 1
* What the walls give back: 8 kHz at most, 2.4 kHz with Tone at 0.
Rband dry band.a 2e3
PTone0 band.b band.a band.a 4.7e3 taper=lin pos=0.5 gang=Tone
Cband band.b 0 1e-8
Eband x0 0 band.b 0 1

* Early reflections: one delay line per image source, summed.
* back wall: +5.86 ms, 0.724 x 0.80^1
Aer1 er1.d 0 x0 0 min=4.143646e-03 max=8.287291e-03 pos=0.5 gang=Size
Eer1 er1 0 er1.d 0 0.5792
* left wall: +7.92 ms, 0.659 x 0.80^1
Aer2 er2.d 0 x0 0 min=5.600286e-03 max=1.120057e-02 pos=0.5 gang=Size
Eer2 er2 er1 er2.d 0 0.5272
* front wall: +9.68 ms, 0.613 x 0.80^1
Aer3 er3.d 0 x0 0 min=6.844794e-03 max=1.368959e-02 pos=0.5 gang=Size
Eer3 er3 er2 er3.d 0 0.4904
* back and left: +12.14 ms, 0.558 x 0.80^2
Aer4 er4.d 0 x0 0 min=8.584276e-03 max=1.716855e-02 pos=0.5 gang=Size
Eer4 er4 er3 er4.d 0 0.3571
* right wall: +16.29 ms, 0.485 x 0.80^1
Aer5 er5.d 0 x0 0 min=1.151877e-02 max=2.303754e-02 pos=0.5 gang=Size
Eer5 er5 er4 er5.d 0 0.3880
* right and back: +19.51 ms, 0.440 x 0.80^2
Aer6 er6.d 0 x0 0 min=1.379565e-02 max=2.759131e-02 pos=0.5 gang=Size
Eer6 er6 er5 er6.d 0 0.2816
* right twice: +24.81 ms, 0.382 x 0.80^2
Aer7 er7.d 0 x0 0 min=1.754332e-02 max=3.508664e-02 pos=0.5 gang=Size
Eer7 er7 er6 er7.d 0 0.2445
* back twice: +32.29 ms, 0.322 x 0.80^2
Aer8 er8.d 0 x0 0 min=2.283248e-02 max=4.566496e-02 pos=0.5 gang=Size
Eer8 er8 er7 er8.d 0 0.2061

* The reflections diffused, at half of Dattorro's input diffusers.
Ein1a in1.t 0 er8 0 1
Ein1b in1.v in1.t in1.d 0 -0.75
Ain1 in1.d 0 in1.v 0 min=1.686925e-03 max=3.373850e-03 pos=0.5 gang=Size
Ein1c in1.u 0 in1.d 0 1
Ein1d in1 in1.u in1.v 0 0.75
Ein2a in2.t 0 in1 0 1
Ein2b in2.v in2.t in2.d 0 -0.75
Ain2 in2.d 0 in2.v 0 min=1.271134e-03 max=2.542267e-03 pos=0.5 gang=Size
Ein2c in2.u 0 in2.d 0 1
Ein2d in2 in2.u in2.v 0 0.75
Ein3a in3.t 0 in2 0 1
Ein3b in3.v in3.t in3.d 0 -0.625
Ain3 in3.d 0 in3.v 0 min=4.502428e-03 max=9.004856e-03 pos=0.5 gang=Size
Ein3c in3.u 0 in3.d 0 1
Ein3d in3 in3.u in3.v 0 0.625
Ein4a in4.t 0 in3 0 1
Ein4b in4.v in4.t in4.d 0 -0.625
Ain4 in4.d 0 in4.v 0 min=3.290692e-03 max=6.581384e-03 pos=0.5 gang=Size
Ein4c in4.u 0 in4.d 0 1
Ein4d in4 in4.u in4.v 0 0.625

* The ring: what comes back from its end is added to the diffused input.
* Each quarter is an allpass, a delay line, a low-pass on two of them, and
* the Decay attenuator: 0.79 at most, 0.47 at least (the floor of each
* Decay pot is held at 0.6 of its top).
Ering1 ring.t 0 in4 0 1
Ering2 ring ring.t return 0 1
Etank1a tank1.t 0 ring 0 1
Etank1b tank1.v tank1.t tank1.d 0 -0.7
Atank1 tank1.d 0 tank1.v 0 min=2.873951e-03 max=5.747902e-03 pos=0.5 gang=Size
Etank1c tank1.u 0 tank1.d 0 1
Etank1d tank1 tank1.u tank1.v 0 0.7
Aline1 line1 0 tank1 0 min=1.904419e-02 max=3.808838e-02 pos=0.5 gang=Size
Rdamp1 line1 damp1.a 1e3
PTone1 damp1.b damp1.a damp1.a 1e4 taper=lin pos=0.5 gang=Tone
Cdamp1 damp1.b 0 1e-8
Edamp1 damped1 0 damp1.b 0 1
Efloor1 floor1 0 damped1 0 0.6
PDecay1 damped1 decay1 floor1 1e5 taper=lin pos=0.5 gang=Decay
Edecay1 q1 0 decay1 0 0.79
Etank2a tank2.t 0 q1 0 1
Etank2b tank2.v tank2.t tank2.d 0 -0.5
Atank2 tank2.d 0 tank2.v 0 min=7.698081e-03 max=1.539616e-02 pos=0.5 gang=Size
Etank2c tank2.u 0 tank2.d 0 1
Etank2d tank2 tank2.u tank2.v 0 0.5
Aline2 line2 0 tank2 0 min=1.590937e-02 max=3.181874e-02 pos=0.5 gang=Size
Efloor2 floor2 0 line2 0 0.6
PDecay2 line2 decay2 floor2 1e5 taper=lin pos=0.5 gang=Decay
Edecay2 q2 0 decay2 0 0.79
Etank3a tank3.t 0 q2 0 1
Etank3b tank3.v tank3.t tank3.d 0 -0.7
Atank3 tank3.d 0 tank3.v 0 min=3.883255e-03 max=7.766509e-03 pos=0.5 gang=Size
Etank3c tank3.u 0 tank3.d 0 1
Etank3d tank3 tank3.u tank3.v 0 0.7
Aline3 line3 0 tank3 0 min=1.803489e-02 max=3.606979e-02 pos=0.5 gang=Size
Rdamp3 line3 damp3.a 1e3
PTone3 damp3.b damp3.a damp3.a 1e4 taper=lin pos=0.5 gang=Tone
Cdamp3 damp3.b 0 1e-8
Edamp3 damped3 0 damp3.b 0 1
Efloor3 floor3 0 damped3 0 0.6
PDecay3 damped3 decay3 floor3 1e5 taper=lin pos=0.5 gang=Decay
Edecay3 q3 0 decay3 0 0.79
Etank4a tank4.t 0 q3 0 1
Etank4b tank4.v tank4.t tank4.d 0 -0.5
Atank4 tank4.d 0 tank4.v 0 min=1.135895e-02 max=2.271789e-02 pos=0.5 gang=Size
Etank4c tank4.u 0 tank4.d 0 1
Etank4d tank4 tank4.u tank4.v 0 0.5
Aline4 line4 0 tank4 0 min=1.352724e-02 max=2.705447e-02 pos=0.5 gang=Size
Efloor4 floor4 0 line4 0 0.6
PDecay4 line4 decay4 floor4 1e5 taper=lin pos=0.5 gang=Decay
Edecay4 return 0 decay4 0 0.79

* The tail: Dattorro's seven taps, each a short delay line fed like the long
* one it taps (a line's input, or the inside of an allpass).
Atap1 tap1 0 tank3 0 min=1.137605e-03 max=2.275211e-03 pos=0.5 gang=Size
Etail1 tail1 0 tap1 0 0.6
Atap2 tap2 0 tank3 0 min=1.271894e-02 max=2.543788e-02 pos=0.5 gang=Size
Etail2 tail2 tail1 tap2 0 0.6
Atap3 tap3 0 tank4.v 0 min=8.181349e-03 max=1.636270e-02 pos=0.5 gang=Size
Etail3 tail3 tail2 tap3 0 -0.6
Atap4 tap4 0 tank4 0 min=8.536317e-03 max=1.707263e-02 pos=0.5 gang=Size
Etail4 tail4 tail3 tap4 0 0.6
Atap5 tap5 0 tank1 0 min=8.510656e-03 max=1.702131e-02 pos=0.5 gang=Size
Etail5 tail5 tail4 tap5 0 -0.6
Atap6 tap6 0 tank2.v 0 min=7.997451e-04 max=1.599490e-03 pos=0.5 gang=Size
Etail6 tail6 tail5 tap6 0 -0.6
Atap7 tap7 0 tank2 0 min=4.558975e-03 max=9.117950e-03 pos=0.5 gang=Size
Etail7 tail7 tail6 tap7 0 -0.6

* Wet: the reflections and the tail, each taken 1.5 times, so that on noise
* the wet is as loud as the dry within a decibel.
Ewet1 wet.e 0 er8 0 1.5
Ewet2 wet wet.e tail7 0 1.5
PMix wet out dry 5e4 taper=lin pos=0.3
Rload out 0 1e6
.input Vin
.output out

Measured against

No real reverb: there is no pedal it claims to be, and a capture (NAM) cannot hold a reverb’s tail. It is measured against ngspice, the reference simulator, and on its own impulse response, Size and Tone at 0.5:

DecayReverberation time (T60)
00.30 s
0.50.44 s
10.81 s

With Size at 0 the same range is 0.21 to 0.56 s, at 1 it is 0.44 to 1.15 s. At Decay 0.5 the tail is 6 dB under the reflections.

Its grade

Bronze, score 100. The maths is right: it follows ngspice at −78.0 dB at 48 kHz and −102.3 dB at 192 kHz, and its four knobs agree with it. It is held at bronze because nothing real has been compared with it (the grade says: 0 of 1 settings close to a real device), and nothing can be, since it is no copy of a pedal.

Sources: J. B. Allen and D. A. Berkley, Image method for efficiently simulating small-room acoustics (JASA, 1979), J. Dattorro, Effect Design, Part 1 (JAES, 1997); M. R. Schroeder, “Natural Sounding Artificial Reverberation”, JAES 10(3), 1962; J. A. Moorer, “About This Reverberation Business”, Computer Music Journal 3(2), 1979.