Tone library music mode/key explorer...

Here's a rough sketch for some thinking about envelopes; this would happen in the loop if I get a TRUE return on a given tone isPlaying()

    delta = (255/ attackLength[currentADSRfunction]);
    
    end_time1 = Lasttime[CurrentVoice] + attackLength[currentADSRfunction];
    
    while (millis() < end_time1)
{
    end_time2 = millis() + 1;
    while (millis() < end_time2) 
    ENVlevel[currentADSRfunction]; =  ENVlevel[currentADSRfunction] + delta;
}
    delta = (255 - sustainLevel[CurrentADSRfunction]/decayLength[currentADSRfunction]);
    end_time1 = millisec() + decayLength[currentADSRfunction];
    while (millis() < end_time1)
{
    end_time2 = millis() + 1;
    while (millis() < end_time2) 
    ENVlevel[currentADSRfunction]; =  ENVlevel[currentADSRfunction] - delta;
}
    
    end_time1 = millisec() + sustainLength[currentADSRfunction];
    while (millis() < end_time1)
{
    end_time2 = millis() + 1;
    while (millis() < end_time2) 
    ENVlevel[currentADSRfunction]; = sustainLevel[CurrentADSRfunction];
}

    delta = (sustainLevel[CurrentADSRfunction]/releaseLength[currentADSRfunction]);
    end_time1 = millisec() + releaseLength[currentADSRfunction];
    while (millis() < end_time1)
{
    end_time2 = millis() + 1;
    while (millis() < end_time2) 
    ENVlevel[currentADSRfunction]; =  ENVlevel[currentADSRfunction] - delta;
}