summaryrefslogtreecommitdiff
path: root/src/Reverb.cpp
diff options
context:
space:
mode:
authorIOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org>2023-05-17 22:13:45 +0200
committerIOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org>2023-05-17 22:13:45 +0200
commitc974a18498cf99dc884429566ccc44d342035f28 (patch)
tree2d4a112f5c4cc62368ed223245d46b4fe0a47dcf /src/Reverb.cpp
parentc1c7af321c8b50bc42d4f66ed6ab4527337e4771 (diff)
New upstream version 1.9.0+ds
Diffstat (limited to 'src/Reverb.cpp')
-rw-r--r--src/Reverb.cpp104
1 files changed, 100 insertions, 4 deletions
diff --git a/src/Reverb.cpp b/src/Reverb.cpp
index 3f1774d..ec80a67 100644
--- a/src/Reverb.cpp
+++ b/src/Reverb.cpp
@@ -37,7 +37,102 @@
#include "Reverb.h"
+#include "freeverbdsp.h" // stereo in and out
+#include "freeverbmonodsp.h" // mono in and out (there is no mono to stereo case in jacktrip as yet)
#include "jacktrip_types.h"
+#include "zitarevdsp.h" // stereo in and out
+#include "zitarevmonodsp.h" // mono in and out
+
+//*******************************************************************************
+Reverb::Reverb(int numInChans, int numOutChans, float reverbLevel, bool verboseFlag)
+ : mNumInChannels(numInChans), mNumOutChannels(numOutChans), mReverbLevel(reverbLevel)
+{
+ setVerbose(verboseFlag);
+ if (mNumInChannels < 1) {
+ std::cerr << "*** Reverb.h: must have at least one input audio channels\n";
+ mNumInChannels = 1;
+ }
+ if (mNumInChannels > 2) {
+ std::cerr << "*** Reverb.h: limiting number of audio output channels to 2\n";
+ mNumInChannels = 2;
+ }
+#if 0
+std::cout << "Reverb: constructed for "
+ << mNumInChannels << " input channels and "
+ << mNumOutChannels << " output channels with reverb level = "
+ << mReverbLevel << "\n";
+#endif
+
+ if (mReverbLevel <= 1.0) { // freeverb:
+ freeverbStereoP = new freeverbdsp; // stereo input and output
+ freeverbMonoP = new freeverbmonodsp; // mono input, stereo output
+ freeverbStereoUIP = new APIUI; // #included in *dsp.h
+ freeverbMonoUIP = new APIUI;
+ static_cast<freeverbdsp*>(freeverbStereoP)
+ ->buildUserInterface(static_cast<APIUI*>(freeverbStereoUIP));
+ static_cast<freeverbmonodsp*>(freeverbMonoP)
+ ->buildUserInterface(static_cast<APIUI*>(freeverbMonoUIP));
+ // std::cout << "Using freeverb\n";
+ } else {
+ zitarevStereoP = new zitarevdsp; // stereo input and output
+ zitarevMonoP = new zitarevmonodsp; // mono input, stereo output
+ zitarevStereoUIP = new APIUI;
+ zitarevMonoUIP = new APIUI;
+ static_cast<zitarevdsp*>(zitarevStereoP)
+ ->buildUserInterface(static_cast<APIUI*>(zitarevStereoUIP));
+ static_cast<zitarevmonodsp*>(zitarevMonoP)
+ ->buildUserInterface(static_cast<APIUI*>(zitarevMonoUIP));
+ // std::cout << "Using zitarev\n";
+ }
+}
+
+//*******************************************************************************
+Reverb::~Reverb()
+{
+ if (mReverbLevel <= 1.0) { // freeverb:
+ delete static_cast<freeverbdsp*>(freeverbStereoP);
+ delete static_cast<freeverbmonodsp*>(freeverbMonoP);
+ delete static_cast<APIUI*>(freeverbStereoUIP);
+ delete static_cast<APIUI*>(freeverbMonoUIP);
+ } else {
+ delete static_cast<zitarevdsp*>(zitarevStereoP);
+ delete static_cast<zitarevmonodsp*>(zitarevMonoP);
+ delete static_cast<APIUI*>(zitarevStereoUIP);
+ delete static_cast<APIUI*>(zitarevMonoUIP);
+ }
+}
+
+//*******************************************************************************
+void Reverb::init(int samplingRate)
+{
+ ProcessPlugin::init(samplingRate);
+ // std::cout << "Reverb: init(" << samplingRate << ")\n";
+ if (samplingRate != fSamplingFreq) {
+ std::cerr << "Sampling rate not set by superclass!\n";
+ std::exit(1);
+ }
+ fs = float(fSamplingFreq);
+ if (mReverbLevel <= 1.0) { // freeverb:
+ static_cast<freeverbdsp*>(freeverbStereoP)
+ ->init(fs); // compression filter parameters depend on sampling rate
+ static_cast<freeverbmonodsp*>(freeverbMonoP)
+ ->init(fs); // compression filter parameters depend on sampling rate
+ int ndx = static_cast<APIUI*>(freeverbStereoUIP)->getParamIndex("Wet");
+ static_cast<APIUI*>(freeverbStereoUIP)->setParamValue(ndx, mReverbLevel);
+ static_cast<APIUI*>(freeverbMonoUIP)->setParamValue(ndx, mReverbLevel);
+ } else { // zitarev:
+ static_cast<zitarevdsp*>(zitarevStereoP)
+ ->init(fs); // compression filter parameters depend on sampling rate
+ static_cast<zitarevmonodsp*>(zitarevMonoP)
+ ->init(fs); // compression filter parameters depend on sampling rate
+ int ndx = static_cast<APIUI*>(zitarevStereoUIP)->getParamIndex("Wet");
+ float zitaLevel =
+ mReverbLevel - 1.0f; // range within zitarev is 0 to 1 (our version only)
+ static_cast<APIUI*>(zitarevStereoUIP)->setParamValue(ndx, zitaLevel);
+ static_cast<APIUI*>(zitarevMonoUIP)->setParamValue(ndx, zitaLevel);
+ }
+ inited = true;
+}
//*******************************************************************************
void Reverb::compute(int nframes, float** inputs, float** outputs)
@@ -53,17 +148,18 @@ void Reverb::compute(int nframes, float** inputs, float** outputs)
}
if (mReverbLevel <= 1.0) {
if (mNumInChannels == 1) {
- freeverbMonoP->compute(nframes, inputs, outputs);
+ static_cast<freeverbmonodsp*>(freeverbMonoP)
+ ->compute(nframes, inputs, outputs);
} else {
assert(mNumInChannels == 2);
- freeverbStereoP->compute(nframes, inputs, outputs);
+ static_cast<freeverbdsp*>(freeverbStereoP)->compute(nframes, inputs, outputs);
}
} else {
if (mNumInChannels == 1) {
- zitarevMonoP->compute(nframes, inputs, outputs);
+ static_cast<zitarevmonodsp*>(zitarevMonoP)->compute(nframes, inputs, outputs);
} else {
assert(mNumInChannels == 2);
- zitarevStereoP->compute(nframes, inputs, outputs);
+ static_cast<zitarevdsp*>(zitarevStereoP)->compute(nframes, inputs, outputs);
}
}
}