Maybe I'm mis-understanding the NCO, but it seems like the phase should be maintained. I'm thinking of two arrays, such as the following (ultra-simplified) example:
// Phase: 0 45 90 135 180 225 270 315
byte arySineHigh[] = {127, 217, 255, 217, 127, 39, 0, 39} //full "volume"
byte arySineLow[] = {127, 198, 227, 198, 127, 56, 27, 56} //reduced "volume"
...
//TIMER1_OVF_vect
ISR(TIMER1_COMPA_vect) {
if (bToneHigh) {
analogWrite(PIN_AUDIO_OUT, arySineHigh[highByte(iTonePhase)]);
iTonePhase += TONE_HIGH_STEPS_PER_TICK;
} else {
analogWrite(PIN_AUDIO_OUT, arySineLow[highByte(iTonePhase)]);
iTonePhase += TONE_LOW_STEPS_PER_TICK;
}
}
Using this example, it just seems like there's going to be a pretty good bump when, say, we go from the Low Tone at 45 degrees (198) to the high tone at 90 degrees (255). Maybe I'm just over thinking the problem, but I'm a bit lost on how to even test this theory.