VOsc morphs between two or more wavetables in adjacent buffers using a floating-point buffer index
VOsc is a multiple-wavetable oscillator. It expects buffers to be loaded into consecutive buffer numbers and takes a floating-point ‘bufpos’ argument: at integer values, it plays the wavetable at that index; at fractional values, it interpolates between adjacent wavetables. This enables smooth timbral morphing. Load all wavetables into consecutively numbered Buffers using Buffer.allocConsecutive or sequential Buffer.loadCollection calls. A Line or LFNoise UGen controlling bufpos creates automated timbre evolution. Index jumps produce audible clicks; smooth transitions require smooth bufpos control signals.
Examples
Buffer.loadCollection(s, ~wt0, action: { |b0| Buffer.loadCollection(s, ~wt1, action: { |b1| { VOsc.ar(b0.bufnum + LFSaw.kr(0.2).range(0,1), 220) * 0.2 ! 2 }.play }) });
Assessment
What argument of VOsc controls the blend between wavetables? What happens at integer vs fractional values of that argument?