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