[music-dsp] Reverb practice vs theory?

Bogac Topaktas bogac at bteaudio.com
Thu Nov 4 13:52:45 EDT 2010


Wavefront Semiconductor offers two application
notes with in-depth details:

http://www.wavefrontsemi.com/UserFiles/File/AL_Info/AL32/AppNotes/WavefrontAN3201-04%20Reverberation%20Algorithm.pdf

http://www.wavefrontsemi.com/UserFiles/File/AL_Info/AL32/AppNotes/WavefrontAN3201-05%20Reverberation%20modeling%20an%20auditorium.pdf

> 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
> length.
>
> 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
>
> OutputSample(fCurrentSample);
> WriteCircularBufferSample(fCurrentSample * fFeedBack);
> IncrementCircularBufferIndex();
>
> Also I'm kind of wondering, how does some reverb sound like a small
> room, and others sound cavernous?
>
> Thanks!
> Alan
> --
> dupswapdrop -- the music-dsp mailing list and website:
> subscription info, FAQ, source code archive, list archive, book reviews,
> dsp links
> http://music.columbia.edu/cmc/music-dsp
> http://music.columbia.edu/mailman/listinfo/music-dsp
>




More information about the music-dsp mailing list