Browse Source

Start splitting RT and non-RT plugin functions

tags/v1.9.9
falkTX 8 years ago
parent
commit
c0c08e8898
13 changed files with 290 additions and 140 deletions
  1. +2
    -1
      data/stoat/run-stoat.sh
  2. +1
    -0
      data/stoat/whitelist.txt
  3. +14
    -0
      source/backend/CarlaPlugin.hpp
  4. +69
    -0
      source/backend/plugin/CarlaPlugin.cpp
  5. +5
    -9
      source/backend/plugin/CarlaPluginBridge.cpp
  6. +16
    -10
      source/backend/plugin/CarlaPluginDSSI.cpp
  7. +80
    -61
      source/backend/plugin/CarlaPluginFluidSynth.cpp
  8. +5
    -9
      source/backend/plugin/CarlaPluginJack.cpp
  9. +16
    -10
      source/backend/plugin/CarlaPluginLADSPA.cpp
  10. +16
    -10
      source/backend/plugin/CarlaPluginLV2.cpp
  11. +27
    -10
      source/backend/plugin/CarlaPluginLinuxSampler.cpp
  12. +23
    -10
      source/backend/plugin/CarlaPluginNative.cpp
  13. +16
    -10
      source/backend/plugin/CarlaPluginVST2.cpp

+ 2
- 1
data/stoat/run-stoat.sh View File

@@ -11,4 +11,5 @@ export CXXFLAGS=${CFLAGS}
export LDFLAGS="-ljack"

make -j 8 EXTERNAL_PLUGINS=false backend
stoat --recursive build/ -G stoat-output.png -b data/stoat/blacklist.txt -w data/stoat/whitelist.txt
stoat --recursive build/ -b data/stoat/blacklist.txt -w data/stoat/whitelist.txt
# -G stoat-output.png

+ 1
- 0
data/stoat/whitelist.txt View File

@@ -210,6 +210,7 @@ fluid_synth_set_chorus_on
fluid_synth_set_chorus
fluid_synth_set_polyphony
fluid_synth_set_interp_method
LinuxSampler::InstrumentManager::LoadInstrumentInBackground

# Report upstream
llround


+ 14
- 0
source/backend/CarlaPlugin.hpp View File

@@ -513,6 +513,15 @@ public:
* @note Force-Stereo plugins only!
*/
void setPanning(const float value, const bool sendOsc, const bool sendCallback) noexcept;

/*!
* Overloaded functions, to be called from within RT context only.
*/
void setDryWetRT(const float value) noexcept;
void setVolumeRT(const float value) noexcept;
void setBalanceLeftRT(const float value) noexcept;
void setBalanceRightRT(const float value) noexcept;
void setPanningRT(const float value) noexcept;
#endif

/*!
@@ -539,6 +548,11 @@ public:
*/
virtual void setParameterValue(const uint32_t parameterId, const float value, const bool sendGui, const bool sendOsc, const bool sendCallback) noexcept;

/*!
* Overloaded function, to be called from within RT context only.
*/
virtual void setParameterValueRT(const uint32_t parameterId, const float value) noexcept;

/*!
* Set a plugin's parameter value, including internal parameters.
* @a rindex can be negative to allow internal parameters change (as defined in InternalParametersIndex).


+ 69
- 0
source/backend/plugin/CarlaPlugin.cpp View File

@@ -1417,6 +1417,70 @@ void CarlaPlugin::setPanning(const float value, const bool sendOsc, const bool s
// may be unused
return; (void)sendOsc;
}

void CarlaPlugin::setDryWetRT(const float value) noexcept
{
CARLA_SAFE_ASSERT(value >= 0.0f && value <= 1.0f);

const float fixedValue(carla_fixedValue<float>(0.0f, 1.0f, value));

if (carla_isEqual(pData->postProc.dryWet, fixedValue))
return;

pData->postProc.dryWet = fixedValue;
pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_DRYWET, 0, fixedValue);
}

void CarlaPlugin::setVolumeRT(const float value) noexcept
{
CARLA_SAFE_ASSERT(value >= 0.0f && value <= 1.27f);

const float fixedValue(carla_fixedValue<float>(0.0f, 1.27f, value));

if (carla_isEqual(pData->postProc.volume, fixedValue))
return;

pData->postProc.volume = fixedValue;
pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_VOLUME, 0, fixedValue);
}

void CarlaPlugin::setBalanceLeftRT(const float value) noexcept
{
CARLA_SAFE_ASSERT(value >= -1.0f && value <= 1.0f);

const float fixedValue(carla_fixedValue<float>(-1.0f, 1.0f, value));

if (carla_isEqual(pData->postProc.balanceLeft, fixedValue))
return;

pData->postProc.balanceLeft = fixedValue;
pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_BALANCE_LEFT, 0, fixedValue);
}

void CarlaPlugin::setBalanceRightRT(const float value) noexcept
{
CARLA_SAFE_ASSERT(value >= -1.0f && value <= 1.0f);

const float fixedValue(carla_fixedValue<float>(-1.0f, 1.0f, value));

if (carla_isEqual(pData->postProc.balanceRight, fixedValue))
return;

pData->postProc.balanceRight = fixedValue;
pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_BALANCE_RIGHT, 0, fixedValue);
}

void CarlaPlugin::setPanningRT(const float value) noexcept
{
CARLA_SAFE_ASSERT(value >= -1.0f && value <= 1.0f);

const float fixedValue(carla_fixedValue<float>(-1.0f, 1.0f, value));

if (carla_isEqual(pData->postProc.panning, fixedValue))
return;

pData->postProc.panning = fixedValue;
}
#endif // ! BUILD_BRIDGE

void CarlaPlugin::setCtrlChannel(const int8_t channel, const bool sendOsc, const bool sendCallback) noexcept
@@ -1469,6 +1533,11 @@ void CarlaPlugin::setParameterValue(const uint32_t parameterId, const float valu
return; (void)sendOsc;
}

void CarlaPlugin::setParameterValueRT(const uint32_t parameterId, const float value) noexcept
{
pData->postponeRtEvent(kPluginPostRtEventParameterChange, static_cast<int32_t>(parameterId), 0, value);
}

void CarlaPlugin::setParameterValueByRealIndex(const int32_t rindex, const float value, const bool sendGui, const bool sendOsc, const bool sendCallback) noexcept
{
#ifndef BUILD_BRIDGE


+ 5
- 9
source/backend/plugin/CarlaPluginBridge.cpp View File

@@ -1195,15 +1195,13 @@ public:
if (MIDI_IS_CONTROL_BREATH_CONTROLLER(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_DRYWET) != 0)
{
value = ctrlEvent.value;
setDryWet(value, false, false);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_DRYWET, 0, value);
setDryWetRT(value);
}

if (MIDI_IS_CONTROL_CHANNEL_VOLUME(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_VOLUME) != 0)
{
value = ctrlEvent.value*127.0f/100.0f;
setVolume(value, false, false);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_VOLUME, 0, value);
setVolumeRT(value);
}

if (MIDI_IS_CONTROL_BALANCE(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_BALANCE) != 0)
@@ -1227,10 +1225,8 @@ public:
right = 1.0f;
}

setBalanceLeft(left, false, false);
setBalanceRight(right, false, false);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_BALANCE_LEFT, 0, left);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_BALANCE_RIGHT, 0, right);
setBalanceLeftRT(left);
setBalanceRightRT(right);
}
}
#endif
@@ -2567,7 +2563,7 @@ private:
return;

fTimedOut = true;
carla_stderr("waitForClient(%s) timed out", action);
carla_stderr2("waitForClient(%s) timed out", action);
}

CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaPluginBridge)


+ 16
- 10
source/backend/plugin/CarlaPluginDSSI.cpp View File

@@ -555,6 +555,17 @@ public:
CarlaPlugin::setParameterValue(parameterId, fixedValue, sendGui, sendOsc, sendCallback);
}

void setParameterValueRT(const uint32_t parameterId, const float value) noexcept override
{
CARLA_SAFE_ASSERT_RETURN(fParamBuffers != nullptr,);
CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,);

const float fixedValue(pData->param.getFixedValue(parameterId, value));
fParamBuffers[parameterId] = fixedValue;

CarlaPlugin::setParameterValueRT(parameterId, fixedValue);
}

void setCustomData(const char* const type, const char* const key, const char* const value, const bool sendGui) override
{
CARLA_SAFE_ASSERT_RETURN(fDssiDescriptor != nullptr,);
@@ -1432,15 +1443,13 @@ public:
if (MIDI_IS_CONTROL_BREATH_CONTROLLER(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_DRYWET) != 0)
{
value = ctrlEvent.value;
setDryWet(value, false, false);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_DRYWET, 0, value);
setDryWetRT(value);
}

if (MIDI_IS_CONTROL_CHANNEL_VOLUME(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_VOLUME) != 0)
{
value = ctrlEvent.value*127.0f/100.0f;
setVolume(value, false, false);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_VOLUME, 0, value);
setVolumeRT(value);
}

if (MIDI_IS_CONTROL_BALANCE(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_BALANCE) != 0)
@@ -1464,10 +1473,8 @@ public:
right = 1.0f;
}

setBalanceLeft(left, false, false);
setBalanceRight(right, false, false);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_BALANCE_LEFT, 0, left);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_BALANCE_RIGHT, 0, right);
setBalanceLeftRT(left);
setBalanceRightRT(right);
}
}
#endif
@@ -1500,8 +1507,7 @@ public:
value = std::rint(value);
}

setParameterValue(k, value, false, false, false);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, static_cast<int32_t>(k), 0, value);
setParameterValueRT(k, value);
}

if ((pData->options & PLUGIN_OPTION_SEND_CONTROL_CHANGES) != 0 && ctrlEvent.param < MAX_MIDI_CONTROL)


+ 80
- 61
source/backend/plugin/CarlaPluginFluidSynth.cpp View File

@@ -388,69 +388,93 @@ public:
{
CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,);

float fixedValue;

{
const ScopedSingleProcessLocker spl(this, (sendGui || sendOsc || sendCallback));
fixedValue = setParameterValueInFluidSynth(parameterId, value);

}

CarlaPlugin::setParameterValue(parameterId, fixedValue, sendGui, sendOsc, sendCallback);
}

void setParameterValueRT(const uint32_t parameterId, const float value) noexcept override
{
const float fixedValue = setParameterValueInFluidSynth(parameterId, value);

CarlaPlugin::setParameterValueRT(parameterId, fixedValue);
}

float setParameterValueInFluidSynth(const uint32_t parameterId, const float value) noexcept
{
CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count, value);

const float fixedValue(pData->param.getFixedValue(parameterId, value));
fParamBuffers[parameterId] = fixedValue;

switch (parameterId)
{
const ScopedSingleProcessLocker spl(this, (sendGui || sendOsc || sendCallback));
case FluidSynthReverbOnOff:
try {
fluid_synth_set_reverb_on(fSynth, (fixedValue > 0.5f) ? 1 : 0);
} CARLA_SAFE_EXCEPTION("fluid_synth_set_reverb_on")
break;

switch (parameterId)
{
case FluidSynthReverbOnOff:
try {
fluid_synth_set_reverb_on(fSynth, (fixedValue > 0.5f) ? 1 : 0);
} catch(...) {}
break;

case FluidSynthReverbRoomSize:
case FluidSynthReverbDamp:
case FluidSynthReverbLevel:
case FluidSynthReverbWidth:
try {
fluid_synth_set_reverb(fSynth, fParamBuffers[FluidSynthReverbRoomSize], fParamBuffers[FluidSynthReverbDamp], fParamBuffers[FluidSynthReverbWidth], fParamBuffers[FluidSynthReverbLevel]);
} catch(...) {}
break;
case FluidSynthReverbRoomSize:
case FluidSynthReverbDamp:
case FluidSynthReverbLevel:
case FluidSynthReverbWidth:
try {
fluid_synth_set_reverb(fSynth,
fParamBuffers[FluidSynthReverbRoomSize],
fParamBuffers[FluidSynthReverbDamp],
fParamBuffers[FluidSynthReverbWidth],
fParamBuffers[FluidSynthReverbLevel]);
} CARLA_SAFE_EXCEPTION("fluid_synth_set_reverb")
break;

case FluidSynthChorusOnOff:
try {
fluid_synth_set_chorus_on(fSynth, (value > 0.5f) ? 1 : 0);
} catch(...) {}
break;

case FluidSynthChorusNr:
case FluidSynthChorusLevel:
case FluidSynthChorusSpeedHz:
case FluidSynthChorusDepthMs:
case FluidSynthChorusType:
try {
fluid_synth_set_chorus(fSynth, (int)fParamBuffers[FluidSynthChorusNr], fParamBuffers[FluidSynthChorusLevel], fParamBuffers[FluidSynthChorusSpeedHz], fParamBuffers[FluidSynthChorusDepthMs], (int)fParamBuffers[FluidSynthChorusType]);
} catch(...) {}
break;
case FluidSynthChorusOnOff:
try {
fluid_synth_set_chorus_on(fSynth, (value > 0.5f) ? 1 : 0);
} CARLA_SAFE_EXCEPTION("fluid_synth_set_chorus_on")
break;

case FluidSynthPolyphony:
try {
fluid_synth_set_polyphony(fSynth, (int)value);
} catch(...) {}
break;
case FluidSynthChorusNr:
case FluidSynthChorusLevel:
case FluidSynthChorusSpeedHz:
case FluidSynthChorusDepthMs:
case FluidSynthChorusType:
try {
fluid_synth_set_chorus(fSynth,
(int)fParamBuffers[FluidSynthChorusNr],
fParamBuffers[FluidSynthChorusLevel],
fParamBuffers[FluidSynthChorusSpeedHz],
fParamBuffers[FluidSynthChorusDepthMs],
(int)fParamBuffers[FluidSynthChorusType]);
} CARLA_SAFE_EXCEPTION("fluid_synth_set_chorus")
break;

case FluidSynthInterpolation:
for (int i=0; i < MAX_MIDI_CHANNELS; ++i)
{
try {
fluid_synth_set_interp_method(fSynth, i, (int)value);
}
catch(...) {
break;
}
}
break;
case FluidSynthPolyphony:
try {
fluid_synth_set_polyphony(fSynth, (int)value);
} CARLA_SAFE_EXCEPTION("fluid_synth_set_polyphony")
break;

default:
break;
case FluidSynthInterpolation:
for (int i=0; i < MAX_MIDI_CHANNELS; ++i)
{
try {
fluid_synth_set_interp_method(fSynth, i, (int)value);
} CARLA_SAFE_EXCEPTION_BREAK("fluid_synth_set_interp_method")
}
break;

default:
break;
}

CarlaPlugin::setParameterValue(parameterId, value, sendGui, sendOsc, sendCallback);
return fixedValue;
}

void setCustomData(const char* const type, const char* const key, const char* const value, const bool sendGui) override
@@ -1128,15 +1152,13 @@ public:
if (MIDI_IS_CONTROL_BREATH_CONTROLLER(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_DRYWET) != 0)
{
value = ctrlEvent.value;
setDryWet(value, false, false);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_DRYWET, 0, value);
setDryWetRT(value);
}

if (MIDI_IS_CONTROL_CHANNEL_VOLUME(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_VOLUME) != 0)
{
value = ctrlEvent.value*127.0f/100.0f;
setVolume(value, false, false);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_VOLUME, 0, value);
setVolumeRT(value);
}

if (MIDI_IS_CONTROL_BALANCE(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_BALANCE) != 0)
@@ -1160,10 +1182,8 @@ public:
right = 1.0f;
}

setBalanceLeft(left, false, false);
setBalanceRight(right, false, false);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_BALANCE_LEFT, 0, left);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_BALANCE_RIGHT, 0, right);
setBalanceLeftRT(left);
setBalanceRightRT(right);
}
}
#endif
@@ -1196,8 +1216,7 @@ public:
value = std::rint(value);
}

setParameterValue(k, value, false, false, false);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, static_cast<int32_t>(k), 0, value);
setParameterValueRT(k, value);
}

if ((pData->options & PLUGIN_OPTION_SEND_CONTROL_CHANGES) != 0 && ctrlEvent.param < MAX_MIDI_CONTROL)


+ 5
- 9
source/backend/plugin/CarlaPluginJack.cpp View File

@@ -722,15 +722,13 @@ public:
if (MIDI_IS_CONTROL_BREATH_CONTROLLER(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_DRYWET) != 0)
{
value = ctrlEvent.value;
setDryWet(value, false, false);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_DRYWET, 0, value);
setDryWetRT(value);
}

if (MIDI_IS_CONTROL_CHANNEL_VOLUME(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_VOLUME) != 0)
{
value = ctrlEvent.value*127.0f/100.0f;
setVolume(value, false, false);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_VOLUME, 0, value);
setVolumeRT(value);
}

if (MIDI_IS_CONTROL_BALANCE(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_BALANCE) != 0)
@@ -754,10 +752,8 @@ public:
right = 1.0f;
}

setBalanceLeft(left, false, false);
setBalanceRight(right, false, false);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_BALANCE_LEFT, 0, left);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_BALANCE_RIGHT, 0, right);
setBalanceLeftRT(left);
setBalanceRightRT(right);
}
}
#endif
@@ -1427,7 +1423,7 @@ private:
return;

fTimedOut = true;
carla_stderr("waitForClient(%s) timed out", action);
carla_stderr2("waitForClient(%s) timed out", action);
}

bool restartBridgeThread()


+ 16
- 10
source/backend/plugin/CarlaPluginLADSPA.cpp View File

@@ -401,6 +401,17 @@ public:
CarlaPlugin::setParameterValue(parameterId, fixedValue, sendGui, sendOsc, sendCallback);
}

void setParameterValueRT(const uint32_t parameterId, const float value) noexcept override
{
CARLA_SAFE_ASSERT_RETURN(fParamBuffers != nullptr,);
CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,);

const float fixedValue(pData->param.getFixedValue(parameterId, value));
fParamBuffers[parameterId] = fixedValue;

CarlaPlugin::setParameterValueRT(parameterId, fixedValue);
}

// -------------------------------------------------------------------
// Misc

@@ -965,15 +976,13 @@ public:
if (MIDI_IS_CONTROL_BREATH_CONTROLLER(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_DRYWET) != 0)
{
value = ctrlEvent.value;
setDryWet(value, false, false);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_DRYWET, 0, value);
setDryWetRT(value);
}

if (MIDI_IS_CONTROL_CHANNEL_VOLUME(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_VOLUME) != 0)
{
value = ctrlEvent.value*127.0f/100.0f;
setVolume(value, false, false);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_VOLUME, 0, value);
setVolumeRT(value);
}

if (MIDI_IS_CONTROL_BALANCE(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_BALANCE) != 0)
@@ -997,10 +1006,8 @@ public:
right = 1.0f;
}

setBalanceLeft(left, false, false);
setBalanceRight(right, false, false);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_BALANCE_LEFT, 0, left);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_BALANCE_RIGHT, 0, right);
setBalanceLeftRT(left);
setBalanceRightRT(right);
}
}
#endif
@@ -1033,8 +1040,7 @@ public:
value = std::rint(value);
}

setParameterValue(k, value, false, false, false);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, static_cast<int32_t>(k), 0, value);
setParameterValueRT(k, value);
}

break;


+ 16
- 10
source/backend/plugin/CarlaPluginLV2.cpp View File

@@ -1146,6 +1146,17 @@ public:
CarlaPlugin::setParameterValue(parameterId, fixedValue, sendGui, sendOsc, sendCallback);
}

void setParameterValueRT(const uint32_t parameterId, const float value) noexcept override
{
CARLA_SAFE_ASSERT_RETURN(fParamBuffers != nullptr,);
CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,);

const float fixedValue(pData->param.getFixedValue(parameterId, value));
fParamBuffers[parameterId] = fixedValue;

CarlaPlugin::setParameterValueRT(parameterId, fixedValue);
}

void setCustomData(const char* const type, const char* const key, const char* const value, const bool sendGui) override
{
CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,);
@@ -3141,15 +3152,13 @@ public:
if (MIDI_IS_CONTROL_BREATH_CONTROLLER(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_DRYWET) != 0)
{
value = ctrlEvent.value;
setDryWet(value, false, false);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_DRYWET, 0, value);
setDryWetRT(value);
}

if (MIDI_IS_CONTROL_CHANNEL_VOLUME(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_VOLUME) != 0)
{
value = ctrlEvent.value*127.0f/100.0f;
setVolume(value, false, false);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_VOLUME, 0, value);
setVolumeRT(value);
}

if (MIDI_IS_CONTROL_BALANCE(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_BALANCE) != 0)
@@ -3173,10 +3182,8 @@ public:
right = 1.0f;
}

setBalanceLeft(left, false, false);
setBalanceRight(right, false, false);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_BALANCE_LEFT, 0, left);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_BALANCE_RIGHT, 0, right);
setBalanceLeftRT(left);
setBalanceRightRT(right);
}
}
#endif
@@ -3210,8 +3217,7 @@ public:
value = std::rint(value);
}

setParameterValue(k, value, false, false, false);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, static_cast<int32_t>(k), 0, value);
setParameterValueRT(k, value);
}

if ((pData->options & PLUGIN_OPTION_SEND_CONTROL_CHANGES) != 0 && ctrlEvent.param < MAX_MIDI_CONTROL)


+ 27
- 10
source/backend/plugin/CarlaPluginLinuxSampler.cpp View File

@@ -438,6 +438,28 @@ public:
// -------------------------------------------------------------------
// Set data (plugin-specific stuff)

void setParameterValue(const uint32_t parameterId, const float value, const bool sendGui, const bool sendOsc, const bool sendCallback) noexcept override
{
CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,);

const float fixedValue(pData->param.getFixedValue(parameterId, value));

// nothing here for now

CarlaPlugin::setParameterValue(parameterId, fixedValue, sendGui, sendOsc, sendCallback);
}

void setParameterValueRT(const uint32_t parameterId, const float value) noexcept override
{
CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,);

const float fixedValue(pData->param.getFixedValue(parameterId, value));

// nothing here for now

CarlaPlugin::setParameterValueRT(parameterId, fixedValue);
}

void setCustomData(const char* const type, const char* const key, const char* const value, const bool sendGui) override
{
CARLA_SAFE_ASSERT_RETURN(type != nullptr && type[0] != '\0',);
@@ -906,15 +928,13 @@ public:
if (MIDI_IS_CONTROL_BREATH_CONTROLLER(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_DRYWET) != 0)
{
value = ctrlEvent.value;
setDryWet(value, false, false);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_DRYWET, 0, value);
setDryWetRT(value);
}

if (MIDI_IS_CONTROL_CHANNEL_VOLUME(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_VOLUME) != 0)
{
value = ctrlEvent.value*127.0f/100.0f;
setVolume(value, false, false);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_VOLUME, 0, value);
setVolumeRT(value);
}

if (MIDI_IS_CONTROL_BALANCE(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_BALANCE) != 0)
@@ -938,10 +958,8 @@ public:
right = 1.0f;
}

setBalanceLeft(left, false, false);
setBalanceRight(right, false, false);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_BALANCE_LEFT, 0, left);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_BALANCE_RIGHT, 0, right);
setBalanceLeftRT(left);
setBalanceRightRT(right);
}
}
#endif
@@ -971,8 +989,7 @@ public:
value = std::rint(value);
}

setParameterValue(k, value, false, false, false);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, static_cast<int32_t>(k), 0, value);
setParameterValueRT(k, value);
}

if ((pData->options & PLUGIN_OPTION_SEND_CONTROL_CHANGES) != 0 && ctrlEvent.param < MAX_MIDI_CONTROL)


+ 23
- 10
source/backend/plugin/CarlaPluginNative.cpp View File

@@ -614,6 +614,24 @@ public:
CarlaPlugin::setParameterValue(parameterId, fixedValue, sendGui, sendOsc, sendCallback);
}

void setParameterValueRT(const uint32_t parameterId, const float value) noexcept override
{
CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,);
CARLA_SAFE_ASSERT_RETURN(fDescriptor->set_parameter_value != nullptr,);
CARLA_SAFE_ASSERT_RETURN(fHandle != nullptr,);
CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,);

const float fixedValue(pData->param.getFixedValue(parameterId, value));

// FIXME - try
fDescriptor->set_parameter_value(fHandle, parameterId, fixedValue);

if (fHandle2 != nullptr)
fDescriptor->set_parameter_value(fHandle2, parameterId, fixedValue);

CarlaPlugin::setParameterValueRT(parameterId, fixedValue);
}

void setCustomData(const char* const type, const char* const key, const char* const value, const bool sendGui) override
{
CARLA_SAFE_ASSERT_RETURN(fDescriptor != nullptr,);
@@ -1509,15 +1527,13 @@ public:
if (MIDI_IS_CONTROL_BREATH_CONTROLLER(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_DRYWET) > 0)
{
value = ctrlEvent.value;
setDryWet(value, false, false);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_DRYWET, 0, value);
setDryWetRT(value);
}

if (MIDI_IS_CONTROL_CHANNEL_VOLUME(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_VOLUME) > 0)
{
value = ctrlEvent.value*127.0f/100.0f;
setVolume(value, false, false);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_VOLUME, 0, value);
setVolumeRT(value);
}

if (MIDI_IS_CONTROL_BALANCE(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_BALANCE) > 0)
@@ -1541,10 +1557,8 @@ public:
right = 1.0f;
}

setBalanceLeft(left, false, false);
setBalanceRight(right, false, false);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_BALANCE_LEFT, 0, left);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_BALANCE_RIGHT, 0, right);
setBalanceLeftRT(left);
setBalanceRightRT(right);
}
}
#endif
@@ -1577,8 +1591,7 @@ public:
value = std::rint(value);
}

setParameterValue(k, value, false, false, false);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, static_cast<int32_t>(k), 0, value);
setParameterValueRT(k, value);
}

if ((pData->options & PLUGIN_OPTION_SEND_CONTROL_CHANGES) != 0 && ctrlEvent.param < MAX_MIDI_CONTROL)


+ 16
- 10
source/backend/plugin/CarlaPluginVST2.cpp View File

@@ -360,6 +360,17 @@ public:
CarlaPlugin::setParameterValue(parameterId, fixedValue, sendGui, sendOsc, sendCallback);
}

void setParameterValueRT(const uint32_t parameterId, const float value) noexcept override
{
CARLA_SAFE_ASSERT_RETURN(fEffect != nullptr,);
CARLA_SAFE_ASSERT_RETURN(parameterId < pData->param.count,);

const float fixedValue(pData->param.getFixedValue(parameterId, value));
fEffect->setParameter(fEffect, static_cast<int32_t>(parameterId), fixedValue);

CarlaPlugin::setParameterValueRT(parameterId, fixedValue);
}

void setChunkData(const void* const data, const std::size_t dataSize) override
{
CARLA_SAFE_ASSERT_RETURN(pData->options & PLUGIN_OPTION_USE_CHUNKS,);
@@ -1231,15 +1242,13 @@ public:
if (MIDI_IS_CONTROL_BREATH_CONTROLLER(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_DRYWET) != 0)
{
value = ctrlEvent.value;
setDryWet(value, false, false);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_DRYWET, 0, value);
setDryWetRT(value);
}

if (MIDI_IS_CONTROL_CHANNEL_VOLUME(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_VOLUME) != 0)
{
value = ctrlEvent.value*127.0f/100.0f;
setVolume(value, false, false);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_VOLUME, 0, value);
setVolumeRT(value);
}

if (MIDI_IS_CONTROL_BALANCE(ctrlEvent.param) && (pData->hints & PLUGIN_CAN_BALANCE) != 0)
@@ -1263,10 +1272,8 @@ public:
right = 1.0f;
}

setBalanceLeft(left, false, false);
setBalanceRight(right, false, false);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_BALANCE_LEFT, 0, left);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_BALANCE_RIGHT, 0, right);
setBalanceLeftRT(left);
setBalanceRightRT(right);
}
}
#endif
@@ -1300,8 +1307,7 @@ public:
value = std::rint(value);
}

setParameterValue(k, value, false, false, false);
pData->postponeRtEvent(kPluginPostRtEventParameterChange, static_cast<int32_t>(k), 0, value);
setParameterValueRT(k, value);
}

if ((pData->options & PLUGIN_OPTION_SEND_CONTROL_CHANGES) != 0 && ctrlEvent.param < MAX_MIDI_CONTROL)


Loading…
Cancel
Save