My algoriothm for envelopes was off
for (auto i = 0; i < buffer.getNumSamples();i++) {
updateParameters();
for (const auto msg: midiMessages) {
if(msg.getMessage().getTimeStamp() <= i) {
if(msg.getMessage().isNoteOn()) {
m_sin[voice_count].noteOff();
voice_count = (voice_count+1)%2;
crossfade.setTargetValue(1.0);
m_sin[voice_count].setFrequencyEnd(msg.getMessage().getNoteNumber());
m_sin[voice_count].noteOn();
velocity = msg.getMessage().getVelocity()/127.0;
}else if (msg.getMessage().isNoteOff()) {
m_sin[voice_count].noteOff();
crossfade.setTargetValue(0);
}else if(msg.getMessage().isPitchWheel()) {
m_sin[voice_count].setFrequencyEndOffset(msg.getMessage().getPitchWheelValue());
}
}
}
double cf = 1-crossfade.getNextValue();
channelData1[i] = (m_sin[(voice_count
+1)%2].process()*cf+m_sin[voice_count].process())*velocity;
channelData2[i] = channelData1[i];
