Re: [LAU] [ANN] guitarix second release

From: hermann meyer <brummer-@web.de>
Date: Sun Nov 02 2008 - 19:34:50 EET

Am Sonntag, den 02.11.2008, 10:53 -0500 schrieb Darren Landrum:
> hermann meyer wrote:
> > download:
> > http://sourceforge.net/project/showfiles.php?group_id=236234&package_id=286951&release_id=637613
>
> Any chance we can see the Faust source code as well? That would be far
> more educational for the likes of, well, me. :-)
>
> -- Darren

Yes, surely

But it is not well sorted, I use it as playground so itsn't
chronologically.

regards hermann

declare name "guitarfx";
declare version "0.01";
declare author "brummer";
declare license "BSD";
declare copyright "(c)brummer 2008";

/*-----------------------------------------------
                 Vibrato Volume control in dB
  -----------------------------------------------*/

import("math.lib");
import("music.lib");
import("effect.lib");
import("filter.lib");

echo1 = hgroup("echo", +~(delay(131072, int(vslider("time", 0, 0, 2000, 1)*millisec)-1) * (vslider("release", 0, 0, 100, 0.1)/100.0)));

a = 0.12;
d = 0.1;

echo = _ ;

smoothi(c) = *(1-c) : +~*(c);
gain = vslider("gain", 0, -40, 40, 0.1) : db2linear : smoothi(0.999);
gain1 = vslider("gain", 0, -40, 40, 0.1) : db2linear : smoothi(0.999);

resonator(d,a) = (+ <: (delay(4096, d-1) + delay(4096, d))/2.0)~*(1.0-a) ;

mono2stereo = _ <: _,_;
mono2mono = _ <: _,_;
monomono = _ <: _,_;
monom = _ <: _,_;
mono2 = _ <: _,_;
mono2i = _ <: _,_;

/*-----------------------------------------------
                Balance control linear
  -----------------------------------------------*/

bal = hslider("balance", 0, -1, 1, 0.001);
balance = *(1-max(0,bal)), *(1-max(0,0-bal));

/*-----------------------------------------------
                      The tone control
   Low and high shelf filters, from Robert Bristow-Johnson's "Audio
   EQ Cookbook", see http://www.musicdsp.org/files/Audio-EQ-Cookbook.txt.
  -----------------------------------------------*/

/* Fixed bass and treble frequencies.*/
bass_freq = 300;
treble_freq = 1200;

filter(b0,b1,b2,a0,a1,a2) = f : (+ ~ g)
with {
        f(x) = (b0/a0)*x+(b1/a0)*x'+(b2/a0)*x'';
        g(y) = 0-(a1/a0)*y-(a2/a0)*y';
};

low_shelf(f0,g) = filter(b0,b1,b2,a0,a1,a2)
with {
        S = 1;
        A = pow(10,g/40);
        w0 = 2*PI*f0/SR;
        alpha = sin(w0)/2 * sqrt( (A + 1/A)*(1/S - 1) + 2 );

        b0 = A*( (A+1) - (A-1)*cos(w0) + 2*sqrt(A)*alpha );
        b1 = 2*A*( (A-1) - (A+1)*cos(w0) );
        b2 = A*( (A+1) - (A-1)*cos(w0) - 2*sqrt(A)*alpha );
        a0 = (A+1) + (A-1)*cos(w0) + 2*sqrt(A)*alpha;
        a1 = -2*( (A-1) + (A+1)*cos(w0) );
        a2 = (A+1) + (A-1)*cos(w0) - 2*sqrt(A)*alpha;
};

high_shelf(f0,g) = filter(b0,b1,b2,a0,a1,a2)
with {
        S = 1;
        A = pow(10,g/40);
        w0 = 2*PI*f0/SR;
        alpha = sin(w0)/2 * sqrt( (A + 1/A)*(1/S - 1) + 2 );

        b0 = A*( (A+1) + (A-1)*cos(w0) + 2*sqrt(A)*alpha );
        b1 = -2*A*( (A-1) + (A+1)*cos(w0) );
        b2 = A*( (A+1) + (A-1)*cos(w0) - 2*sqrt(A)*alpha );
        a0 = (A+1) - (A-1)*cos(w0) + 2*sqrt(A)*alpha;
        a1 = 2*( (A-1) - (A+1)*cos(w0) );
        a2 = (A+1) - (A-1)*cos(w0) - 2*sqrt(A)*alpha;
};
/*-----------------------------------------------
                freeverb by "Grame"
  -----------------------------------------------*/

// Filter Parameters

combtuningL1 = 1116;
combtuningL2 = 1188;
combtuningL3 = 1277;
combtuningL4 = 1356;
combtuningL5 = 1422;
combtuningL6 = 1491;
combtuningL7 = 1557;
combtuningL8 = 1617;

allpasstuningL1 = 556;
allpasstuningL2 = 441;
allpasstuningL3 = 341;
allpasstuningL4 = 225;

roomsizeSlider = vslider("RoomSize", 0.5, 0, 1, 0.025)*0.28 + 0.7;
combfeed = roomsizeSlider;

// Comb and Allpass filters

allpass(dt,fb) = (_,_ <: (*(fb):+:@(dt)), -) ~ _ : (!,_);
comb(dt, fb, damp) = (+:@(dt)) ~ (*(1-damp) : (+ ~ *(damp)) : *(fb));

// Reverb components

monoReverb(fb1, fb2, damp, spread)
        = _ <: comb(combtuningL1+spread, fb1, damp),
                        comb(combtuningL2+spread, fb1, damp),
                        comb(combtuningL3+spread, fb1, damp),
                        comb(combtuningL4+spread, fb1, damp),
                        comb(combtuningL5+spread, fb1, damp),
                        comb(combtuningL6+spread, fb1, damp),
                        comb(combtuningL7+spread, fb1, damp),
                        comb(combtuningL8+spread, fb1, damp)
                +>
                         allpass (allpasstuningL1+spread, fb2)
                : allpass (allpasstuningL2+spread, fb2)
                : allpass (allpasstuningL3+spread, fb2)
                : allpass (allpasstuningL4+spread, fb2)
                ;

//----------------------------------------------------------------

fxctrl(g,w,Fx) = _ <: (*(g),*(g) : Fx : *(w),*(w)), *(1-w), *(1-w) +> _;
freeverb = fxctrl(0.015, 0.5, monoReverb(combfeed, 0.5, 0.5, 23));

/*bandfilter = hgroup("Multi Band Filter",
                                                        seq( i, 10, vgroup(" %i", component("bandfilter.dsp").bandfilter(1000*(1+i))) )
                                                );*/

/*-----------------------------------------------
                boxes
  -----------------------------------------------*/

play = checkbox("play");
playit = _ : _';
playitnow = vgroup("play", *(playit, play));

switch = checkbox("on/off");
switch1 = checkbox("on/off");
dist = select2(switch, _, _);
verb = select2(switch1, _, _);
verb1 = select2(switch1, _, _);
verb2 = select2(switch1, _, _);
drivegain1 = vslider("gain", 0, 0, 10, 0.1)-10 : db2linear : smoothi(0.999);
drivegain = (-8.0) : db2linear : smoothi(0.999);
drive = vslider("drive", 0.64, 0, 1, 0.01);
distortion = cubicnl(drive,0.01);
showme = vgroup("distortion", (resonator(d,a) , (resonator(0.5,a): lowpass1(723.431) : highpass1(720.484) : speakerbp(130,5000) : distortion: *(drivegain, echo): speakerbp(130,5000))) : dist);
showme1 = vgroup("freeverb", monomono : _, freeverb : verb);
bass_gain = vslider("bass", 0, -20, 20, 0.1);
treble_gain = vslider("treble", 0, -20, 20, 0.1);
tone = hgroup("tone",low_shelf(bass_freq,bass_gain) : high_shelf(treble_freq,treble_gain));
vol = hgroup("in", *(gain, echo));
vol1 = hgroup("out", *(gain1, echo));

/* GUI Controls */
g1 = hslider("feedforward gain", 0, -1, 1, 0.01);
g2 = hslider("feedback gain", 0, -1, 1, 0.01);

feedbackco = firparto : + ~ feedbacko
with {
  firparto(x) = x + g1 * x''';
  feedbacko(v) = 0 - g2 * v'''';
};

  g3 = hslider("peak gain", 1, 0, 10, 0.2);
 fr = hslider("frequency (Hz)", 440, 20, 2200, 10);
feedbackcontroll = firpart : + ~ feedback
with {
  bw = 100; //fr = 440; //g = 1; // parameters - see caption
  SR = fconstant(int fSamplingFreq, <math.h>); // Faust fn
  pi = 4*atan(1.0); // circumference over diameter
  R = exp(0-pi*bw/SR); // pole radius [0 required]
  A = 2*pi*fr/SR; // pole angle (radians pole = 2)
  RR = R*R;
  firpart(x) = (x - x'') * g3 * ((1-RR)/2); // radius = 2
  // time-domain coefficients ASSUMING ONE PIPELINE DELAY:
  feedback(v) = 0 + 2*R*cos(A)*v - RR*v';
};
ir = hgroup("IR", (mono2i : _,feedbackcontroll:>_ ));
 ImpulseResponse = vgroup("IR", (mono2 : _,ir:>_ : verb2));

echo2 = vgroup("echo", (mono2stereo : _,echo1:>_ : dist));

wah = vslider("wah", 0, 0, 1, 0.01);
showme2 = vgroup("crybaby", monom : _, crybaby(wah) : verb1);

// preamp
k = 2*(0.05)/(1-0.05);
fee = (1+k)*(20)/(1+k*abs(20));
verb3 = select2(switch1, _, _);
pa = vgroup ("preamp",_<: _, *(fee): verb3);

/*-----------------------------------------------
                main process
  -----------------------------------------------*/

guitar = hgroup("controls", (playitnow : pa : _: vol : mono2mono : showme : tone : showme2 : showme1 : vol1 : echo2 ));
process = vgroup("monoamplifier", (guitar : ImpulseResponse : feedbackco: _<:_,_: balance));

_______________________________________________
Linux-audio-user mailing list
Linux-audio-user@email-addr-hidden
http://lists.linuxaudio.org/mailman/listinfo/linux-audio-user
Received on Sun Nov 2 20:15:02 2008

This archive was generated by hypermail 2.1.8 : Sun Nov 02 2008 - 20:15:02 EET