aboutsummaryrefslogtreecommitdiff
path: root/audio/softsynth/mt32/FreeverbModel.cpp
diff options
context:
space:
mode:
authorEugene Sandulenko2012-02-09 11:20:45 +0200
committerEugene Sandulenko2012-02-09 11:31:03 +0200
commit030e155eeb7f82dc89315dbefa43e09a411c6110 (patch)
tree3b941d9841735fcc9878ab0663406d6be7a025aa /audio/softsynth/mt32/FreeverbModel.cpp
parent06b52994619fb9a7ef9e54e50b5cc67d07f6a0a0 (diff)
downloadscummvm-rg350-030e155eeb7f82dc89315dbefa43e09a411c6110.tar.gz
scummvm-rg350-030e155eeb7f82dc89315dbefa43e09a411c6110.tar.bz2
scummvm-rg350-030e155eeb7f82dc89315dbefa43e09a411c6110.zip
MT32: Update MT-32 emulator to latest Munt code
Several changes against original code were made. They were intentionally kept to the minimum
Diffstat (limited to 'audio/softsynth/mt32/FreeverbModel.cpp')
-rw-r--r--audio/softsynth/mt32/FreeverbModel.cpp78
1 files changed, 78 insertions, 0 deletions
diff --git a/audio/softsynth/mt32/FreeverbModel.cpp b/audio/softsynth/mt32/FreeverbModel.cpp
new file mode 100644
index 0000000000..c11fa859d8
--- /dev/null
+++ b/audio/softsynth/mt32/FreeverbModel.cpp
@@ -0,0 +1,78 @@
+/* Copyright (C) 2003, 2004, 2005, 2006, 2008, 2009 Dean Beeler, Jerome Fisher
+ * Copyright (C) 2011 Dean Beeler, Jerome Fisher, Sergey V. Mikayev
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "mt32emu.h"
+#include "FreeverbModel.h"
+
+#include "freeverb.h"
+
+using namespace MT32Emu;
+
+FreeverbModel::FreeverbModel(float useScaleTuning, float useFiltVal, float useWet, Bit8u useRoom, float useDamp) {
+ freeverb = NULL;
+ scaleTuning = useScaleTuning;
+ filtVal = useFiltVal;
+ wet = useWet;
+ room = useRoom;
+ damp = useDamp;
+}
+
+FreeverbModel::~FreeverbModel() {
+ delete freeverb;
+}
+
+void FreeverbModel::open(unsigned int /*sampleRate*/) {
+ // FIXME: scaleTuning must be multiplied by sample rate to 32000Hz ratio
+ // IIR filter values depend on sample rate as well
+ if (freeverb == NULL) {
+ freeverb = new revmodel(scaleTuning);
+ }
+ freeverb->mute();
+
+ // entrance Lowpass filter factor
+ freeverb->setfiltval(filtVal);
+
+ // decay speed of high frequencies in the wet signal
+ freeverb->setdamp(damp);
+}
+
+void FreeverbModel::close() {
+ delete freeverb;
+ freeverb = NULL;
+}
+
+void FreeverbModel::process(const float *inLeft, const float *inRight, float *outLeft, float *outRight, unsigned long numSamples) {
+ freeverb->process(inLeft, inRight, outLeft, outRight, numSamples);
+}
+
+void FreeverbModel::setParameters(Bit8u time, Bit8u level) {
+ // wet signal level
+ // FIXME: need to implement some sort of reverb level ramping
+ freeverb->setwet((float)level / 7.0f * wet);
+
+ // wet signal decay speed
+ static float roomTable[] = {
+ 0.25f, 0.37f, 0.54f, 0.71f, 0.78f, 0.86f, 0.93f, 1.00f,
+ -1.00f, -0.50f, 0.00f, 0.30f, 0.51f, 0.64f, 0.77f, 0.90f,
+ 0.50f, 0.57f, 0.70f, 0.77f, 0.85f, 0.93f, 0.96f, 1.01f};
+ freeverb->setroomsize(roomTable[8 * room + time]);
+}
+
+bool FreeverbModel::isActive() const {
+ // FIXME: Not bothering to do this properly since we'll be replacing Freeverb soon...
+ return false;
+}