From 9c6493714db02b8a88793bbe56d95656222e7b72 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 27 May 2009 16:51:48 +0000 Subject: - replaced crack smoking while/-= statement with fmod() to ensure that the CPU doesn't get spiked when large values get sent to vbap's azimuth or elevation - added simple 5.1 example to the help patch - made the Max ifdef include the 3 argument vbap_new() function with 'spread' svn path=/trunk/externals/vbap/; revision=11531 --- vbap.c | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) (limited to 'vbap.c') diff --git a/vbap.c b/vbap.c index ef84219..7cf4a64 100644 --- a/vbap.c +++ b/vbap.c @@ -139,9 +139,9 @@ void vbap_ft4(t_vbap *x, double g) { x->x_gain = g; } /*--------------------------------------------------------------------------*/ // create new instance of object... -#ifdef PD static void *vbap_new(t_float azi, t_float ele, t_float spread) { +#ifdef PD t_vbap *x = (t_vbap *)newobject(vbap_class); floatinlet_new(&x->x_obj, &x->x_azi); @@ -153,8 +153,6 @@ static void *vbap_new(t_float azi, t_float ele, t_float spread) x->x_outlet2 = outlet_new(&x->x_obj, &s_float); x->x_outlet3 = outlet_new(&x->x_obj, &s_float); #else /* Max */ -void *vbap_new(float azi,float ele) -{ t_vbap *x = (t_vbap *)newobject(vbap_class); floatin(x,4); @@ -172,11 +170,11 @@ void *vbap_new(float azi,float ele) x->x_spread_base[0] = 0.0; x->x_spread_base[1] = 1.0; x->x_spread_base[2] = 0.0; - x->x_spread = spread; x->x_lsset_available =0; x->x_azi = azi; x->x_ele = ele; + x->x_spread = spread; return(x); /* return a reference to the object instance */ } @@ -240,17 +238,22 @@ static void vbap(float g[3], long ls[3], t_vbap *x) long neg_g_am, best_neg_g_am; // transfering the azimuth angle to a decent value - while(x->x_azi > 180.0) - x->x_azi -= 360.0; - while(x->x_azi < -179.0) - x->x_azi += 360.0; + if(x->x_azi > 360.0 || x->x_azi < -360.0) + x->x_azi = fmod(x->x_azi, 360.0); + if(x->x_azi > 180.0) + x->x_azi -= 360.0; + if(x->x_azi < -179.0) + x->x_azi += 360.0; + // transferring the elevation to a decent value if(dim == 3){ - while(x->x_ele > 180.0) - x->x_ele -= 360.0; - while(x->x_ele < -179.0) - x->x_ele += 360.0; + if(x->x_ele > 360.0 || x->x_ele < -360.0) + x->x_ele = fmod(x->x_ele, 360.0); + if(x->x_ele > 180.0) + x->x_ele -= 360.0; + if(x->x_ele < -179.0) + x->x_ele += 360.0; } else x->x_ele = 0.0; -- cgit v1.2.1