Nice!  I like the generalization of delay interpolation while keeping
backward compatibility. I would only suggest a more foreground name for
fb_xxx, such as fb_comb_common, suggesting that it's a function shared by
the other feedback-comb variations, and that it's a "helper" function not
normally called by itself (no mem protection, e.g.).  Then I would also add

        fb_f4acomb(maxdel) = fb_comb_common(de.fdelay4a(maxdel)) : mem;

plus perhaps others, as people need them.
(I still follow the "define it when you really need it" rule myself.)

Cheers,
Julius

On Fri, Aug 18, 2023 at 2:13 AM Oleg Nesterov <o...@redhat.com> wrote:

> Hi Julius,
>
> On 08/17, Julius Smith wrote:
> >
> > Hi Oleg,
> >
> > This looks good to me. I believe I wrote the original fb_comb in
> > filter.lib, but I don't remember the extra output delay at all. If I did
> > it, my wild guess is that I was working from some old CCRMA documentation
> > for unit generators on the Samson Box that had the extra delay due to its
> > hardware constraints.  I do recall aiming to reproduce the main
> > reverberators in use at CCRMA back in the day.  I can also imagine it's
> to
> > ensure that the forward delay is at least one so that one can throw
> > feedback around fb_comb.   That seems reasonable for users who might get
> > into trouble otherwise.
>
> Thanks! I was afraid I missed some subtleties in this simple code ;)
>
> > While I am happy to adopt any equivalent rewrite, maybe it is too obvious
> > to mention that we should keep the extra delay (assuming it was
> introduced
> > long ago), simply to not break anything that depends on it.
>
> Sure, agreed.
>
> but again, even if we keep the extra delay we can rewrite fb_comb() as
>
>         fb_comb(maxdel,N,b0,aN) = + ~ -aN * de.delay(maxdel,N-1) : *(b0) :
> mem;
>
> to make it simpler, generate a better code, and avoid the extra fRec[2]
> delay line. Same for fb_fcomb().
>
> > We could use a
> > new name for your leaner version.
>
> Well... not sure the new helper makes sense, but may be something like
>
>         fb_xxx(dop,N,b0,aN) = + ~ -aN * dop(N-1) : *(b0);
>
> Then we can rewrite fb_comb/fb_fcomb as
>
>         fb_comb(maxdel) = fb_xxx(de.delay(maxdel)) : mem;
>         fb_fcomb(maxdel) = fb_xxx(de.fdelay(maxdel)) : mem;
>
> and I actually did this to use
>
>         fb_xxx(de.fdelay4a(maxdel))
>
> because delay/fdelay didn't work well for me.
>
> Oleg.
>
>

-- 
"Anything that can be automated should optionally be"
_______________________________________________
Faudiostream-users mailing list
Faudiostream-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/faudiostream-users

Reply via email to