MIDI Synth latent by a quarter note (SOLVED)

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];