File: ReverbSoundFilter.cpp

package info (click to toggle)
transcend 0.3.dfsg1-2
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 5,816 kB
  • ctags: 2,912
  • sloc: cpp: 26,890; ansic: 693; sh: 210; makefile: 131; perl: 67
file content (64 lines) | stat: -rw-r--r-- 1,622 bytes parent folder | download | duplicates (6)
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;    
    }