[music-dsp] Reverb practice vs theory?

Ralph Glasgal glasgal at ambiophonics.org
Thu Nov 4 10:19:17 EDT 2010

Take a look at the WAVES way of doing this using their large library of
impulse responses.  It really never pays in a live recording session to
record hall ambience and put mics out in the hall without rhyme or reason.
Of course, it is also nonsense to think that in 5.1 or stereo that you can
achieve a realistic concert-hall or other reverb acoustic via two speakers
at 110 degrees or by adding reverb to front 2.0 speakers.  Take a look at 
www.ambiophonics.org/PCMac.html and scroll down to see how to implement
(convolve) the impulse response of your choice in AudioMulch or similar.
This method is nice because you can use as many surround speakers as you
like, put them anywhere convenient in home or studio, and enhance in real
time any older 2.0 recording.

Incidentally, the Hong Kong professional audio company DSP4you is now making
Ambiophonic DSP boards/boxes so you can try this now quite easily for
yourself without resorting to the VST plugin route.  www.ambio4you.com 

Ralph Glasgal

-----Original Message-----
From: music-dsp-bounces at music.columbia.edu
[mailto:music-dsp-bounces at music.columbia.edu] On Behalf Of Alan Wolfe
Sent: Wednesday, November 03, 2010 4:06 PM
To: A discussion list for music-related DSP
Subject: [music-dsp] Reverb practice vs theory?

Hey Guys,

I understand the theory of reverb, that it's a lot of random echoes
within 20ms or so.

However, how is that generally implemented in practice?

I have programmed a delay before so i know how to make a buffer that
feeds back into itself and decays over time.

For a delay i just do this for each sample:

1) Get the raw sample from the source
2) I read the current position's value out of a circular buffer and
add it to the raw sample.
3) Take that value and make it be the current output sample
4) Multiply that value by the Feedback value (which ranges from 0 to
1) and write it back to the current position in the circular buffer.
5) Increment the circular buffer's current position.

The circular buffer has exactly as many samples as needed for the delay

For reverb, instead of only taking the current position and having a
feedback sample for it, would i take multiple samples from the past,
each with their own feedback amount and make that be added into the
current sample?

Something like this?

fCurrentSample = GetRawSample();
fCurrentSample += GetCircularBufferSample(0) * 0.4; // 0 miliseconds
in the past in the delay buffer
fCurrentSample += GetCircularBufferSample(-2) * 0.2; // 2 miliseconds
in the past in the delay buffer
fCurrentSample += GetCircularBufferSample(-4) * 0.6; // 4 miliseconds
in the past in the delay buffer
fCurrentSample += GetCircularBufferSample(-8) * 0.1; // 8 miliseconds
in the past in the delay buffer

WriteCircularBufferSample(fCurrentSample * fFeedBack);

Also I'm kind of wondering, how does some reverb sound like a small
room, and others sound cavernous?

dupswapdrop -- the music-dsp mailing list and website:
subscription info, FAQ, source code archive, list archive, book reviews, dsp

More information about the music-dsp mailing list