Browse Source

More of the same

tags/1.9.4
falkTX 11 years ago
parent
commit
bbe2ddab22
3 changed files with 73 additions and 25 deletions
  1. +44
    -0
      source/backend/engine/CarlaEngineBridge.cpp
  2. +23
    -25
      source/backend/plugin/BridgePlugin.cpp
  3. +6
    -0
      source/utils/CarlaBridgeUtils.hpp

+ 44
- 0
source/backend/engine/CarlaEngineBridge.cpp View File

@@ -682,6 +682,50 @@ protected:
break;
}

case kPluginBridgeRtAllSoundOff: {
const uint32_t time(fShmRtControl.readUInt());

CARLA_SAFE_ASSERT_BREAK(pData->events.in != nullptr);

for (ushort i=0; i < kMaxEngineEventInternalCount; ++i)
{
EngineEvent& event(pData->events.in[i]);

if (event.type != kEngineEventTypeNull)
continue;

event.type = kEngineEventTypeControl;
event.time = time;
event.channel = 0;
event.ctrl.type = kEngineControlEventTypeAllSoundOff;
event.ctrl.param = 0;
event.ctrl.value = 0.0f;
break;
}
}

case kPluginBridgeRtAllNotesOff: {
const uint32_t time(fShmRtControl.readUInt());

CARLA_SAFE_ASSERT_BREAK(pData->events.in != nullptr);

for (ushort i=0; i < kMaxEngineEventInternalCount; ++i)
{
EngineEvent& event(pData->events.in[i]);

if (event.type != kEngineEventTypeNull)
continue;

event.type = kEngineEventTypeControl;
event.time = time;
event.channel = 0;
event.ctrl.type = kEngineControlEventTypeAllNotesOff;
event.ctrl.param = 0;
event.ctrl.value = 0.0f;
break;
}
}

case kPluginBridgeRtProcess: {
CARLA_SAFE_ASSERT_BREAK(fShmAudioPool.data != nullptr);



+ 23
- 25
source/backend/plugin/BridgePlugin.cpp View File

@@ -995,7 +995,11 @@ public:
value = std::rint(value);
}

setParameterValue(k, value, false, false, false);
fShmRtControl.writeOpcode(kPluginBridgeRtSetParameter);
fShmRtControl.writeInt(static_cast<int32_t>(k));
fShmRtControl.writeFloat(value);
fShmRtControl.commitWrite();

pData->postponeRtEvent(kPluginPostRtEventParameterChange, static_cast<int32_t>(k), 0, value);
break;
}
@@ -1035,7 +1039,11 @@ public:
if (pData->midiprog.data[k].bank == nextBankId && pData->midiprog.data[k].program == nextProgramId)
{
const int32_t index(static_cast<int32_t>(k));
setMidiProgram(index, false, false, false);

fShmRtControl.writeOpcode(kPluginBridgeRtSetMidiProgram);
fShmRtControl.writeInt(index);
fShmRtControl.commitWrite();

pData->postponeRtEvent(kPluginPostRtEventMidiProgramChange, index, 0, 0.0f);
break;
}
@@ -1050,7 +1058,9 @@ public:
case kEngineControlEventTypeAllSoundOff:
if (pData->options & PLUGIN_OPTION_SEND_ALL_SOUND_OFF)
{
// TODO
fShmRtControl.writeOpcode(kPluginBridgeRtAllSoundOff);
fShmRtControl.writeInt(static_cast<int32_t>(event.time));
fShmRtControl.commitWrite();
}
break;

@@ -1063,7 +1073,9 @@ public:
sendMidiAllNotesOffToCallback();
}

// TODO
fShmRtControl.writeOpcode(kPluginBridgeRtAllNotesOff);
fShmRtControl.writeInt(static_cast<int32_t>(event.time));
fShmRtControl.commitWrite();
}
break;
} // switch (ctrlEvent.type)
@@ -1092,18 +1104,16 @@ public:
if (status == MIDI_STATUS_PITCH_WHEEL_CONTROL && (pData->options & PLUGIN_OPTION_SEND_PITCHBEND) == 0)
continue;

{
fShmRtControl.writeOpcode(kPluginBridgeRtMidiEvent);
fShmRtControl.writeInt(static_cast<int32_t>(event.time));
fShmRtControl.writeInt(midiEvent.size);
fShmRtControl.writeOpcode(kPluginBridgeRtMidiEvent);
fShmRtControl.writeInt(static_cast<int32_t>(event.time));
fShmRtControl.writeInt(midiEvent.size);

fShmRtControl.writeByte(static_cast<uint8_t>(status + channel));
fShmRtControl.writeByte(static_cast<uint8_t>(status + channel));

for (uint8_t j=1; j < midiEvent.size; ++j)
fShmRtControl.writeByte(midiEvent.data[j]);
for (uint8_t j=1; j < midiEvent.size; ++j)
fShmRtControl.writeByte(midiEvent.data[j]);

fShmRtControl.commitWrite();
}
fShmRtControl.commitWrite();

if (status == MIDI_STATUS_NOTE_ON)
pData->postponeRtEvent(kPluginPostRtEventNoteOn, channel, midiEvent.data[1], midiEvent.data[2]);
@@ -1975,18 +1985,6 @@ public:
return false;
}

// ---------------------------------------------------------------
// set default options

pData->options = 0x0;
pData->options |= PLUGIN_OPTION_MAP_PROGRAM_CHANGES;
pData->options |= PLUGIN_OPTION_USE_CHUNKS;
pData->options |= PLUGIN_OPTION_SEND_CONTROL_CHANGES;
pData->options |= PLUGIN_OPTION_SEND_CHANNEL_PRESSURE;
pData->options |= PLUGIN_OPTION_SEND_NOTE_AFTERTOUCH;
pData->options |= PLUGIN_OPTION_SEND_PITCHBEND;
pData->options |= PLUGIN_OPTION_SEND_ALL_SOUND_OFF;

return true;
}



+ 6
- 0
source/utils/CarlaBridgeUtils.hpp View File

@@ -59,6 +59,8 @@ enum PluginBridgeRtOpcode {
kPluginBridgeRtSetProgram, // int
kPluginBridgeRtSetMidiProgram, // int
kPluginBridgeRtMidiEvent, // uint/frame, uint/size, char[]
kPluginBridgeRtAllSoundOff, // uint/frame
kPluginBridgeRtAllNotesOff, // uint/frame
kPluginBridgeRtProcess
};

@@ -207,6 +209,10 @@ const char* PluginBridgeRtOpcode2str(const PluginBridgeRtOpcode opcode) noexcept
return "kPluginBridgeRtSetMidiProgram";
case kPluginBridgeRtMidiEvent:
return "kPluginBridgeRtMidiEvent";
case kPluginBridgeRtAllSoundOff:
return "kPluginBridgeRtAllSoundOff";
case kPluginBridgeRtAllNotesOff:
return "kPluginBridgeRtAllNotesOff";
case kPluginBridgeRtProcess:
return "kPluginBridgeRtProcess";
}


Loading…
Cancel
Save