From c1419b43ea354fa04360450ae4f64612df065099 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Mon, 14 Nov 2005 21:59:09 +0000 Subject: these pragmas are only used for MSVC, not MinGW or Cygwin, therefore changing the define from NT to _MSC_VER svn path=/trunk/externals/ggee/; revision=3903 --- filters/lowshelf.c | 182 ++++++++++++++++++++++++++--------------------------- 1 file changed, 91 insertions(+), 91 deletions(-) (limited to 'filters/lowshelf.c') diff --git a/filters/lowshelf.c b/filters/lowshelf.c index dd925dc..946de89 100755 --- a/filters/lowshelf.c +++ b/filters/lowshelf.c @@ -1,91 +1,91 @@ -/* (C) Guenter Geiger */ - - -/* - - These filter coefficients computations are taken from - http://www.harmony-central.com/Computer/Programming/Audio-EQ-Cookbook.txt - - written by Robert Bristow-Johnson - -*/ - -#include -#ifdef NT -#pragma warning( disable : 4244 ) -#pragma warning( disable : 4305 ) -#endif -#include -#include "filters.h" - - - -/* ------------------- lowshelf ----------------------------*/ - -static t_class *lowshelf_class; - -void lowshelf_bang(t_rbjfilter *x) -{ - t_atom at[5]; - t_float omega = e_omega(x->x_freq,x->x_rate); - t_float A = e_A(x->x_gain); - t_float cs = cos(omega); - t_float sn = sin(omega); - t_float beta = e_beta(A,x->x_bw*0.01); - - t_float b0 = A*((A+1) - (A-1)*cs + beta*sn); - t_float b1 = 2.*A*((A-1) - (A+1)*cs); - t_float b2 = A*((A+1) - (A-1)*cs - beta*sn); - t_float a0 = ((A+1) + (A-1)*cs + beta*sn); - t_float a1 = -2.*((A-1) + (A+1)*cs); - t_float a2 = ((A+1) + (A-1)*cs - beta*sn); - -/* post("bang %f %f %f",x->x_freq, x->x_gain, x->x_bw); */ - - if (!check_stability(-a1/a0,-a2/a0,b0/a0,b1/a0,b2/a0)) { - post("lowshelf: filter unstable -> resetting"); - a0=1.;a1=0.;a2=0.; - b0=1.;b1=0.;b2=0.; - } - - SETFLOAT(at,-a1/a0); - SETFLOAT(at+1,-a2/a0); - SETFLOAT(at+2,b0/a0); - SETFLOAT(at+3,b1/a0); - SETFLOAT(at+4,b2/a0); - - outlet_list(x->x_obj.ob_outlet,&s_list,5,at); -} - - -void lowshelf_float(t_rbjfilter *x,t_floatarg f) -{ - x->x_freq = f; - lowshelf_bang(x); -} - - -static void *lowshelf_new(t_floatarg f,t_floatarg g,t_floatarg bw) -{ - t_rbjfilter *x = (t_rbjfilter *)pd_new(lowshelf_class); - - x->x_rate = 44100.0; - outlet_new(&x->x_obj,&s_float); - floatinlet_new(&x->x_obj, &x->x_gain); - floatinlet_new(&x->x_obj, &x->x_bw); - if (f > 0.) x->x_freq = f; - if (bw > 0.) x->x_bw = bw; - if (g != 0.) x->x_gain = g; - return (x); -} - - -void lowshelf_setup(void) -{ - lowshelf_class = class_new(gensym("lowshelf"), (t_newmethod)lowshelf_new, 0, - sizeof(t_rbjfilter), 0,A_DEFFLOAT,A_DEFFLOAT,A_DEFFLOAT,0); - class_addbang(lowshelf_class,lowshelf_bang); - class_addfloat(lowshelf_class,lowshelf_float); -} - - +/* (C) Guenter Geiger */ + + +/* + + These filter coefficients computations are taken from + http://www.harmony-central.com/Computer/Programming/Audio-EQ-Cookbook.txt + + written by Robert Bristow-Johnson + +*/ + +#include +#ifdef _MSC_VER +#pragma warning( disable : 4244 ) +#pragma warning( disable : 4305 ) +#endif +#include +#include "filters.h" + + + +/* ------------------- lowshelf ----------------------------*/ + +static t_class *lowshelf_class; + +void lowshelf_bang(t_rbjfilter *x) +{ + t_atom at[5]; + t_float omega = e_omega(x->x_freq,x->x_rate); + t_float A = e_A(x->x_gain); + t_float cs = cos(omega); + t_float sn = sin(omega); + t_float beta = e_beta(A,x->x_bw*0.01); + + t_float b0 = A*((A+1) - (A-1)*cs + beta*sn); + t_float b1 = 2.*A*((A-1) - (A+1)*cs); + t_float b2 = A*((A+1) - (A-1)*cs - beta*sn); + t_float a0 = ((A+1) + (A-1)*cs + beta*sn); + t_float a1 = -2.*((A-1) + (A+1)*cs); + t_float a2 = ((A+1) + (A-1)*cs - beta*sn); + +/* post("bang %f %f %f",x->x_freq, x->x_gain, x->x_bw); */ + + if (!check_stability(-a1/a0,-a2/a0,b0/a0,b1/a0,b2/a0)) { + post("lowshelf: filter unstable -> resetting"); + a0=1.;a1=0.;a2=0.; + b0=1.;b1=0.;b2=0.; + } + + SETFLOAT(at,-a1/a0); + SETFLOAT(at+1,-a2/a0); + SETFLOAT(at+2,b0/a0); + SETFLOAT(at+3,b1/a0); + SETFLOAT(at+4,b2/a0); + + outlet_list(x->x_obj.ob_outlet,&s_list,5,at); +} + + +void lowshelf_float(t_rbjfilter *x,t_floatarg f) +{ + x->x_freq = f; + lowshelf_bang(x); +} + + +static void *lowshelf_new(t_floatarg f,t_floatarg g,t_floatarg bw) +{ + t_rbjfilter *x = (t_rbjfilter *)pd_new(lowshelf_class); + + x->x_rate = 44100.0; + outlet_new(&x->x_obj,&s_float); + floatinlet_new(&x->x_obj, &x->x_gain); + floatinlet_new(&x->x_obj, &x->x_bw); + if (f > 0.) x->x_freq = f; + if (bw > 0.) x->x_bw = bw; + if (g != 0.) x->x_gain = g; + return (x); +} + + +void lowshelf_setup(void) +{ + lowshelf_class = class_new(gensym("lowshelf"), (t_newmethod)lowshelf_new, 0, + sizeof(t_rbjfilter), 0,A_DEFFLOAT,A_DEFFLOAT,A_DEFFLOAT,0); + class_addbang(lowshelf_class,lowshelf_bang); + class_addfloat(lowshelf_class,lowshelf_float); +} + + -- cgit v1.2.1