[sdiy] help understanding circular buffers for delay line
Andrew Simper
andy at cytomic.com
Sat Mar 3 05:22:42 CET 2012
On 3 March 2012 11:07, dan snazelle <subjectivity at hotmail.com> wrote:
>
> If you are using a power of 2 buffer length then just use an "&" of
> the length - 1 for starters as this will be much easier to code, worry
> about optimisation later:
>
> buffer [index & (length - 1)]
>
> so for a fixed integer sample delay you would have:
>
> inpos = (inpos + 1) & (length - 1);
> buffer [inpos] = input;
> output = buffer [(inpos - delay) & ( length - 1)];
>
> and make sure delay is less than length - 1
>
> Andy
>
> Ok
>
> i just got some time to really study this Andy and I have some questions
> (surprise)
>
>
> define length 8000
> byte buffer [length]
>
>
> what is the inpos? is that the same as using a for loop with an i as in
> matthews example?
>
> and what is delay...is that the J for loop as in matthews example? or is
> that a delaytime pot?
>
> thanks for your help
>
I'm not sure which number field you are on that 8000 is a power of 2,
but back in regular flat number land you would need 8192 = 2^13, or
any other power of 2, depending on how long you want the delay and
your sample rate.
inpos is the input index position (write head)
delay is the number of samples delay, which you subtract from the
inpos (with wrap) as the read head
Per sample you need write one sample and read another for output.
Don't modulate the delay at all and everything will work out really
nice. If you want to modulate the delay head then things get way more
complicated to get something that sounds good and is efficient to run.
Andy
More information about the Synth-diy
mailing list