1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
/*
* Modification History
*
* 2004-July-22 Jason Rohrer
* Created.
*/
#include "ReverbSoundFilter.h"
ReverbSoundFilter::ReverbSoundFilter( unsigned long inDelayInSamples,
double inGain )
: mDelayBuffer( new SoundSamples( inDelayInSamples ) ),
mGain( inGain ),
mDelayBufferPosition( 0 ) {
}
ReverbSoundFilter::~ReverbSoundFilter() {
delete mDelayBuffer;
}
SoundSamples *ReverbSoundFilter::filterSamples( SoundSamples *inSamples ) {
unsigned long delaySize = mDelayBuffer->mSampleCount;
unsigned long numSamples = inSamples->mSampleCount;
// pass the input through to the output
SoundSamples *outputSamples = new SoundSamples( inSamples );
for( unsigned long i=0; i<numSamples; i++ ) {
// add in reverb from the buffer to our output
outputSamples->mLeftChannel[i] +=
mDelayBuffer->mLeftChannel[ mDelayBufferPosition ];
outputSamples->mRightChannel[i] +=
mDelayBuffer->mRightChannel[ mDelayBufferPosition ];
// save our gained output in the delay buffer
mDelayBuffer->mLeftChannel[ mDelayBufferPosition ] =
mGain * outputSamples->mLeftChannel[i];
mDelayBuffer->mRightChannel[ mDelayBufferPosition ] =
mGain * outputSamples->mRightChannel[i];
// step through delay buffer, wrapping around at end
mDelayBufferPosition++;
if( mDelayBufferPosition >= delaySize ) {
mDelayBufferPosition = 0;
}
}
return outputSamples;
}
|