[LAD] Prototyping algorithms and ideas

Yann Orlarey orlarey at free.fr
Tue Jan 29 22:36:30 UTC 2008


Hi Fons,

Here is a quick solution using Faust :

    import("filter.lib");

    line(i) =  vgroup("line %i", *(g) : fdelay2(1024, d))
        with { g = vslider("gain (dB)", -60, -60, 4, 0.1) : db2linear : 
smooth(0.995);
               d = nentry("delay (samp)", 0, 0, 1000, 0.1) : 
smooth(0.995);  };

    process = hgroup("", par(i, 10, line(i)) );

The first line imports a library of filters (written in Faust by Julius 
Smith) that includes several fractional delays based on Lagrange 
interpolation.

Then we define a 'line' that combines in sequence (':' operator) a gain 
and a fractional delay encapsulated in a vertical layout. Here we use 
fdelay2 a fractional delay with a second order Lagrange interpolation. 
It can be replaced by fdelay3 or fdelay4 if better interpolations are 
needed.

The gain value g is defined by a vertical slider (in dB) which is 
converted in a linear value and then filtered to avoid clicks during 
rapid movements. The delay value d is defined by a numerical entry box 
also filtered to avoid clicks. The parameter m is the maximum size of 
the delay and should be a power of 2.

The last line defines process, the equivalent of main in C, as a 
parallel composition of 10 lines.

A fully functional jack application can be easily generated using the 
faust2jack command or by pasting the above code in the online faust 
compiler (http://faust.grame.fr). The performances on my Vaio laptop 
(Intel Core 2 CPU  T7400  @ 2.16GHz) is approximately of 2%.

Cheers

Yann






Fons Adriaensen a écrit :
> On Fri, Jan 25, 2008 at 12:57:19PM -0500, Stephen Sinclair wrote:
>
>   
>>>> Also, nice in the fact that you can do per-sample computations easily,
>>>>         
>>> How ? I seem to have missed something...
>>>       
>> Because you can wait in a 1-sample loop?
>>
>> Yes, it will use your whole CPU for a loop like that, but this thread
>> is about prototyping.  Obviously you'd rewrite in C for a real
>> application.
>> I never claimed chuck is perfect, but I've been liking it a lot
>> lately.  Sure, it can have performance issues depending on how you use
>> it, but the nice thing is having the option to abuse it that way when
>> necessary.
>>     
>
> This is one of the things I wanted to create a 'rapid prototype'
> for recently. I needed a jack client implementing:
>
> - a delay line, 
> - allowing high-quality fractional-sample delays, 
> - at least 12 outputs, for each two controls: delay, gain,
> - smooth 'crossfading' between two control sets, both delay
>   and gain, controlled by a GUI or by OSC.
>
> It should not take more than 20% CPU on a 2G P4
> (other things have to run at the same time).
> If you know how to get this faster than by actually 
> writing it in C++, please let me know !
>
>
>   




More information about the Linux-audio-dev mailing list