Hi, Volker!
I'm not sure if this is your issue here but some theory;
ChucK uses a "pull through" model to calculate samples. So; every time the DAC wants to output a sample the DAC asks (pulls) all Ugens connected to it to report a value and those in turn ask all their inputs for one before returning it (recursively). This works very well and guarantees a proper calculation order of samples (compare that to MAX which uses a left to right evaluation and PD which calculates modules in the order they are placed, I think).
All is well until we use feedback. If the DAC depends on a delay and that delay in turn depends on itself we would get stuck so there we stop and the sample used there is actually the *last* sample the delay calculated. This last sample is called the "Z-1" (two samples ago would be "Z-2", etc).
So; all feedback loops get a sample added to their length, which can and will affect tuning. Of course the higher the pitch the larger a samp as a fraction of the pitch will be and so the more detuned it will be. Fortunately this can be compensated for by subtracting a samp from the set delay time.
Again, not sure if this is your issue but I'm a bit short on time at the moment so I didn't run your code, it looks like it though. At least a little theory can't hurt. It's a well known issue in systems like ours, but at least thanks to having dur as a data type have plenty of tools to deal with it and it's much, much better then the kind of thing you would get if you tried the same in a system using block processing.
Hope that helps,
Yours,
Kas.
hi,
i was running some simple tests to hear the difference between
allpass vs linear interpolating delay lines when i noticed that there
is obviously a little bug in how the delay time is calculated in the
delay UGens from STK.
the following example feeds an impulse into a DelayA with high
feedback and compares the tuning to a TriOsc.
can't i trust my ears or is the tuning only correct if i add 1 to
deltime before calculating the frequency for TriOsc?
thanks,
volker.
Impulse imp => Gain out => dac;
out => DelayA delay => out;
TriOsc tri => dac; // test oscillator
44100.0 => float sr; // sampling rate
// delay time in samples
150.5 => float deltime;
deltime::samp => delay.delay;
// calc tri freq from delay time
// have to add 1 to deltime to get correct tuning
sr / (deltime) => tri.freq;
// set feedback level
0.999 => delay.gain;
0.3 => tri.gain;
while(true) {
1 => imp.next;
6::second => now;
}
_______________________________________________
chuck-users mailing list
chuck-users@lists.cs.princeton.edu
https://lists.cs.princeton.edu/mailman/listinfo/chuck-users