Dear Dan,
WarpTable seems to have a issue where .lookup() doesn't behave like scanning
it with another UGen does for values slightly less than 1. I think the
scanning feature is wrong here, at least scanning doesn't behave according
to the docs.
Consider this example that uses WarpTable as a wave-shaper on a sine wave;
========================
SinOsc s => WarpTable wp => dac;
//some trickery to offset and scale the input
Step st => wp;
.50 => st.next;
//notice this line; .5 should be fine here yet isn't
//increasing this to .5 will cause artefacts
.4997 => s.gain;
//scale the range back and avoid DC offset
Step stInv => dac;
-.1 => stInv.next;
2 => wp.gain;
200 => s.freq;
//increase the second value for "drive"
//this is the bit that's actually useful and interesting here
//in this case we keep it linear to be able to hear the artefacts more
clearly.
wp.coefs([1., 1. ]);
minute => now;
=========================
Or; to demonstrate the exact same issue in it's most extreme case;
==============
Step s => WarpTable wp => dac;
//linear
wp.coefs( [1., 1. ] );
//UGen based index
1 => s.next;
//allow for the value to be updated
samp => now;
//both should be 1.000000
<<