X-Git-Url: https://scm.cri.ensmp.fr/git/Faustine.git/blobdiff_plain/c7f552fd8888da2f0d8cfb228fe0f28d3df3a12c..b4b6f2ea75b9f0f3ca918f5b84016610bf7a4d4f:/interpretor/faust-0.9.47mr3/architecture/maxmsp.lib diff --git a/interpretor/faust-0.9.47mr3/architecture/maxmsp.lib b/interpretor/faust-0.9.47mr3/architecture/maxmsp.lib deleted file mode 100644 index 27b2e92..0000000 --- a/interpretor/faust-0.9.47mr3/architecture/maxmsp.lib +++ /dev/null @@ -1,226 +0,0 @@ -/************************************************************************ - ************************************************************************ - FAUST library file - Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale - --------------------------------------------------------------------- - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. - ************************************************************************ - ************************************************************************/ - -declare name "MaxMSP compatibility Library"; -declare author "GRAME"; -declare copyright "GRAME"; -declare version "1.0"; -declare license "LGPL"; - -import("music.lib"); - - -atodb = db2lin; - -//------------------------------------------------------------------------- -// -// Implementation of MaxMSP filtercoeff -// -// from : Cookbook formulae for audio EQ biquad filter coefficients -// by : Robert Bristow-Johnson -// URL : http://www.musicdsp.org/files/Audio-EQ-Cookbook.txt -// -//------------------------------------------------------------------------- - -filtercoeff(f0, dBgain, Q) = environment -{ - //---------------------------------------- - // biquad coeffs for various filters - // usage : filtercoeff(f0, dBgain, Q).LPF - //---------------------------------------- - - LPF = rbjcoef( a0, a1, a2, b0, b1, b2 ) - with { - b0 = (1 - cos(w0))/2; - b1 = 1 - cos(w0); - b2 = (1 - cos(w0))/2; - a0 = 1 + alpha; - a1 = -2*cos(w0); - a2 = 1 - alpha; - }; - - HPF = rbjcoef( a0, a1, a2, b0, b1, b2 ) - with { - b0 = (1 + cos(w0))/2; - b1 = -1 - cos(w0); - b2 = (1 + cos(w0))/2; - a0 = 1 + alpha; - a1 = -2*cos(w0); - a2 = 1 - alpha; - }; - - BPF = rbjcoef( a0, a1, a2, b0, b1, b2 ) // constant 0 dB peak gain - with { - b0 = alpha; - b1 = 0; - b2 = -alpha; - a0 = 1 + alpha; - a1 = -2*cos(w0); - a2 = 1 - alpha; - }; - - notch = rbjcoef( a0, a1, a2, b0, b1, b2 ) - with { - b0 = 1; - b1 = -2*cos(w0); - b2 = 1; - a0 = 1 + alpha; - a1 = -2*cos(w0); - a2 = 1 - alpha; - }; - - APF = rbjcoef( a0, a1, a2, b0, b1, b2 ) - with { - b0 = 1 - alpha; - b1 = -2*cos(w0); - b2 = 1 + alpha; - a0 = 1 + alpha; - a1 = -2*cos(w0); - a2 = 1 - alpha; - }; - - peakingEQ = rbjcoef( a0, a1, a2, b0, b1, b2 ) - with { - b0 = 1 + alpha*A; - b1 = -2*cos(w0); - b2 = 1 - alpha*A; - a0 = 1 + alpha/A; - a1 = -2*cos(w0); - a2 = 1 - alpha/A; - }; - - peakNotch = rbjcoef( a0, a1, a2, b0, b1, b2 ) - with { - b0 = 1 + alpha*G; - b1 = -2*cos(w0); - b2 = 1 - alpha*G; - a0 = 1 + alpha/G; - a1 = -2*cos(w0); - a2 = 1 - alpha/G; - }; - - lowShelf = rbjcoef( a0, a1, a2, b0, b1, b2 ) - with { - 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; - }; - - highShelf = rbjcoef( a0, a1, a2, b0, b1, b2 ) - with { - 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; - }; - - // --------------------- implementation ------------------------------ - - // convert rbj coeffs to biquad coeffs - rbjcoef(a0,a1,a2,b0,b1,b2) = (b0/a0, b1/a0, b2/a0,-a1/a0,-a2/a0); - - // common values -// alpha = sin(w0)/(2*Q); -// w0 = 2*PI*f0/Fs; - alpha = sin(w0)/(2*max(0.001,Q)); - w0 = 2*PI*max(0,f0)/Fs; - Fs = SR; - A = 10^(dBgain/40); // (for peaking and shelving EQ filters only) - G = sqrt(max(0.00001, dBgain)); // When gain is a linear values (i.e. not in dB) -}; - - -//------------------------------------------------------------------------- -// Implementation of MaxMSP biquad~ -// y[n] = a0 * x[n] + a1 * x[n-1] + a2 * x[n-2] + b1 * y[n-1] + b2 * y[n-2] -//------------------------------------------------------------------------- - -biquad(x,a0,a1,a2,b1,b2) = x : conv3(a0, a1, a2) : + ~ conv2(b1, b2) - with { - conv2(c0,c1,x) = c0*x+c1*x'; - conv3(c0,c1,c2,x) = c0*x+c1*x'+c2*x''; - }; - - -//------------------------------------------------------------------------- -// -// Filters using filtercoeff and biquad -// -//------------------------------------------------------------------------- - - -// Low Pass Filter -LPF(x, f0, gain, Q) = x , filtercoeff(f0,gain,Q).LPF : biquad; - -// High Pass Filter -HPF(x, f0, gain, Q) = x , filtercoeff(f0,gain,Q).HPF : biquad; - -// Band Pass Filter -BPF(x, f0, gain, Q) = x , filtercoeff(f0,gain,Q).BPF : biquad; - -// notch Filter -notch(x, f0, gain, Q) = x , filtercoeff(f0,gain,Q).notch : biquad; - -// All Pass Filter -APF(x, f0, gain, Q) = x , filtercoeff(f0,gain,Q).APF : biquad; - -// ???? -peakingEQ(x, f0, gain, Q) = x , filtercoeff(f0,gain,Q).peakingEQ : biquad; - -// Max peakNotch is like peakingEQ but with a linear gain -peakNotch(x, f0, gain, Q) = x , filtercoeff(f0,gain,Q).peakNotch : biquad; - -// ???? -lowShelf(x, f0, gain, Q) = x , filtercoeff(f0,gain,Q).lowShelf : biquad; - -// ???? -highShelf(x, f0, gain, Q) = x , filtercoeff(f0,gain,Q).highShelf : biquad; - - - - -//------------------------------------------------------------------------- -// Implementation of Max/MSP line~. Generate signal ramp or envelope -// -// USAGE : line(value, time) -// value : the desired output value -// time : the interpolation time to reach this value (in milliseconds) -// -// NOTE : the interpolation process is restarted every time the desired -// output value changes. The interpolation time is sampled only then. -//------------------------------------------------------------------------- - -line (value, time) = state ~ ( _ , _ ) : ! , _ - with { - state (t , c) = nt , if( nt <= 0 , value , c + (value - c) / nt) - with { - nt = if( value != value' , samples, t - 1) ; - samples = time * SR / 1000.0 ; - } ; - } ; - -