Browse Source

Misc cleanup and fixing

tags/1.9.4
falkTX 12 years ago
parent
commit
9092c7772c
10 changed files with 82 additions and 162 deletions
  1. +3
    -0
      source/backend/engine/CarlaEngine.cpp
  2. +1
    -7
      source/backend/plugin/BridgePlugin.cpp
  3. +9
    -24
      source/backend/plugin/DssiPlugin.cpp
  4. +15
    -33
      source/backend/plugin/FluidSynthPlugin.cpp
  5. +0
    -11
      source/backend/plugin/LadspaPlugin.cpp
  6. +7
    -18
      source/backend/plugin/LinuxSamplerPlugin.cpp
  7. +28
    -19
      source/backend/plugin/Lv2Plugin.cpp
  8. +10
    -28
      source/backend/plugin/NativePlugin.cpp
  9. +7
    -22
      source/backend/plugin/VstPlugin.cpp
  10. +2
    -0
      source/theme/CarlaStyle.cpp

+ 3
- 0
source/backend/engine/CarlaEngine.cpp View File

@@ -1783,6 +1783,9 @@ void setValueIfHigher(float& value, const float& compare)

void CarlaEngine::processRack(float* inBuf[2], float* outBuf[2], const uint32_t frames)
{
CARLA_ASSERT(kData->rack.in != nullptr);
CARLA_ASSERT(kData->rack.out != nullptr);

// initialize outputs (zero)
carla_zeroFloat(outBuf[0], frames);
carla_zeroFloat(outBuf[1], frames);


+ 1
- 7
source/backend/plugin/BridgePlugin.cpp View File

@@ -1514,14 +1514,8 @@ private:
carla_shm_close(fShmControl.shm);
}

void resizeAudioPool(uint32_t bufferSize = 0, double sampleRate = 0.0)
void resizeAudioPool(uint32_t bufferSize)
{
if (bufferSize == 0)
bufferSize = kData->engine->getBufferSize();

if (sampleRate == 0.0)
sampleRate = kData->engine->getSampleRate();

if (fShmAudioPool.data != nullptr)
carla_shm_unmap(fShmAudioPool.shm, fShmAudioPool.data, fShmAudioPool.size);



+ 9
- 24
source/backend/plugin/DssiPlugin.cpp View File

@@ -1067,8 +1067,8 @@ public:
uint32_t time, nEvents = kData->event.portIn->getEventCount();
uint32_t startTime = 0;
uint32_t timeOffset = 0;

uint32_t nextBankId = 0;

if (kData->midiprog.current >= 0 && kData->midiprog.count > 0)
nextBankId = kData->midiprog.data[kData->midiprog.current].bank;

@@ -1167,6 +1167,7 @@ public:
continue;
}
}
#endif

// Control plugin parameters
for (k=0; k < kData->param.count; ++k)
@@ -1197,7 +1198,6 @@ public:
setParameterValue(k, value, false, false, false);
postponeRtEvent(kPluginPostRtEventParameterChange, static_cast<int32_t>(k), 0, value);
}
#endif
break;
}

@@ -1224,23 +1224,11 @@ public:
break;

case kEngineControlEventTypeAllSoundOff:
if (event.channel == kData->ctrlChannel)
{
if (! allNotesOffSent)
{
allNotesOffSent = true;
sendMidiAllNotesOffToCallback();
}

postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_ACTIVE, 0, 0.0f);
postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_ACTIVE, 0, 1.0f);
}

if (midiEventCount >= MAX_MIDI_EVENTS)
continue;

if (fOptions & PLUGIN_OPTION_SEND_ALL_SOUND_OFF)
{
if (midiEventCount >= MAX_MIDI_EVENTS)
continue;

carla_zeroStruct<snd_seq_event_t>(fMidiEvents[midiEventCount]);

fMidiEvents[midiEventCount].time.tick = sampleAccurate ? startTime : time;
@@ -1254,20 +1242,17 @@ public:
break;

case kEngineControlEventTypeAllNotesOff:
if (event.channel == kData->ctrlChannel)
if (fOptions & PLUGIN_OPTION_SEND_ALL_SOUND_OFF)
{
if (! allNotesOffSent)
if (event.channel == kData->ctrlChannel && ! allNotesOffSent)
{
allNotesOffSent = true;
sendMidiAllNotesOffToCallback();
}
}

if (midiEventCount >= MAX_MIDI_EVENTS)
continue;
if (midiEventCount >= MAX_MIDI_EVENTS)
continue;

if (fOptions & PLUGIN_OPTION_SEND_ALL_SOUND_OFF)
{
carla_zeroStruct<snd_seq_event_t>(fMidiEvents[midiEventCount]);

fMidiEvents[midiEventCount].time.tick = sampleAccurate ? startTime : time;


+ 15
- 33
source/backend/plugin/FluidSynthPlugin.cpp View File

@@ -978,9 +978,9 @@ public:
uint32_t time, nEvents = kData->event.portIn->getEventCount();
uint32_t timeOffset = 0;

uint32_t nextBankIds[16] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0 };
uint32_t nextBankIds[MAX_MIDI_CHANNELS] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0 };

if (kData->midiprog.current >= 0 && kData->midiprog.count > 0 && kData->ctrlChannel >= 0 && kData->ctrlChannel < 16)
if (kData->midiprog.current >= 0 && kData->midiprog.count > 0 && kData->ctrlChannel >= 0 && kData->ctrlChannel < MAX_MIDI_CHANNELS)
nextBankIds[kData->ctrlChannel] = kData->midiprog.data[kData->midiprog.current].bank;

for (i=0; i < nEvents; ++i)
@@ -1108,27 +1108,24 @@ public:
}

case kEngineControlEventTypeMidiBank:
if (event.channel < 16 && (fOptions & PLUGIN_OPTION_MAP_PROGRAM_CHANGES) != 0)
if (event.channel < MAX_MIDI_CHANNELS && (fOptions & PLUGIN_OPTION_MAP_PROGRAM_CHANGES) != 0)
nextBankIds[event.channel] = ctrlEvent.param;
break;

case kEngineControlEventTypeMidiProgram:
if (event.channel < 16 && (fOptions & PLUGIN_OPTION_MAP_PROGRAM_CHANGES) != 0)
if (event.channel < MAX_MIDI_CHANNELS && (fOptions & PLUGIN_OPTION_MAP_PROGRAM_CHANGES) != 0)
{
const uint32_t bankId = nextBankIds[event.channel];
const uint32_t progId = ctrlEvent.param;
const uint32_t bankId(nextBankIds[event.channel]);
const uint32_t progId(ctrlEvent.param);

for (k=0; k < kData->midiprog.count; ++k)
{
if (kData->midiprog.data[k].bank == bankId && kData->midiprog.data[k].program == progId)
{
fluid_synth_program_select(fSynth, event.channel, fSynthId, bankId, progId);

if (event.channel == kData->ctrlChannel)
{
setMidiProgram(k, false, false, false);
postponeRtEvent(kPluginPostRtEventMidiProgramChange, k, 0, 0.0f);
}
else
fluid_synth_program_select(fSynth, event.channel, fSynthId, bankId, progId);

break;
}
@@ -1137,45 +1134,30 @@ public:
break;

case kEngineControlEventTypeAllSoundOff:
if (event.channel == kData->ctrlChannel)
if (fOptions & PLUGIN_OPTION_SEND_ALL_SOUND_OFF)
{
if (! allNotesOffSent)
{
allNotesOffSent = true;
sendMidiAllNotesOffToCallback();
}

postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_ACTIVE, 0, 0.0f);
postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_ACTIVE, 0, 1.0f);

if (fOptions & PLUGIN_OPTION_SEND_ALL_SOUND_OFF)
{
#ifdef FLUIDSYNTH_VERSION_NEW_API
fluid_synth_all_sounds_off(fSynth, event.channel);
fluid_synth_all_sounds_off(fSynth, event.channel);
#else
fluid_synth_cc(f_synth, event.channel, MIDI_CONTROL_ALL_SOUND_OFF, 0);
fluid_synth_cc(fSynth, event.channel, MIDI_CONTROL_ALL_SOUND_OFF, 0);
#endif
}
}
break;

case kEngineControlEventTypeAllNotesOff:
if (event.channel == kData->ctrlChannel)
if (fOptions & PLUGIN_OPTION_SEND_ALL_SOUND_OFF)
{
if (! allNotesOffSent)
if (event.channel == kData->ctrlChannel && ! allNotesOffSent)
{
allNotesOffSent = true;
sendMidiAllNotesOffToCallback();
}

if (fOptions & PLUGIN_OPTION_SEND_ALL_SOUND_OFF)
{
#ifdef FLUIDSYNTH_VERSION_NEW_API
fluid_synth_all_notes_off(fSynth, event.channel);
fluid_synth_all_notes_off(fSynth, event.channel);
#else
fluid_synth_cc(f_synth, event.channel, MIDI_CONTROL_ALL_NOTES_OFF, 0);
fluid_synth_cc(fSynth, event.channel, MIDI_CONTROL_ALL_NOTES_OFF, 0);
#endif
}
}
break;
}


+ 0
- 11
source/backend/plugin/LadspaPlugin.cpp View File

@@ -1010,18 +1010,7 @@ public:

case kEngineControlEventTypeMidiBank:
case kEngineControlEventTypeMidiProgram:
break;

case kEngineControlEventTypeAllSoundOff:
#ifndef BUILD_BRIDGE
if (event.channel == kData->ctrlChannel)
{
postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_ACTIVE, 0, 0.0f);
postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_ACTIVE, 0, 1.0f);
}
#endif
break;

case kEngineControlEventTypeAllNotesOff:
break;
}


+ 7
- 18
source/backend/plugin/LinuxSamplerPlugin.cpp View File

@@ -573,8 +573,8 @@ public:
uint32_t time, nEvents = kData->event.portIn->getEventCount();
uint32_t startTime = 0;
uint32_t timeOffset = 0;

uint32_t nextBankId = 0;

if (kData->midiprog.current >= 0 && kData->midiprog.count > 0)
nextBankId = kData->midiprog.data[kData->midiprog.current].bank;

@@ -730,34 +730,23 @@ public:
break;

case kEngineControlEventTypeAllSoundOff:
if (event.channel == kData->ctrlChannel)
if (fOptions & PLUGIN_OPTION_SEND_ALL_SOUND_OFF)
{
if (! allNotesOffSent)
{
allNotesOffSent = true;
sendMidiAllNotesOffToCallback();
}

postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_ACTIVE, 0, 0.0f);
postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_ACTIVE, 0, 1.0f);
fMidiInputPort->DispatchControlChange(MIDI_CONTROL_ALL_SOUND_OFF, 0, event.channel, sampleAccurate ? startTime : time);
}

if (fOptions & PLUGIN_OPTION_SEND_ALL_SOUND_OFF)
fMidiInputPort->DispatchControlChange(MIDI_CONTROL_ALL_SOUND_OFF, 0, k, sampleAccurate ? startTime : time);
break;

case kEngineControlEventTypeAllNotesOff:
if (event.channel == kData->ctrlChannel)
if (fOptions & PLUGIN_OPTION_SEND_ALL_SOUND_OFF)
{
if (! allNotesOffSent)
if (event.channel == kData->ctrlChannel && ! allNotesOffSent)
{
allNotesOffSent = true;
sendMidiAllNotesOffToCallback();
}
}

if (fOptions & PLUGIN_OPTION_SEND_ALL_SOUND_OFF)
fMidiInputPort->DispatchControlChange(MIDI_CONTROL_ALL_NOTES_OFF, 0, k, sampleAccurate ? startTime : time);
fMidiInputPort->DispatchControlChange(MIDI_CONTROL_ALL_NOTES_OFF, 0, event.channel, sampleAccurate ? startTime : time);
}
break;
}



+ 28
- 19
source/backend/plugin/Lv2Plugin.cpp View File

@@ -2605,8 +2605,8 @@ public:
uint32_t time, nEvents = fEventsIn.ctrl->port->getEventCount();
uint32_t startTime = 0;
uint32_t timeOffset = 0;

uint32_t nextBankId = 0;

if (kData->midiprog.current >= 0 && kData->midiprog.count > 0)
nextBankId = kData->midiprog.data[kData->midiprog.current].bank;

@@ -2782,37 +2782,46 @@ public:
break;

case kEngineControlEventTypeAllSoundOff:
if (event.channel == kData->ctrlChannel)
if (fOptions & PLUGIN_OPTION_SEND_ALL_SOUND_OFF)
{
if (! allNotesOffSent)
{
allNotesOffSent = true;
sendMidiAllNotesOffToCallback();
}
uint8_t midiData[3];
midiData[0] = MIDI_STATUS_CONTROL_CHANGE + i;
midiData[1] = MIDI_CONTROL_ALL_SOUND_OFF;
midiData[2] = 0;

postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_ACTIVE, 0, 0.0f);
postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_ACTIVE, 0, 1.0f);
}
if (fEventsIn.ctrl->type & CARLA_EVENT_DATA_ATOM)
lv2_atom_buffer_write(&evInAtomIters[fEventsIn.ctrlIndex], 0, 0, CARLA_URI_MAP_ID_MIDI_EVENT, 3, midiData);

if (fOptions & PLUGIN_OPTION_SEND_ALL_SOUND_OFF)
{
// TODO
else if (fEventsIn.ctrl->type & CARLA_EVENT_DATA_EVENT)
lv2_event_write(&evInEventIters[fEventsIn.ctrlIndex], 0, 0, CARLA_URI_MAP_ID_MIDI_EVENT, 3, midiData);

else if (fEventsIn.ctrl->type & CARLA_EVENT_DATA_MIDI_LL)
lv2midi_put_event(&evInMidiStates[fEventsIn.ctrlIndex], 0, 3, midiData);
}
break;

case kEngineControlEventTypeAllNotesOff:
if (event.channel == kData->ctrlChannel)
if (fOptions & PLUGIN_OPTION_SEND_ALL_SOUND_OFF)
{
if (! allNotesOffSent)
if (event.channel == kData->ctrlChannel && ! allNotesOffSent)
{
allNotesOffSent = true;
sendMidiAllNotesOffToCallback();
}
}

if (fOptions & PLUGIN_OPTION_SEND_ALL_SOUND_OFF)
{
// TODO
uint8_t midiData[3];
midiData[0] = MIDI_STATUS_CONTROL_CHANGE + i;
midiData[1] = MIDI_CONTROL_ALL_NOTES_OFF;
midiData[2] = 0;

if (fEventsIn.ctrl->type & CARLA_EVENT_DATA_ATOM)
lv2_atom_buffer_write(&evInAtomIters[fEventsIn.ctrlIndex], 0, 0, CARLA_URI_MAP_ID_MIDI_EVENT, 3, midiData);

else if (fEventsIn.ctrl->type & CARLA_EVENT_DATA_EVENT)
lv2_event_write(&evInEventIters[fEventsIn.ctrlIndex], 0, 0, CARLA_URI_MAP_ID_MIDI_EVENT, 3, midiData);

else if (fEventsIn.ctrl->type & CARLA_EVENT_DATA_MIDI_LL)
lv2midi_put_event(&evInMidiStates[fEventsIn.ctrlIndex], 0, 3, midiData);
}
break;
}


+ 10
- 28
source/backend/plugin/NativePlugin.cpp View File

@@ -1298,8 +1298,8 @@ public:
uint32_t time, nEvents = kData->event.portIn->getEventCount();
uint32_t startTime = 0;
uint32_t timeOffset = 0;

uint32_t nextBankId = 0;

if (kData->midiprog.current >= 0 && kData->midiprog.count > 0)
nextBankId = kData->midiprog.data[kData->midiprog.current].bank;

@@ -1320,7 +1320,6 @@ public:
{
startTime = 0;
timeOffset = time;
nextBankId = 0;

if (kData->midiprog.current >= 0 && kData->midiprog.count > 0)
nextBankId = kData->midiprog.data[kData->midiprog.current].bank;
@@ -1462,57 +1461,40 @@ public:
break;

case kEngineControlEventTypeAllSoundOff:
if (event.channel == kData->ctrlChannel)
{
if (! allNotesOffSent)
{
allNotesOffSent = true;
sendMidiAllNotesOffToCallback();
}

postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_ACTIVE, 0, 0.0f);
postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_ACTIVE, 0, 1.0f);
}

if (fMidiEventCount >= MAX_MIDI_EVENTS*2)
continue;

if (fOptions & PLUGIN_OPTION_SEND_ALL_SOUND_OFF)
{
if (fMidiEventCount >= MAX_MIDI_EVENTS*2)
continue;

fMidiEvents[fMidiEventCount].port = 0;
fMidiEvents[fMidiEventCount].time = sampleAccurate ? startTime : time;
fMidiEvents[fMidiEventCount].data[0] = MIDI_STATUS_CONTROL_CHANGE + event.channel;
fMidiEvents[fMidiEventCount].data[1] = MIDI_CONTROL_ALL_SOUND_OFF;
fMidiEvents[fMidiEventCount].data[2] = 0;
fMidiEvents[fMidiEventCount].data[3] = 0;
fMidiEvents[fMidiEventCount].size = 2;
fMidiEvents[fMidiEventCount].size = 3;

fMidiEventCount += 1;
}
break;

case kEngineControlEventTypeAllNotesOff:
if (event.channel == kData->ctrlChannel)
if (fOptions & PLUGIN_OPTION_SEND_ALL_SOUND_OFF)
{
if (! allNotesOffSent)
if (event.channel == kData->ctrlChannel && ! allNotesOffSent)
{
allNotesOffSent = true;
sendMidiAllNotesOffToCallback();
}
}

if (fMidiEventCount >= MAX_MIDI_EVENTS*2)
continue;
if (fMidiEventCount >= MAX_MIDI_EVENTS*2)
continue;

if (fOptions & PLUGIN_OPTION_SEND_ALL_SOUND_OFF)
{
fMidiEvents[fMidiEventCount].port = 0;
fMidiEvents[fMidiEventCount].time = sampleAccurate ? startTime : time;
fMidiEvents[fMidiEventCount].data[0] = MIDI_STATUS_CONTROL_CHANGE + event.channel;
fMidiEvents[fMidiEventCount].data[1] = MIDI_CONTROL_ALL_NOTES_OFF;
fMidiEvents[fMidiEventCount].data[2] = 0;
fMidiEvents[fMidiEventCount].data[3] = 0;
fMidiEvents[fMidiEventCount].size = 2;
fMidiEvents[fMidiEventCount].size = 3;

fMidiEventCount += 1;
}


+ 7
- 22
source/backend/plugin/VstPlugin.cpp View File

@@ -1299,23 +1299,11 @@ public:
break;

case kEngineControlEventTypeAllSoundOff:
if (event.channel == kData->ctrlChannel)
{
if (! allNotesOffSent)
{
allNotesOffSent = true;
sendMidiAllNotesOffToCallback();
}

postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_ACTIVE, 0, 0.0f);
postponeRtEvent(kPluginPostRtEventParameterChange, PARAMETER_ACTIVE, 0, 1.0f);
}

if (fMidiEventCount >= MAX_MIDI_EVENTS*2)
continue;

if (fOptions & PLUGIN_OPTION_SEND_ALL_SOUND_OFF)
{
if (fMidiEventCount >= MAX_MIDI_EVENTS*2)
continue;

carla_zeroStruct<VstMidiEvent>(fMidiEvents[fMidiEventCount]);

fMidiEvents[fMidiEventCount].type = kVstMidiType;
@@ -1329,20 +1317,17 @@ public:
break;

case kEngineControlEventTypeAllNotesOff:
if (event.channel == kData->ctrlChannel)
if (fOptions & PLUGIN_OPTION_SEND_ALL_SOUND_OFF)
{
if (! allNotesOffSent)
if (event.channel == kData->ctrlChannel && ! allNotesOffSent)
{
allNotesOffSent = true;
sendMidiAllNotesOffToCallback();
}
}

if (fMidiEventCount >= MAX_MIDI_EVENTS*2)
continue;
if (fMidiEventCount >= MAX_MIDI_EVENTS*2)
continue;

if (fOptions & PLUGIN_OPTION_SEND_ALL_SOUND_OFF)
{
carla_zeroStruct<VstMidiEvent>(fMidiEvents[fMidiEventCount]);

fMidiEvents[fMidiEventCount].type = kVstMidiType;


+ 2
- 0
source/theme/CarlaStyle.cpp View File

@@ -2154,6 +2154,7 @@ void CarlaStyle::drawControl(ControlElement element, const QStyleOption *option,
return;
}

#if 0 // code does nothing?
if (flip) {
QRect tmp = rect;
rect = QRect(tmp.y(), tmp.x(), tmp.height(), tmp.width());
@@ -2164,6 +2165,7 @@ void CarlaStyle::drawControl(ControlElement element, const QStyleOption *option,
x2 = y2;
y2 = temp;
}
#endif

painter->setRenderHint(QPainter::Antialiasing, true);
painter->translate(0.5, 0.5);


Loading…
Cancel
Save