From 0fb2db626d46718ec5b8e0ede0462d6e500b059f Mon Sep 17 00:00:00 2001 From: falkTX Date: Sat, 23 Feb 2013 07:36:04 +0000 Subject: [PATCH] Fix fluidsynth volume and balance controls --- source/backend/plugin/FluidSynthPlugin.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/source/backend/plugin/FluidSynthPlugin.cpp b/source/backend/plugin/FluidSynthPlugin.cpp index 188f30715..d2e8a9593 100644 --- a/source/backend/plugin/FluidSynthPlugin.cpp +++ b/source/backend/plugin/FluidSynthPlugin.cpp @@ -731,8 +731,12 @@ public: fHints |= PLUGIN_IS_SYNTH; fHints |= PLUGIN_CAN_VOLUME; - fHints |= PLUGIN_CAN_BALANCE; - fHints |= PLUGIN_CAN_FORCE_STEREO; + + if (! kUses16Outs) + { + fHints |= PLUGIN_CAN_BALANCE; + fHints |= PLUGIN_CAN_FORCE_STEREO; + } // plugin options kData->availOptions &= ~(PLUGIN_OPTION_FIXED_BUFFER | PLUGIN_OPTION_SELF_AUTOMATION | PLUGIN_OPTION_SEND_ALL_SOUND_OFF | PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH | PLUGIN_OPTION_SEND_PITCHBEND); @@ -1253,7 +1257,7 @@ public: if (doBalance) { if (i % 2 == 0) - carla_copyFloat(oldBufLeft, outBuffer[i], frames); + carla_copyFloat(oldBufLeft, outBuffer[i]+timeOffset, frames); float balRangeL = (kData->postProc.balanceLeft + 1.0f)/2.0f; float balRangeR = (kData->postProc.balanceRight + 1.0f)/2.0f; @@ -1263,14 +1267,14 @@ public: if (i % 2 == 0) { // left - outBuffer[i][k] = oldBufLeft[k] * (1.0f - balRangeL); - outBuffer[i][k] += outBuffer[i+1][k] * (1.0f - balRangeR); + outBuffer[i][k+timeOffset] = oldBufLeft[k] * (1.0f - balRangeL); + outBuffer[i][k+timeOffset] += outBuffer[i+1][k+timeOffset] * (1.0f - balRangeR); } else { // right - outBuffer[i][k] = outBuffer[i][k] * balRangeR; - outBuffer[i][k] += oldBufLeft[k] * balRangeL; + outBuffer[i][k+timeOffset] = outBuffer[i][k+timeOffset] * balRangeR; + outBuffer[i][k+timeOffset] += oldBufLeft[k] * balRangeL; } } } @@ -1284,7 +1288,7 @@ public: else if (doVolume) { for (k=0; k < frames; k++) - outBuffer[i][k] *= kData->postProc.volume; + outBuffer[i][k+timeOffset] *= kData->postProc.volume; } }