[LAD] Pluginization example?

Steve Harris steve at plugin.org.uk
Wed Aug 15 15:39:43 UTC 2007


Hi Juhana,

On 15 Aug 2007, at 15:43, Juhana Sadeharju wrote:
> 1. Denormalization. Feeding noise at the reverb input would
> save me trouble of finding all places where the problem
> occurs, but is this wise? How to generate the proper noise?

You don't have to use noise, you could use a fs/2 signal at very low  
amplitude, eg.

sig = 1e-30;
for (i in input)
    x[i] += sig;
    sig = -sig;

it's a little ugly, but works.

> 2. Effect modulation is done by two extra arrays at
>     effect_do( ..., mod1_array, mod2_array, ...)
> They should be filled with slowly varying sin() signals, but
> how to do it efficiently? I have used earlier the sin() call.

There's a trick to calculating sinus signals where you calculate the  
sin delta value for the starting point (once) and cross sum them to  
calculate the sine and cosine. Works fine as long as you don't need  
to change the frequency: (100 is the frequency of the LFO)

#include <math.h>
#include <stdio.h>

int main()
{
         float fs = 48000.0;
         float sinv = 1.0;
         float cosv = 0.0;
         float delta = 2.0 * sin(M_PI * 100.0 / fs);
         int i;

         for (i=0; i<1000; i++) {
                 sinv -= delta * cosv;
                 cosv += delta * sinv;
                 printf("%f\n", sinv);
         }
}

If you do you can just use a smallish table and interpolate it, or  
use an approximation function.

> 3. The audio is divided to blocks of N samples. Apparently
> I should interpolate the tweaked parameters over the N samples
> inside the reverb, or I should provide arrays for all parameters
> and leave the interpolation to the plugin wrapper.

It's probably easier to do it inside your code, some of them will not  
need interpolating and  for the ones that do linear is generally fine.

- Steve



More information about the Linux-audio-dev mailing list