From e40fc849149dd97c248866a4a1d026dda5e57b62 Mon Sep 17 00:00:00 2001 From: Robert Jonsson Date: Mon, 7 Mar 2011 19:01:11 +0000 Subject: clean3 --- attic/muse_qt4_evolution/synti/organ/reverb.h | 204 ++++++++++++++++++++++++++ 1 file changed, 204 insertions(+) create mode 100644 attic/muse_qt4_evolution/synti/organ/reverb.h (limited to 'attic/muse_qt4_evolution/synti/organ/reverb.h') diff --git a/attic/muse_qt4_evolution/synti/organ/reverb.h b/attic/muse_qt4_evolution/synti/organ/reverb.h new file mode 100644 index 00000000..d19fb18e --- /dev/null +++ b/attic/muse_qt4_evolution/synti/organ/reverb.h @@ -0,0 +1,204 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id:$ +// +// based on "freeverb" written by Jezar at Dreampoint, +// June 2000 +// +// (C) Copyright 2007 Werner Schweer (ws@seh.de) +//========================================================= + +#ifndef __REVERB_H__ +#define __REVERB_H__ + +#define undenormalise(sample) \ + do { \ + volatile float __forced_float = 1e-29 + sample; \ + sample = __forced_float - 1e-29; \ + } while (0) + +const int numcombs = 8; +const int numallpasses = 4; +const float muted = 0; +const float fixedgain = 0.015f; +const float scaledamp = 0.4f; +const float scaleroom = 0.28f; +const float offsetroom = 0.7f; +const float initialwidth = 1.0; +const int stereospread = 23; + +// These values assume 44.1KHz sample rate +// they will probably be OK for 48KHz sample rate +// but would need scaling for 96KHz (or other) sample rates. +// The values were obtained by listening tests. +const int combtuningL1 = 1116; +const int combtuningR1 = 1116+stereospread; +const int combtuningL2 = 1188; +const int combtuningR2 = 1188+stereospread; +const int combtuningL3 = 1277; +const int combtuningR3 = 1277+stereospread; +const int combtuningL4 = 1356; +const int combtuningR4 = 1356+stereospread; +const int combtuningL5 = 1422; +const int combtuningR5 = 1422+stereospread; +const int combtuningL6 = 1491; +const int combtuningR6 = 1491+stereospread; +const int combtuningL7 = 1557; +const int combtuningR7 = 1557+stereospread; +const int combtuningL8 = 1617; +const int combtuningR8 = 1617+stereospread; +const int allpasstuningL1 = 556; +const int allpasstuningR1 = 556+stereospread; +const int allpasstuningL2 = 441; +const int allpasstuningR2 = 441+stereospread; +const int allpasstuningL3 = 341; +const int allpasstuningR3 = 341+stereospread; +const int allpasstuningL4 = 225; +const int allpasstuningR4 = 225+stereospread; + +//--------------------------------------------------------- +// allpass +//--------------------------------------------------------- + +class allpass + { + float feedback; + float *buffer; + int bufsize; + int bufidx; + + public: + allpass() { bufidx = 0; } + void setbuffer(float *buf, int size) { + buffer = buf; + bufsize = size; + } + float process(float input) { + float bufout = buffer[bufidx]; + undenormalise(bufout); + float output = -input + bufout; + buffer[bufidx] = input + (bufout*feedback); + if (++bufidx >= bufsize) + bufidx = 0; + return output; + } + void mute() { + memset(buffer, 0, sizeof(float) * bufsize); + } + void setfeedback(float val) { feedback = val; } + float getfeedback() { return feedback; } + }; + +//--------------------------------------------------------- +// comb +//--------------------------------------------------------- + +class comb + { + float feedback; + float filterstore; + float damp1; + float damp2; + float *buffer; + int bufsize; + int bufidx; + + public: + comb() { + filterstore = 0; + bufidx = 0; + } + void setbuffer(float *buf, int size) { + buffer = buf; + bufsize = size; + } + float process(float input) { + float output = buffer[bufidx]; + undenormalise(output); + filterstore = (output*damp2) + (filterstore*damp1); + undenormalise(filterstore); + buffer[bufidx] = input + (filterstore*feedback); + if (++bufidx >= bufsize) + bufidx = 0; + return output; + } + void mute() { + for (int i=0; i