Merge CV, ver=5.1; ops/methods from HV, and interface from CV where possible
[goodguy/history.git] / cinelerra-5.0 / plugins / freeverb / Components / revmodel.cpp
diff --git a/cinelerra-5.0/plugins/freeverb/Components/revmodel.cpp b/cinelerra-5.0/plugins/freeverb/Components/revmodel.cpp
deleted file mode 100644 (file)
index a70d2c2..0000000
+++ /dev/null
@@ -1,257 +0,0 @@
-// Reverb model implementation\r
-//\r
-// Written by Jezar at Dreampoint, June 2000\r
-// http://www.dreampoint.co.uk\r
-// This code is public domain\r
-\r
-#include "revmodel.hpp"\r
-\r
-revmodel::revmodel()\r
-{\r
-       // Tie the components to their buffers\r
-       combL[0].setbuffer(bufcombL1,combtuningL1);\r
-       combR[0].setbuffer(bufcombR1,combtuningR1);\r
-       combL[1].setbuffer(bufcombL2,combtuningL2);\r
-       combR[1].setbuffer(bufcombR2,combtuningR2);\r
-       combL[2].setbuffer(bufcombL3,combtuningL3);\r
-       combR[2].setbuffer(bufcombR3,combtuningR3);\r
-       combL[3].setbuffer(bufcombL4,combtuningL4);\r
-       combR[3].setbuffer(bufcombR4,combtuningR4);\r
-       combL[4].setbuffer(bufcombL5,combtuningL5);\r
-       combR[4].setbuffer(bufcombR5,combtuningR5);\r
-       combL[5].setbuffer(bufcombL6,combtuningL6);\r
-       combR[5].setbuffer(bufcombR6,combtuningR6);\r
-       combL[6].setbuffer(bufcombL7,combtuningL7);\r
-       combR[6].setbuffer(bufcombR7,combtuningR7);\r
-       combL[7].setbuffer(bufcombL8,combtuningL8);\r
-       combR[7].setbuffer(bufcombR8,combtuningR8);\r
-       allpassL[0].setbuffer(bufallpassL1,allpasstuningL1);\r
-       allpassR[0].setbuffer(bufallpassR1,allpasstuningR1);\r
-       allpassL[1].setbuffer(bufallpassL2,allpasstuningL2);\r
-       allpassR[1].setbuffer(bufallpassR2,allpasstuningR2);\r
-       allpassL[2].setbuffer(bufallpassL3,allpasstuningL3);\r
-       allpassR[2].setbuffer(bufallpassR3,allpasstuningR3);\r
-       allpassL[3].setbuffer(bufallpassL4,allpasstuningL4);\r
-       allpassR[3].setbuffer(bufallpassR4,allpasstuningR4);\r
-\r
-       // Set default values\r
-       allpassL[0].setfeedback(0.5f);\r
-       allpassR[0].setfeedback(0.5f);\r
-       allpassL[1].setfeedback(0.5f);\r
-       allpassR[1].setfeedback(0.5f);\r
-       allpassL[2].setfeedback(0.5f);\r
-       allpassR[2].setfeedback(0.5f);\r
-       allpassL[3].setfeedback(0.5f);\r
-       allpassR[3].setfeedback(0.5f);\r
-       setwet(initialwet);\r
-       setroomsize(initialroom);\r
-       setdry(initialdry);\r
-       setdamp(initialdamp);\r
-       setwidth(initialwidth);\r
-       setmode(initialmode);\r
-\r
-       // Buffer will be full of rubbish - so we MUST mute them\r
-       mute();\r
-}\r
-\r
-void revmodel::mute()\r
-{\r
-       if (getmode() >= freezemode)\r
-               return;\r
-\r
-       for (int i=0;i<numcombs;i++)\r
-       {\r
-               combL[i].mute();\r
-               combR[i].mute();\r
-       }\r
-       for (int i=0;i<numallpasses;i++)\r
-       {\r
-               allpassL[i].mute();\r
-               allpassR[i].mute();\r
-       }\r
-}\r
-\r
-void revmodel::processreplace(float *inputL, float *inputR, float *outputL, float *outputR, long numsamples, int skip)\r
-{\r
-       float outL,outR,input;\r
-\r
-       while(numsamples-- > 0)\r
-       {\r
-               outL = outR = 0;\r
-               input = (*inputL + *inputR) * gain;\r
-\r
-               // Accumulate comb filters in parallel\r
-               for(int i=0; i<numcombs; i++)\r
-               {\r
-                       outL += combL[i].process(input);\r
-                       outR += combR[i].process(input);\r
-               }\r
-\r
-               // Feed through allpasses in series\r
-               for(int i=0; i<numallpasses; i++)\r
-               {\r
-                       outL = allpassL[i].process(outL);\r
-                       outR = allpassR[i].process(outR);\r
-               }\r
-\r
-               // Calculate output REPLACING anything already there\r
-               *outputL = outL*wet1 + outR*wet2 + *inputL*dry;\r
-               *outputR = outR*wet1 + outL*wet2 + *inputR*dry;\r
-\r
-               // Increment sample pointers, allowing for interleave (if any)\r
-               inputL += skip;\r
-               inputR += skip;\r
-               outputL += skip;\r
-               outputR += skip;\r
-       }\r
-}\r
-\r
-void revmodel::processmix(float *inputL, float *inputR, float *outputL, float *outputR, long numsamples, int skip)\r
-{\r
-       float outL,outR,input;\r
-\r
-       while(numsamples-- > 0)\r
-       {\r
-               outL = outR = 0;\r
-               input = (*inputL + *inputR) * gain;\r
-\r
-               // Accumulate comb filters in parallel\r
-               for(int i=0; i<numcombs; i++)\r
-               {\r
-                       outL += combL[i].process(input);\r
-                       outR += combR[i].process(input);\r
-               }\r
-\r
-               // Feed through allpasses in series\r
-               for(int i=0; i<numallpasses; i++)\r
-               {\r
-                       outL = allpassL[i].process(outL);\r
-                       outR = allpassR[i].process(outR);\r
-               }\r
-\r
-               // Calculate output MIXING with anything already there\r
-               *outputL += outL*wet1 + outR*wet2 + *inputL*dry;\r
-               *outputR += outR*wet1 + outL*wet2 + *inputR*dry;\r
-\r
-               // Increment sample pointers, allowing for interleave (if any)\r
-               inputL += skip;\r
-               inputR += skip;\r
-               outputL += skip;\r
-               outputR += skip;\r
-       }\r
-}\r
-\r
-void revmodel::update()\r
-{\r
-// Recalculate internal values after parameter change\r
-\r
-       int i;\r
-\r
-       wet1 = wet*(width/2 + 0.5f);\r
-       wet2 = wet*((1-width)/2);\r
-\r
-       if (mode >= freezemode)\r
-       {\r
-               roomsize1 = 1;\r
-               damp1 = 0;\r
-               gain = muted;\r
-       }\r
-       else\r
-       {\r
-               roomsize1 = roomsize;\r
-               damp1 = damp;\r
-               gain = fixedgain;\r
-       }\r
-\r
-       for(i=0; i<numcombs; i++)\r
-       {\r
-               combL[i].setfeedback(roomsize1);\r
-               combR[i].setfeedback(roomsize1);\r
-       }\r
-\r
-       for(i=0; i<numcombs; i++)\r
-       {\r
-               combL[i].setdamp(damp1);\r
-               combR[i].setdamp(damp1);\r
-       }\r
-}\r
-\r
-// The following get/set functions are not inlined, because\r
-// speed is never an issue when calling them, and also\r
-// because as you develop the reverb model, you may\r
-// wish to take dynamic action when they are called.\r
-\r
-void revmodel::setroomsize(float value)\r
-{\r
-       roomsize = (value*scaleroom) + offsetroom;\r
-       update();\r
-}\r
-\r
-float revmodel::getroomsize()\r
-{\r
-       return (roomsize-offsetroom)/scaleroom;\r
-}\r
-\r
-void revmodel::setdamp(float value)\r
-{\r
-       damp = value*scaledamp;\r
-       update();\r
-}\r
-\r
-float revmodel::getdamp()\r
-{\r
-       return damp/scaledamp;\r
-}\r
-\r
-void revmodel::setwet(float value)\r
-{\r
-       wet = value*scalewet;\r
-       update();\r
-}\r
-\r
-float revmodel::getwet()\r
-{\r
-       return wet/scalewet;\r
-}\r
-\r
-void revmodel::setdry(float value)\r
-{\r
-       dry = value*scaledry;\r
-}\r
-\r
-float revmodel::getdry()\r
-{\r
-       return dry/scaledry;\r
-}\r
-\r
-void revmodel::setwidth(float value)\r
-{\r
-       width = value;\r
-       update();\r
-}\r
-\r
-float revmodel::getwidth()\r
-{\r
-       return width;\r
-}\r
-\r
-void revmodel::setmode(float value)\r
-{\r
-       mode = value;\r
-       update();\r
-}\r
-\r
-float revmodel::getmode()\r
-{\r
-       if (mode >= freezemode)\r
-               return 1;\r
-       else\r
-               return 0;\r
-}\r
-\r
-//ends\r
-\r
-\r
-\r
-\r
-\r