From 25855f327a0b2b1386a3fd8c568817bb7782cac2 Mon Sep 17 00:00:00 2001 From: Kelly Rauchenberger Date: Sat, 14 Mar 2015 17:22:17 -0400 Subject: Added reverb to sound effects Also removed some extraneous parentheses --- src/muxer.cpp | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) (limited to 'src/muxer.cpp') diff --git a/src/muxer.cpp b/src/muxer.cpp index d5409e5..d831e6d 100644 --- a/src/muxer.cpp +++ b/src/muxer.cpp @@ -6,6 +6,13 @@ #include #define SAMPLE_RATE (44100) +#define DELAY_IN_SECS (0.075) +#define GAIN (1.0) +#define FEEDBACK (0.2) +#define DRY (1.0) +#define WET (0.5) + +const int delaySize = SAMPLE_RATE * DELAY_IN_SECS; class Sound { public: @@ -21,6 +28,8 @@ class Sound { struct Muxer { std::list playing; PaStream* stream; + float* delay; + unsigned long delayPos; }; inline void dealWithPaError(PaError err) @@ -39,18 +48,24 @@ int paMuxerCallback(const void*, void* outputBuffer, unsigned long framesPerBuff for (unsigned long i = 0; iplaying) { if (sound.pos < sound.len) { - *out += sound.ptr[sound.pos++] * sound.vol; + in += sound.ptr[sound.pos++] * sound.vol; } } - out++; + if (in > 1) in = 1; + if (in < -1) in = -1; + + float sample = muxer->delay[muxer->delayPos] * GAIN; + muxer->delay[muxer->delayPos] = in + (muxer->delay[muxer->delayPos] * FEEDBACK); + muxer->delayPos++; + if (muxer->delayPos > delaySize) muxer->delayPos = 0; + *out++ = (in * DRY) + (sample * WET); } return 0; @@ -63,8 +78,10 @@ void initMuxer() muxer = new Muxer(); dealWithPaError(Pa_Initialize()); - dealWithPaError(Pa_OpenDefaultStream(&(muxer->stream), 0, 1, paFloat32, SAMPLE_RATE, paFramesPerBufferUnspecified, paMuxerCallback, muxer)); + dealWithPaError(Pa_OpenDefaultStream(&muxer->stream, 0, 1, paFloat32, SAMPLE_RATE, paFramesPerBufferUnspecified, paMuxerCallback, muxer)); dealWithPaError(Pa_StartStream(muxer->stream)); + + muxer->delay = (float*) calloc(delaySize, sizeof(float)); } void destroyMuxer() @@ -73,6 +90,7 @@ void destroyMuxer() dealWithPaError(Pa_CloseStream(muxer->stream)); dealWithPaError(Pa_Terminate()); + free(muxer->delay); delete muxer; muxer = 0; } -- cgit 1.4.1