Browse Source

Silence audio when jack + rack mode is closing

tags/1.9.7
falkTX 8 years ago
parent
commit
9dbd2bdb0a
2 changed files with 29 additions and 18 deletions
  1. +1
    -1
      source/backend/engine/CarlaEngine.cpp
  2. +28
    -17
      source/backend/engine/CarlaEngineJack.cpp

+ 1
- 1
source/backend/engine/CarlaEngine.cpp View File

@@ -2146,7 +2146,7 @@ bool CarlaEngine::loadProjectInternal(juce::XmlDocument& xmlDoc)
{
const uint pluginId = pData->curPluginCount;

if (CarlaPlugin* const plugin = getPluginUnchecked(pluginId))
if (CarlaPlugin* const plugin = pData->plugins[pluginId].plugin)
{
callback(ENGINE_CALLBACK_IDLE, 0, 0, 0, 0.0f, nullptr);



+ 28
- 17
source/backend/engine/CarlaEngineJack.cpp View File

@@ -1557,28 +1557,39 @@ protected:
plugin->unlock();
}
#else
if (pData->curPluginCount == 0 && pData->options.processMode == ENGINE_PROCESS_MODE_CONTINUOUS_RACK)
if (pData->options.processMode == ENGINE_PROCESS_MODE_CONTINUOUS_RACK)
{
float* const audioIn1 = (float*)jackbridge_port_get_buffer(fRackPorts[kRackPortAudioIn1], nframes);
float* const audioIn2 = (float*)jackbridge_port_get_buffer(fRackPorts[kRackPortAudioIn2], nframes);
float* const audioOut1 = (float*)jackbridge_port_get_buffer(fRackPorts[kRackPortAudioOut1], nframes);
float* const audioOut2 = (float*)jackbridge_port_get_buffer(fRackPorts[kRackPortAudioOut2], nframes);
if (pData->aboutToClose)
{
if (float* const audioOut1 = (float*)jackbridge_port_get_buffer(fRackPorts[kRackPortAudioOut1], nframes))
FloatVectorOperations::clear(audioOut1, static_cast<int>(nframes));

// assert buffers
CARLA_SAFE_ASSERT_RETURN(audioIn1 != nullptr,);
CARLA_SAFE_ASSERT_RETURN(audioIn2 != nullptr,);
CARLA_SAFE_ASSERT_RETURN(audioOut1 != nullptr,);
CARLA_SAFE_ASSERT_RETURN(audioOut2 != nullptr,);
if (float* const audioOut2 = (float*)jackbridge_port_get_buffer(fRackPorts[kRackPortAudioOut2], nframes))
FloatVectorOperations::clear(audioOut2, static_cast<int>(nframes));
}
else if (pData->curPluginCount == 0)
{
float* const audioIn1 = (float*)jackbridge_port_get_buffer(fRackPorts[kRackPortAudioIn1], nframes);
float* const audioIn2 = (float*)jackbridge_port_get_buffer(fRackPorts[kRackPortAudioIn2], nframes);
float* const audioOut1 = (float*)jackbridge_port_get_buffer(fRackPorts[kRackPortAudioOut1], nframes);
float* const audioOut2 = (float*)jackbridge_port_get_buffer(fRackPorts[kRackPortAudioOut2], nframes);

// pass-through
FloatVectorOperations::copy(audioOut1, audioIn1, static_cast<int>(nframes));
FloatVectorOperations::copy(audioOut2, audioIn2, static_cast<int>(nframes));
// assert buffers
CARLA_SAFE_ASSERT_RETURN(audioIn1 != nullptr,);
CARLA_SAFE_ASSERT_RETURN(audioIn2 != nullptr,);
CARLA_SAFE_ASSERT_RETURN(audioOut1 != nullptr,);
CARLA_SAFE_ASSERT_RETURN(audioOut2 != nullptr,);

// TODO pass-through MIDI as well
if (void* const eventOut = jackbridge_port_get_buffer(fRackPorts[kRackPortEventOut], nframes))
jackbridge_midi_clear_buffer(eventOut);
// pass-through
FloatVectorOperations::copy(audioOut1, audioIn1, static_cast<int>(nframes));
FloatVectorOperations::copy(audioOut2, audioIn2, static_cast<int>(nframes));

return;
// TODO pass-through MIDI as well
if (void* const eventOut = jackbridge_port_get_buffer(fRackPorts[kRackPortEventOut], nframes))
jackbridge_midi_clear_buffer(eventOut);

return;
}
}

if (pData->options.processMode == ENGINE_PROCESS_MODE_SINGLE_CLIENT)


Loading…
Cancel
Save