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.

On 29/02/2008, volker böhm <vboehm@gmx.ch> wrote:
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