Arbitrary sample-rates for outputting a chiptune wavetable

Another update. I ended up spending most of today looking at various options (including non-Daisy ones) and found some alternatives if I want to jump ship, though I did take a another crack at it and came up with something like this:

// Callback to update the wave index when our timer expires
// which, in turn, changes the value that is output in the
// audioCallback. This also resets the timer to the current
// sample_rate which we update outside of this interrupt callback.
void waveStepCallback() {
  noInterrupts();
  wave_index++;
  if(wave_index > WAVE_SLOTS)
    wave_index = 0;
  waveTimer->setOverflow(sample_rate);     
  interrupts();
}

// Surely this won't work. Output the same value constantly
// as the waveStepCallback is what is actually changing the 
// value.
void audioCallback(float**  in, float** out, size_t size) {
  for(size_t i = 0; i < size; i++)
    out[0][i] = out[1][i] = scaled_wave[wave_index];  
}

void setup() { 
  // Wave Timer Init
  waveTimer = new HardwareTimer(WAVE_TIMER);
  waveTimer->setOverflow(sample_rate, HERTZ_FORMAT);
  waveTimer->attachInterrupt(waveStepCallback);
  waveTimer->resume();

  // Patch SM Init
  patchSM = DAISY.init(DAISY_PATCH_SM);
  DAISY.SetAudioSampleRate(SaiHandle::Config:: SampleRate::SAI_96KHZ);
  DAISY.SetAudioBlockSize(1);
  DAISY.StartAudio(audioCallback);

  // Placeholder so we have a wave to work with until we read it from EPROM
  // and add user updates and stuff
  scaleWave();
}

void loop() {
  // Read V/Oct and Tune knob and set sample_rate
  updatePitch();
  updateSampleRate();
}

That’s not the full program since I wanted to keep just show the relevant part of the question I’m about to ask:

Does the DAISY.StartAudio block? As in does it disable/enable interrupts before and after the callback or is that something I would need to do if I wanted that?

I’m hoping it does NOT since, if that’s the case, it means I can use my timer and the waveStepCallback to effectively control the pitch of the wavetable independently (by changing the speed the wavetable index is updated) and just shove the current value of the wavetable into the audio buffer as it changes.

I know this may cause aliasing and find it a bit less ideal than clocking the DSP directly (like I’m doing with the Teensy approach) But since there’s no way to do that with the audio DAC and this is for a lo-fi chiptune synth anyway, aliases are something I expect. But I don’t know if I’m in store for other potential downsides by basically having 2 interrupt handlers set to different timers.