I also tried to simplify things and just get each note press to play a chord …
Still can’t get any midi messages out the other side of the plugin 
void WaylochorderAudioProcessor::processBlock (AudioBuffer<float>& buffer, MidiBuffer& midiMessages)
{
ScopedNoDenormals noDenormals;
auto totalNumInputChannels = getTotalNumInputChannels();
auto totalNumOutputChannels = getTotalNumOutputChannels();
MidiMessage m;
using namespace std;
buffer.clear();
MidiBuffer processedMidi;
int time;
vector<int> chord { 60, 67 , 72 };
vector<MidiMessage> midiChord;
for (MidiBuffer::Iterator i (midiMessages); i.getNextEvent (m, time);)
{
if (m.isNoteOn())
{
for (int i = 0; i < 3; i++)
{
int NewNote = chord[i];
m = MidiMessage::noteOn(m.getChannel(), NewNote , m.getVelocity());
midiChord[i] = m;
}
}
if (m.isNoteOff())
{
for (int i = 0; i < 3; i++)
{
int NewNote = chord[i];
m = MidiMessage::noteOff(m.getChannel(), NewNote , m.getVelocity());
midiChord[i] = m;
}
}
for ( int i = 0; i < 3; i ++)
{
processedMidi.addEvent (midiChord[i], time);
}
}
midiMessages.swapWith (processedMidi);
This is even simpler but still no dice …
void WaylochorderAudioProcessor::processBlock (AudioBuffer<float>& buffer, MidiBuffer& midiMessages)
{
ScopedNoDenormals noDenormals;
auto totalNumInputChannels = getTotalNumInputChannels();
auto totalNumOutputChannels = getTotalNumOutputChannels();
MidiMessage m;
MidiMessage n;
using namespace std;
buffer.clear();
MidiBuffer processedMidi;
int time;
for (MidiBuffer::Iterator i (midiMessages); i.getNextEvent (m, time);)
{
if (m.isNoteOn())
{
m = MidiMessage::noteOn(m.getChannel(), 60 , m.getVelocity());
n = MidiMessage::noteOn(m.getChannel(), 72 , m.getVelocity());
}
if (m.isNoteOff())
{
for (int i = 0; i < 3; i++)
{
m = MidiMessage::noteOff(m.getChannel(), 60 , m.getVelocity());
n = MidiMessage::noteOn(m.getChannel(), 72 , m.getVelocity());
}
}
processedMidi.addEvent (m, time);
processedMidi.addEvent (n, time);
}
midiMessages.swapWith (processedMidi);
I don’t understand how to handle this :
i.getNextEvent (m, time)
processedMidi.addEvent (m, time);
I can see I am adding multiple events to a midi buffer at the same sample position ?
This didn’t help either !
void WaylochorderAudioProcessor::processBlock (AudioBuffer<float>& buffer, MidiBuffer& midiMessages)
{
auto startTime (Time::getMillisecondCounterHiRes() * 0.001);
ScopedNoDenormals noDenormals;
auto totalNumInputChannels = getTotalNumInputChannels();
auto totalNumOutputChannels = getTotalNumOutputChannels();
MidiMessage m;
MidiMessage n;
using namespace std;
buffer.clear();
MidiBuffer processedMidi;
int time;
for (MidiBuffer::Iterator i (midiMessages); i.getNextEvent (m, time);)
{
if (m.isNoteOn())
{
m = MidiMessage::noteOn(m.getChannel(), 60 , m.getVelocity());
m.setTimeStamp (Time::getMillisecondCounterHiRes() * 0.001 - startTime);
n = MidiMessage::noteOn(m.getChannel(), 72 , m.getVelocity());
n.setTimeStamp (Time::getMillisecondCounterHiRes() * 0.001 - startTime);
}
if (m.isNoteOff())
{
for (int i = 0; i < 3; i++)
{
m = MidiMessage::noteOff(m.getChannel(), 60 , m.getVelocity());
m.setTimeStamp (Time::getMillisecondCounterHiRes() * 0.001 - startTime);
n = MidiMessage::noteOn(m.getChannel(), 72 , m.getVelocity());
n.setTimeStamp (Time::getMillisecondCounterHiRes() * 0.001 - startTime);
}
}
auto timestamp = m.getTimeStamp();
auto sampleNumber = (int) (timestamp * 48000);
processedMidi.addEvent (m, sampleNumber);
timestamp = n.getTimeStamp();
sampleNumber = (int) (timestamp * 48000);
processedMidi.addEvent (n, sampleNumber);
}
midiMessages.swapWith (processedMidi);
Tried this too !
void WaylochorderAudioProcessor::processBlock (AudioBuffer<float>& buffer, MidiBuffer& midiMessages)
{
for (int i = getNumInputChannels(); i < getNumOutputChannels(); ++i)
{buffer.clear (i, 0, buffer.getNumSamples());}
MidiBuffer processedMidi;
int time;
MidiMessage m;
int chordLength = 3;
for(MidiBuffer::Iterator i (midiMessages); i.getNextEvent(m, time);)
{
if(m.isNoteOn()) {
for(int i = 0;i<chordLength;i++) {
int interval = 60 + i*12;
MidiMessage n = MidiMessage::noteOn(m.getChannel(), interval, m.getFloatVelocity());
processedMidi.addEvent(n, time);
}
}
else if(m.isNoteOff())
{
MidiMessage n = MidiMessage::allNotesOff(m.getChannel());
processedMidi.addEvent(n, time);
}
}
midiMessages.swapWith(processedMidi);
}
