Skip to content

Commit 78925e8

Browse files
committed
Fix MIDI timing issue
1 parent 4b0305a commit 78925e8

File tree

1 file changed

+18
-16
lines changed

1 file changed

+18
-16
lines changed

Source/PluginProcessor.cpp

+18-16
Original file line numberDiff line numberDiff line change
@@ -639,11 +639,6 @@ void PluginProcessor::processBlock(AudioBuffer<float>& buffer, MidiBuffer& midiB
639639
setThis();
640640
sendPlayhead();
641641

642-
midiDeviceManager.dequeueMidiInput(buffer.getNumSamples(), [this](int port, int blockSize, MidiBuffer& buffer) {
643-
midiInputHistory.addEvents(buffer, 0, blockSize, 0);
644-
sendMidiBuffer(port, buffer);
645-
});
646-
647642
for (int i = totalNumInputChannels; i < totalNumOutputChannels; ++i) {
648643
buffer.clear(i, 0, buffer.getNumSamples());
649644
}
@@ -742,14 +737,18 @@ void PluginProcessor::processConstant(dsp::AudioBlock<float> buffer)
742737
int numBlocks = buffer.getNumSamples() / pdBlockSize;
743738

744739
for (int block = 0; block < numBlocks; block++) {
745-
746740
if (producesMidi()) {
747741
midiByteIndex = 0;
748742
midiByteBuffer[0] = 0;
749743
midiByteBuffer[1] = 0;
750744
midiByteBuffer[2] = 0;
751745
}
752-
746+
747+
midiDeviceManager.dequeueMidiInput(pdBlockSize, [this](int port, int blockSize, MidiBuffer& buffer) {
748+
midiInputHistory.addEvents(buffer, 0, blockSize, 0);
749+
sendMidiBuffer(port, buffer);
750+
});
751+
753752
for (int ch = 0; ch < buffer.getNumChannels(); ch++) {
754753
// Copy the channel data into the vector
755754
juce::FloatVectorOperations::copy(
@@ -793,15 +792,26 @@ void PluginProcessor::processVariable(dsp::AudioBlock<float> buffer, MidiBuffer&
793792
audioAdvancement = 0; // Always has to be 0 if we use the AudioMidiFifo!
794793

795794
while (outputFifo->getNumSamplesAvailable() < buffer.getNumSamples()) {
796-
blockMidiBuffer.clear();
795+
if (producesMidi()) {
796+
midiByteIndex = 0;
797+
midiByteBuffer[0] = 0;
798+
midiByteBuffer[1] = 0;
799+
midiByteBuffer[2] = 0;
800+
}
797801

802+
blockMidiBuffer.clear();
798803
inputFifo->readAudioAndMidi(audioBufferIn, blockMidiBuffer);
799804

800805
if(!ProjectInfo::isStandalone)
801806
{
802807
sendMidiBuffer(1, blockMidiBuffer);
803808
}
804809

810+
midiDeviceManager.dequeueMidiInput(pdBlockSize, [this](int port, int blockSize, MidiBuffer& buffer) {
811+
midiInputHistory.addEvents(buffer, 0, blockSize, 0);
812+
sendMidiBuffer(port, buffer);
813+
});
814+
805815
for (int channel = 0; channel < audioBufferIn.getNumChannels(); channel++) {
806816
// Copy the channel data into the vector
807817
juce::FloatVectorOperations::copy(
@@ -810,13 +820,6 @@ void PluginProcessor::processVariable(dsp::AudioBlock<float> buffer, MidiBuffer&
810820
pdBlockSize);
811821
}
812822

813-
if (producesMidi()) {
814-
midiByteIndex = 0;
815-
midiByteBuffer[0] = 0;
816-
midiByteBuffer[1] = 0;
817-
midiByteBuffer[2] = 0;
818-
}
819-
820823
setThis();
821824

822825
sendMessagesFromQueue();
@@ -825,7 +828,6 @@ void PluginProcessor::processVariable(dsp::AudioBlock<float> buffer, MidiBuffer&
825828
// Process audio
826829
performDSP(audioVectorIn.data(), audioVectorOut.data());
827830

828-
829831
if (connectionListener && plugdata_debugging_enabled())
830832
connectionListener.load()->updateSignalData();
831833

0 commit comments

Comments
 (0)