Fragments of Caitlin and Tron oboe were captured - because I had them on my iPad right next to me - upsampled 32x then auto-correlated to find extremely sub-sample accurate loop points, then resampled to become wavetables of 1024 samples in length, stored as shorts. This process is pretty automated now. At 1024 samples long the tables support frequencies down to 43Hz without stretching, and 8 progressively filtered octave tables are used for antialiasing letting me reach up to 5500Hz, higher than the fundamental on a piano can go I think.
During the inner loop 2 octaves of 1024 shorts from 2 wavetables form the working set, which is unfortunately 8kbytes / 2 pages of data, which may bust the data cache on really crappy hardware that has a 4k L1 and no L2 - not sure what the cache organization is on the Pi ... actually, it must be more than this or it just wouldn't run at better than a snail's pace. But I don't want to drop to 512-sized tables or things will get muddy and interpolated in the nice 'fattest string of a 4-string bass guitar' region where you want some top end to still be there.
This is effectively exploiting MIP-mapping in audio, but not the Lance Williams pyramidal thing, all tables are the same length as it makes the addressing easier / more efficient. The inter-level filtering is all done in the time domain, the pyramidal MIP levels (filtered down using a 'nicer than rectangular window' filter) form the skeletal sample framework upon which the full-length 1024 wavetable at each octave is regrown via a simple cubic interpolator / SRC thing. The strongest positive-moving zero transition is lined up at sample location zero, as I need to have zero be a reliably click-free point. Everything is implemented in integer / fixed-point for all sorts of sensible reasons.
It has to date only run on my Mac, but should synthesize PDQ on even very slow hardware, and the 4-wave morph will allow for some nice movement / evolution over time, particularly with A, B and C oscillators evolving or cycling at different rates, different feet.