Browse Source

Fix MIDI Output

Signed-off-by: falkTX <falktx@falktx.com>
tags/22.02
falkTX 3 years ago
parent
commit
ecc8b00a9f
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
1 changed files with 9 additions and 5 deletions
  1. +9
    -5
      plugins/Cardinal/src/HostMIDI.cpp

+ 9
- 5
plugins/Cardinal/src/HostMIDI.cpp View File

@@ -162,12 +162,13 @@ struct HostMIDI : Module {
heldNotes.clear();
}

void process(const ProcessArgs& args, std::vector<rack::engine::Output>& outputs)
bool process(const ProcessArgs& args, std::vector<rack::engine::Output>& outputs)
{
// Cardinal specific
const int64_t blockFrame = pcontext->engine->getBlockFrame();
const bool blockFrameChanged = lastBlockFrame != blockFrame;

if (lastBlockFrame != blockFrame)
if (blockFrameChanged)
{
lastBlockFrame = blockFrame;

@@ -261,6 +262,8 @@ struct HostMIDI : Module {
outputs[START_OUTPUT].setVoltage(startPulse.process(args.sampleTime) ? 10.f : 0.f);
outputs[STOP_OUTPUT].setVoltage(stopPulse.process(args.sampleTime) ? 10.f : 0.f);
outputs[CONTINUE_OUTPUT].setVoltage(continuePulse.process(args.sampleTime) ? 10.f : 0.f);

return blockFrameChanged;
}

void processMessage(const midi::Message& msg) {
@@ -554,7 +557,10 @@ struct HostMIDI : Module {

void process(const ProcessArgs& args) override
{
midiInput.process(args, outputs);
if (midiInput.process(args, outputs))
midiOutput.frame = 0;
else
++midiOutput.frame;

// MIDI baud rate is 31250 b/s, or 3125 B/s.
// CC messages are 3 bytes, so we can send a maximum of 1041 CC messages per second.
@@ -564,8 +570,6 @@ struct HostMIDI : Module {
if (rateLimiterTriggered)
midiOutput.rateLimiterTimer.time -= rateLimiterPeriod;

midiOutput.setFrame(args.frame);

for (int c = 0; c < inputs[PITCH_INPUT].getChannels(); c++) {
int vel = (int) std::round(inputs[VELOCITY_INPUT].getNormalPolyVoltage(10.f * 100 / 127, c) / 10.f * 127);
vel = clamp(vel, 0, 127);


Loading…
Cancel
Save