[PD-cvs] externals/iem/iem_ambi/src makefile_linux, NONE, 1.1 ambi_decode.c, 1.2, 1.3 ambi_decode2.c, 1.2, 1.3 ambi_decode3.c, 1.2, 1.3 ambi_decode_cube.c, 1.2, 1.3 ambi_encode.c, 1.2, 1.3 ambi_rot.c, 1.2, 1.3 iem_ambi.c, 1.4, 1.5 iemlib.h, 1.1, 1.2 makefile, 1.2, 1.3

musil tmusil at users.sourceforge.net
Fri Nov 10 15:31:47 CET 2006


Update of /cvsroot/pure-data/externals/iem/iem_ambi/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6328/iem/iem_ambi/src

Modified Files:
	ambi_decode.c ambi_decode2.c ambi_decode3.c ambi_decode_cube.c 
	ambi_encode.c ambi_rot.c iem_ambi.c iemlib.h makefile 
Added Files:
	makefile_linux 
Log Message:
makefile fno-strict-aliasing bug
float to t_float

Index: iem_ambi.c
===================================================================
RCS file: /cvsroot/pure-data/externals/iem/iem_ambi/src/iem_ambi.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** iem_ambi.c	10 Mar 2006 01:41:32 -0000	1.4
--- iem_ambi.c	10 Nov 2006 14:31:45 -0000	1.5
***************
*** 4,13 ****
  iem_ambi written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2005 */
  
- #ifdef NT
- #pragma warning( disable : 4244 )
- #pragma warning( disable : 4305 )
- #endif
- 
- 
  #include "m_pd.h"
  #include "iemlib.h"
--- 4,7 ----

Index: ambi_decode3.c
===================================================================
RCS file: /cvsroot/pure-data/externals/iem/iem_ambi/src/ambi_decode3.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** ambi_decode3.c	10 Mar 2006 01:59:44 -0000	1.2
--- ambi_decode3.c	10 Nov 2006 14:31:45 -0000	1.3
***************
*** 4,36 ****
  iem_ambi written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2005 */
  
- #ifdef NT
- #pragma warning( disable : 4244 )
- #pragma warning( disable : 4305 )
- #endif
- 
- 
  #include "m_pd.h"
  #include "iemlib.h"
  #include "iem_ambi.h"
  #include <math.h>
- #include <stdio.h>
- #include <string.h>
- 
  
  
  /* -------------------------- ambi_decode3 ------------------------------ */
  /*
!  ** berechnet ein reduziertes Ambisonic-Decoder-Set in die HRTF-Spektren **
!  ** Inputs: ls + Liste von 3 floats: Index [1 .. 25] + Elevation [-90 .. +90 degree] + Azimut [0 .. 360 degree] **
!  ** Inputs: calc_inv **
!  ** Inputs: load_HRIR + float index1..25 **
!  ** Outputs: List of 2 symbols: left-HRIR-File-name + HRIR-table-name **
!  ** Inputs: calc_reduced **
!  ** "output" ...  writes the HRTF into tables **
!  **  **
!  **  **
!  ** setzt voraus , dass die HRIR-tabele-names von LS1_L_HRIR .. LS25_L_HRIR heissen und existieren **
!  ** setzt voraus , dass die HRTF-tabele-names von LS1_HRTF_re .. LS25_HRTF_re heissen und existieren **
!  ** setzt voraus , dass die HRTF-tabele-names von LS1_HRTF_im .. LS25_HRTF_im heissen und existieren **
   */
  
--- 4,16 ----
  iem_ambi written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2005 */
  
  #include "m_pd.h"
  #include "iemlib.h"
  #include "iem_ambi.h"
  #include <math.h>
  
  
  /* -------------------------- ambi_decode3 ------------------------------ */
  /*
!  
   */
  
***************
*** 327,331 ****
  	for(i=0; i<n; i++)
  	{
! 		SETFLOAT(at, (float)(*dv1));
  		dv1++;
  		at++;
--- 307,311 ----
  	for(i=0; i<n; i++)
  	{
! 		SETFLOAT(at, (t_float)(*dv1));
  		dv1++;
  		at++;
***************
*** 339,343 ****
  	int pht_index, real_index;
  	double mw;
! 	float dat1;
  	double *dv2=x->x_prod;
  
--- 319,323 ----
  	int pht_index, real_index;
  	double mw;
! 	t_float dat1;
  	double *dv2=x->x_prod;
  
***************
*** 365,369 ****
  	{
  		dat1 = atom_getfloat(at);
! 		SETFLOAT(at, dat1 + (float)(*dv2*mw));
  		dv2++;
  		at++;
--- 345,349 ----
  	{
  		dat1 = atom_getfloat(at);
! 		SETFLOAT(at, dat1 + (t_float)(*dv2*mw));
  		dv2++;
  		at++;
***************
*** 731,736 ****
  		x->x_s_matrix = gensym("matrix");
  		/*change*/
! 		SETFLOAT(x->x_at, (float)x->x_n_real_ls);
! 		SETFLOAT(x->x_at+1, (float)x->x_n_ambi);
  
  		x->x_sqrt3				= sqrt(3.0);
--- 711,716 ----
  		x->x_s_matrix = gensym("matrix");
  		/*change*/
! 		SETFLOAT(x->x_at, (t_float)x->x_n_real_ls);
! 		SETFLOAT(x->x_at+1, (t_float)x->x_n_ambi);
  
  		x->x_sqrt3				= sqrt(3.0);

--- NEW FILE: makefile_linux ---
current: all

.SUFFIXES: .pd_linux

INCLUDE = -I. -I/usr/local/src/pd/src

LDFLAGS = -export-dynamic -shared
LIB = -ldl -lm -lpthread

#select either the DBG and OPT compiler flags below:

CFLAGS = -DPD -DUNIX -W -Werror -Wno-unused \
	-Wno-parentheses -Wno-switch -O6 -funroll-loops -fomit-frame-pointer -fno-strict-aliasing \
        -DDL_OPEN

SYSTEM = $(shell uname -m)

# the sources

SRC = ambi_decode.c \
	ambi_decode2.c \
	ambi_decode3.c \
	ambi_decode_cube.c \
	ambi_encode.c \
	ambi_rot.c \
	iem_ambi.c

TARGET = iem_ambi.pd_linux


OBJ = $(SRC:.c=.o) 

#
#  ------------------ targets ------------------------------------
#

clean:
	rm $(TARGET)
	rm *.o

all: $(OBJ)
	@echo :: $(OBJ)
	$(LD) $(LDFLAGS) -o $(TARGET) *.o $(LIB)
	strip --strip-unneeded $(TARGET)

$(OBJ) : %.o : %.c
	$(CC) $(CFLAGS) $(INCLUDE) -c -o $*.o $*.c





Index: makefile
===================================================================
RCS file: /cvsroot/pure-data/externals/iem/iem_ambi/src/makefile,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** makefile	10 Mar 2006 12:17:20 -0000	1.2
--- makefile	10 Nov 2006 14:31:45 -0000	1.3
***************
*** 11,15 ****
  
  CFLAGS = -DPD -DUNIX -W -Werror -Wno-unused \
! 	-Wno-parentheses -Wno-switch -O6 -funroll-loops -fomit-frame-pointer \
          -DDL_OPEN
  
--- 11,15 ----
  
  CFLAGS = -DPD -DUNIX -W -Werror -Wno-unused \
! 	-Wno-parentheses -Wno-switch -O6 -funroll-loops -fomit-frame-pointer -fno-strict-aliasing \
          -DDL_OPEN
  

Index: ambi_rot.c
===================================================================
RCS file: /cvsroot/pure-data/externals/iem/iem_ambi/src/ambi_rot.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** ambi_rot.c	10 Mar 2006 01:59:44 -0000	1.2
--- ambi_rot.c	10 Nov 2006 14:31:45 -0000	1.3
***************
*** 4,20 ****
  iem_ambi written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2005 */
  
- #ifdef NT
- #pragma warning( disable : 4244 )
- #pragma warning( disable : 4305 )
- #endif
- 
- 
  #include "m_pd.h"
  #include "iemlib.h"
[...3016 lines suppressed...]
!   x->x_sqrt10_4   = (t_float)(sqrt(10.0) / 4.0);
!   x->x_sqrt14_16  = (t_float)(sqrt(14.0) / 16.0);
!   x->x_sqrt15_8   = (t_float)(sqrt(15.0) / 8.0);
!   x->x_sqrt35_64  = (t_float)(sqrt(35.0) / 64.0);
!   x->x_sqrt70_32  = (t_float)(sqrt(70.0) / 32.0);
!   
!   x->x_pi_over_180  = (t_float)(4.0 * atan(1.0) / 180.0);
!   
!   x->x_s_matrix = gensym("matrix");
!   return (x);
  }
  
  void ambi_rot_setup(void)
  {
!   ambi_rot_class = class_new(gensym("ambi_rot"), (t_newmethod)ambi_rot_new, (t_method)ambi_rot_free,
!     sizeof(t_ambi_rot), 0, A_DEFFLOAT, 0);
!   class_addfloat(ambi_rot_class, (t_method)ambi_rot_float);
!   class_addlist(ambi_rot_class, (t_method)ambi_rot_list);
!   class_sethelpsymbol(ambi_rot_class, gensym("iemhelp2/ambi_rot-help"));
  }

Index: ambi_decode2.c
===================================================================
RCS file: /cvsroot/pure-data/externals/iem/iem_ambi/src/ambi_decode2.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** ambi_decode2.c	10 Mar 2006 01:59:44 -0000	1.2
--- ambi_decode2.c	10 Nov 2006 14:31:45 -0000	1.3
***************
*** 4,20 ****
  iem_ambi written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2005 */
  
- #ifdef NT
- #pragma warning( disable : 4244 )
- #pragma warning( disable : 4305 )
- #endif
- 
- 
  #include "m_pd.h"
  #include "iemlib.h"
  #include "iem_ambi.h"
  #include <math.h>
- #include <stdio.h>
- #include <string.h>
- 
  
  
--- 4,11 ----
***************
*** 332,336 ****
  	for(i=0; i<n; i++)
  	{
! 		SETFLOAT(at, (float)(*dv1));
  		dv1++;
  		at++;
--- 323,327 ----
  	for(i=0; i<n; i++)
  	{
! 		SETFLOAT(at, (t_float)(*dv1));
  		dv1++;
  		at++;
***************
*** 342,346 ****
  	for(i=0; i<n; i++)
  	{
! 		SETFLOAT(at, (float)(*dv1 + *dv2*mw));
  		dv1++;
  		dv2++;
--- 333,337 ----
  	for(i=0; i<n; i++)
  	{
! 		SETFLOAT(at, (t_float)(*dv1 + *dv2*mw));
  		dv1++;
  		dv2++;
***************
*** 781,786 ****
  		x->x_s_matrix = gensym("matrix");
  		/*change*/
! 		SETFLOAT(x->x_at, (float)(x->x_n_ls+x->x_n_mir_ls));
! 		SETFLOAT(x->x_at+1, (float)x->x_n_ambi);
  		x->x_mirror_weight = 0.0;
  
--- 772,777 ----
  		x->x_s_matrix = gensym("matrix");
  		/*change*/
! 		SETFLOAT(x->x_at, (t_float)(x->x_n_ls+x->x_n_mir_ls));
! 		SETFLOAT(x->x_at+1, (t_float)x->x_n_ambi);
  		x->x_mirror_weight = 0.0;
  

Index: ambi_encode.c
===================================================================
RCS file: /cvsroot/pure-data/externals/iem/iem_ambi/src/ambi_encode.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** ambi_encode.c	10 Mar 2006 01:59:44 -0000	1.2
--- ambi_encode.c	10 Nov 2006 14:31:45 -0000	1.3
***************
*** 4,18 ****
  iem_ambi written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2005 */
  
- #ifdef NT
- #pragma warning( disable : 4244 )
- #pragma warning( disable : 4305 )
- #endif
- 
- 
  #include "m_pd.h"
  #include "iemlib.h"
  #include <math.h>
- #include <stdio.h>
- #include <string.h>
  
  /* -------------------------- ambi_encode ------------------------------ */
--- 4,10 ----
***************
*** 20,42 ****
  typedef struct _ambi_encode
  {
! 	t_object	x_obj;
! 	t_atom		*x_at;
! 	int				x_size;
! 	int				x_size2d;
! 	int				x_size3d;
! 	float			x_sqrt3;
! 	float			x_sqrt10_4;
! 	float			x_sqrt15;
! 	float			x_sqrt6_4;
! 	float			x_sqrt35_2;
! 	float			x_sqrt70_4;
! 	float			x_sqrt5_2;
! 	float			x_sqrt126_16;
! 	float			x_sqrt315_2;
! 	float			x_sqrt105_2;
! 	float			x_pi_over_180;
! 	float			*x_ambi_order_weight;
! 	int				x_colrow;
! 	int				x_n_order;
  } t_ambi_encode;
  
--- 12,34 ----
  typedef struct _ambi_encode
  {
!   t_object  x_obj;
!   t_atom    *x_at;
!   int       x_size;
!   int       x_size2d;
!   int       x_size3d;
!   t_float   x_sqrt3;
!   t_float   x_sqrt10_4;
!   t_float   x_sqrt15;
!   t_float   x_sqrt6_4;
!   t_float   x_sqrt35_2;
!   t_float   x_sqrt70_4;
!   t_float   x_sqrt5_2;
!   t_float   x_sqrt126_16;
!   t_float   x_sqrt315_2;
!   t_float   x_sqrt105_2;
!   t_float   x_pi_over_180;
!   t_float   *x_ambi_order_weight;
!   int       x_colrow;
!   int       x_n_order;
  } t_ambi_encode;
  
***************
*** 45,433 ****
  static void ambi_encode_ambi_weight(t_ambi_encode *x, t_symbol *s, int argc, t_atom *argv)
  {
! 	if(argc > x->x_n_order)
! 	{
! 		int i, n=x->x_n_order;
! 
! 		for(i=0; i<=n; i++)
! 		{
! 			x->x_ambi_order_weight[i] = atom_getfloat(argv++);
! 		}
! 	}
! 	else
! 		post("ambi_encode-ERROR: ambi_weight needs %d float weights", x->x_n_order+1);
  }
  
  static void ambi_encode_do_2d(t_ambi_encode *x, t_floatarg phi)
  {
! 	float c, s, cc, ss, c2, s2, c3, s3, s4, c4, s5, c5, s6, c6;
! 	float *awght = x->x_ambi_order_weight;
! 	t_atom *at=x->x_at;
! 	
! 	phi *= x->x_pi_over_180;
! 	c = cos(phi);
! 	s = sin(phi);
! 	cc = c*c;
! 	ss = s*s;
! 
! 	SETFLOAT(at, (float)x->x_colrow);
! 	at++;
! 
! 	SETFLOAT(at, awght[0]);
! 	at++;
! 
! 	SETFLOAT(at, c*awght[1]);
! 	at++;
! 	SETFLOAT(at, s*awght[1]);
! 	at++;
! 
! 	if(x->x_n_order >= 2)
! 	{
! 		c2 = cc - ss;
! 		s2 = 2.0f*s*c;
! 		SETFLOAT(at, c2*awght[2]);
! 		at++;
! 		SETFLOAT(at, s2*awght[2]);
! 		at++;
! 
! 		if(x->x_n_order >= 3)
! 		{
! 			c3 = c*(4.0f*cc - 3.0f);
! 			s3 = s*(3.0f - 4.0f*ss);
! 			SETFLOAT(at, c3*awght[3]);
! 			at++;
! 			SETFLOAT(at, s3*awght[3]);
! 			at++;
! 
! 			if(x->x_n_order >= 4)
! 			{
! 				c4 = 1.0f + 8.0f*cc*(cc - 1.0f);
! 				s4 = 2.0f*s2*c2;
! 				SETFLOAT(at, c4*awght[4]);
! 				at++;
! 				SETFLOAT(at, s4*awght[4]);
! 				at++;
! 
! 				if(x->x_n_order >= 5)
! 				{
! 					c5 = c*(1.0f + 4.0f*ss*(ss - 3.0f*cc));
! 					s5 = s*(1.0f + 4.0f*cc*(cc - 3.0f*ss));
! 					SETFLOAT(at, c5*awght[5]);
! 					at++;
! 					SETFLOAT(at, s5*awght[5]);
! 					at++;
! 
! 					if(x->x_n_order >= 6)
! 					{
! 						c6 = c3*c3 - s3*s3;
! 						s6 = 2.0f*s3*c3;
! 						SETFLOAT(at, c6*awght[6]);
! 						at++;
! 						SETFLOAT(at, s6*awght[6]);
! 						at++;
! 
! 						if(x->x_n_order >= 7)
! 						{
! 							SETFLOAT(at, cos(7.0f*phi)*awght[7]);
! 							at++;
! 							SETFLOAT(at, sin(7.0f*phi)*awght[7]);
! 							at++;
! 
! 							if(x->x_n_order >= 8)
! 							{
! 								SETFLOAT(at, (c4*c4 - s4*s4)*awght[8]);
! 								at++;
! 								SETFLOAT(at, 2.0f*s4*c4*awght[8]);
! 								at++;
! 
! 								if(x->x_n_order >= 9)
! 								{
! 									SETFLOAT(at, cos(9.0f*phi)*awght[9]);
! 									at++;
! 									SETFLOAT(at, sin(9.0f*phi)*awght[9]);
! 									at++;
! 
! 									if(x->x_n_order >= 10)
! 									{
! 										SETFLOAT(at, (c5*c5 - s5*s5)*awght[10]);
! 										at++;
! 										SETFLOAT(at, 2.0f*s5*c5*awght[10]);
! 										at++;
! 
! 										if(x->x_n_order >= 11)
! 										{
! 											SETFLOAT(at, cos(11.0f*phi)*awght[11]);
! 											at++;
! 											SETFLOAT(at, sin(11.0f*phi)*awght[11]);
! 											at++;
! 
! 											if(x->x_n_order >= 12)
! 											{
! 												SETFLOAT(at, (c6*c6 - s6*s6)*awght[12]);
! 												at++;
! 												SETFLOAT(at, 2.0f*s6*c6*awght[12]);
! 											}
! 
! 											if(x->x_n_order >= 13)
! 												post("ambi_encode-ERROR: do not support Ambisonic-Order greater than 12 in 2d !!!");
! 
! 										}
! 									}
! 								}
! 							}
! 						}
! 					}
! 				}
! 			}
! 		}
! 	}
  }
  
  static void ambi_encode_do_3d(t_ambi_encode *x, t_symbol *s, int argc, t_atom *argv)
  {
! 	float delta, phi;
! 	float cd, x1, y, z, x2, y2, z2, x2my2, x2m3y2, p3x2my2, xy, xz, yz, m1p5z2, m1p7z2, m3p7z2;
! 	float *awght = x->x_ambi_order_weight;
! 	t_atom *at=x->x_at;
! 
! 	delta = atom_getfloat(argv++)*x->x_pi_over_180;
! 	phi = atom_getfloat(argv)*x->x_pi_over_180;
! 
! 	cd = cos(delta);
! 	x1 = cd * cos(phi);
! 	y = cd * sin(phi);
! 	z = sin(delta);
! 
! 	xy = x1*y;
! 	xz = x1*z;
! 	yz = y*z;
! 	x2 = x1*x1;
! 	y2 = y*y;
! 	z2 = z*z;
! 
! 	x2my2 = x2 - y2;
! 	x2m3y2 = x2my2 - 2.0f*y2;
! 	p3x2my2 = 2.0f*x2 + x2my2;
! 	m1p5z2 = 5.0f*z2 - 1.0f;
! 	m1p7z2 = 2.0f*z2 + m1p5z2;
! 	m3p7z2 = m1p7z2 - 2.0f;
! 
! 	SETFLOAT(at, (float)x->x_colrow);
! 	at++;
! 
! 	SETFLOAT(at, awght[0]);
! 	at++;
! 
! 	SETFLOAT(at, x1*awght[1]);
! 	at++;
! 	SETFLOAT(at, y*awght[1]);
! 	at++;
! 	SETFLOAT(at, z*awght[1]);
! 	at++;
! 
! 	if(x->x_n_order >= 2)
! 	{
! 		SETFLOAT(at, 0.5f*x->x_sqrt3*x2my2*awght[2]);
! 		at++;
! 		SETFLOAT(at, x->x_sqrt3*xy*awght[2]);
! 		at++;
! 		SETFLOAT(at, x->x_sqrt3*xz*awght[2]);
! 		at++;
! 		SETFLOAT(at, x->x_sqrt3*yz*awght[2]);
! 		at++;
! 		SETFLOAT(at, 0.5f*(3.0f*z2 - 1.0f)*awght[2]);
! 		at++;
! 
! 		if(x->x_n_order >= 3)
! 		{
! 			SETFLOAT(at, x->x_sqrt10_4*x1*x2m3y2*awght[3]);
! 			at++;
! 			SETFLOAT(at, x->x_sqrt10_4*y*p3x2my2*awght[3]);
! 			at++;
! 			SETFLOAT(at, 0.5f*x->x_sqrt15*z*x2my2*awght[3]);
! 			at++;
! 			SETFLOAT(at, x->x_sqrt15*xy*z*awght[3]);
! 			at++;
! 			SETFLOAT(at, x->x_sqrt6_4*x1*m1p5z2*awght[3]);
! 			at++;
! 			SETFLOAT(at, x->x_sqrt6_4*y*m1p5z2*awght[3]);
! 			at++;
! 			SETFLOAT(at, 0.5f*z*(m1p5z2 - 2.0f)*awght[3]);
! 			at++;
! 
! 			if(x->x_n_order >= 4)
! 			{
! 				SETFLOAT(at, 0.25f*x->x_sqrt35_2*(x2my2*x2my2 - 4.0f*x2*y2)*awght[4]);
! 				at++;
! 				SETFLOAT(at, x->x_sqrt35_2*xy*x2my2*awght[4]);
! 				at++;
! 				SETFLOAT(at, x->x_sqrt70_4*xz*x2m3y2*awght[4]);
! 				at++;
! 				SETFLOAT(at, x->x_sqrt70_4*yz*p3x2my2*awght[4]);
! 				at++;
! 				SETFLOAT(at, 0.5f*x->x_sqrt5_2*x2my2*m1p7z2*awght[4]);
! 				at++;
! 				SETFLOAT(at, x->x_sqrt5_2*xy*m1p7z2*awght[4]);
! 				at++;
! 				SETFLOAT(at, x->x_sqrt10_4*xz*m3p7z2*awght[4]);
! 				at++;
! 				SETFLOAT(at, x->x_sqrt10_4*yz*m3p7z2*awght[4]);
! 				at++;
! 				SETFLOAT(at, 0.125f*(5.0f*(z2 - 1.0f)*(m1p7z2 + 2.0f) + 8.0f)*awght[4]);
! 				at++;
! 
! 				if(x->x_n_order >= 5)
! 				{
! 					SETFLOAT(at, x->x_sqrt126_16*x1*(x2*(x2 - 10.0f*y2) + 5.0f*y2*y2)*awght[5]);
! 					at++;
! 					SETFLOAT(at, x->x_sqrt126_16*y*(y2*(y2 - 10.0f*x2) + 5.0f*x2*x2)*awght[5]);
! 					at++;
! 					SETFLOAT(at, 0.25f*x->x_sqrt315_2*z*(y2*(y2 - 6.0f*x2) + x2*x2)*awght[5]);
! 					at++;
! 					SETFLOAT(at, x->x_sqrt315_2*xy*z*x2my2*awght[5]);
! 					at++;
! 					SETFLOAT(at, 0.25f*x->x_sqrt70_4*x1*(9.0f*z2 - 1.0f)*x2m3y2*awght[5]);
! 					at++;
! 					SETFLOAT(at, 0.25f*x->x_sqrt70_4*y*(9.0f*z2 - 1.0f)*p3x2my2*awght[5]);
! 					at++;
! 					SETFLOAT(at, 0.5f*x->x_sqrt105_2*x2my2*z*(3.0f*z2 - 1.0f)*awght[5]);
! 					at++;
! 					SETFLOAT(at, x->x_sqrt105_2*xy*z*(3.0f*z2 - 1.0f)*awght[5]);
! 					at++;
! 					SETFLOAT(at, 0.125f*x->x_sqrt15*x1*(z2*(21.0f*z2 - 14.0f) + 1.0f)*awght[5]);
! 					at++;
! 					SETFLOAT(at, 0.125f*x->x_sqrt15*y*(z2*(21.0f*z2 - 14.0f) + 1.0f)*awght[5]);
! 					at++;
! 					SETFLOAT(at, 0.125f*z*(z2*(63.0f*z2 - 70.0f) + 15.0f)*awght[5]);
! 				}
! 
! 				if(x->x_n_order > 5)
! 					post("ambi_encode-ERROR: do not support Ambisonic-Order greater than 5 in 3d !!!");
! 			}
! 		}
! 	}
  }
  
  static void ambi_encode_float(t_ambi_encode *x, t_floatarg phi)
  {
! 	x->x_colrow = -1;
! 	ambi_encode_do_2d(x, phi);
! 	outlet_list(x->x_obj.ob_outlet, &s_list, x->x_size2d, x->x_at+1);
  }
  
  static void ambi_encode_list(t_ambi_encode *x, t_symbol *s, int argc, t_atom *argv)
  {
! 	if(argc <= 0)
! 	{
! 		post("ambi_encode ERROR: list-input needs 2 angles: delta [rad] and phi [rad]");
! 		return;
! 	}
! 	else if(argc == 1)
! 	{
! 		ambi_encode_float(x, atom_getfloat(argv));
! 	}
! 	else
! 	{
! 		x->x_colrow = -1;
! 		ambi_encode_do_3d(x, &s_list, 2, argv);
! 		outlet_list(x->x_obj.ob_outlet, &s_list, x->x_size3d, x->x_at+1);
! 	}
  }
  
  static void ambi_encode_row(t_ambi_encode *x, t_symbol *s, int argc, t_atom *argv)
  {
! 	if(argc == 2)
! 	{
! 		x->x_colrow = (int)atom_getint(argv++);
! 		ambi_encode_do_2d(x, atom_getfloat(argv));
! 		outlet_anything(x->x_obj.ob_outlet, s, x->x_size2d+1, x->x_at);
! 	}
! 	else if(argc >= 3)
! 	{
! 		x->x_colrow = (int)atom_getint(argv++);
! 		ambi_encode_do_3d(x, &s_list, 2, argv);
! 		outlet_anything(x->x_obj.ob_outlet, s, x->x_size3d+1, x->x_at);
! 	}
! 	else
! 	{
! 		post("ambi_encode-ERROR: row needs <float> row-index + <float> angle ( + <float> angle)");
! 	}
  }
  
  static void ambi_encode_col(t_ambi_encode *x, t_symbol *s, int argc, t_atom *argv)
  {
! 	if(argc == 2)
! 	{
! 		x->x_colrow = (int)atom_getint(argv++);
! 		ambi_encode_do_2d(x, atom_getfloat(argv));
! 		outlet_anything(x->x_obj.ob_outlet, s, x->x_size2d+1, x->x_at);
! 	}
! 	else if(argc >= 3)
! 	{
! 		x->x_colrow = (int)atom_getint(argv++);
! 		ambi_encode_do_3d(x, &s_list, 2, argv);
! 		outlet_anything(x->x_obj.ob_outlet, s, x->x_size3d+1, x->x_at);
! 	}
! 	else
! 	{
! 		post("ambi_encode-ERROR: col needs <float> col-index + <float> angle ( + <float> angle)");
! 	}
  }
  
  static void ambi_encode_free(t_ambi_encode *x)
  {
! 	freebytes(x->x_ambi_order_weight, (x->x_n_order+1) * sizeof(float));
! 	freebytes(x->x_at, x->x_size * sizeof(t_atom));
  }
  
  static void *ambi_encode_new(t_floatarg forder)
  {
! 	t_ambi_encode *x = (t_ambi_encode *)pd_new(ambi_encode_class);
! 	t_atom *at;
! 	int i=(int)forder;
! 
! 	if(i < 1)
! 		i = 1;
! 	if(i > 12)
! 		i = 12;
! 	x->x_n_order = i;
! 	x->x_size = 6*6 + 1;
! 	x->x_size2d = 2*i + 1;
! 	x->x_size3d = (i + 1)*(i + 1);
! 
! 	x->x_sqrt3			= (float)(sqrt(3.0));
! 	x->x_sqrt5_2		= (float)(sqrt(5.0) / 2.0);
! 	x->x_sqrt6_4		= (float)(sqrt(6.0) / 4.0);
! 	x->x_sqrt10_4		= (float)(sqrt(10.0) / 4.0);
! 	x->x_sqrt15			= (float)(sqrt(15.0));
! 	x->x_sqrt35_2		= (float)(sqrt(35.0) / 2.0);
! 	x->x_sqrt70_4		= (float)(sqrt(70.0) / 4.0);
! 	x->x_sqrt126_16	= (float)(sqrt(126.0) / 16.0);
! 	x->x_sqrt315_2	= (float)(sqrt(315.0) / 2.0);
! 	x->x_sqrt105_2	= (float)(sqrt(105.0) / 2.0);
! 	x->x_pi_over_180 = (float)(4.0 * atan(1.0)/180.0);
! 	x->x_colrow = 0;
! 	x->x_ambi_order_weight = (float *)getbytes((x->x_n_order+1) * sizeof(float));
! 	x->x_at = (t_atom *)getbytes(x->x_size * sizeof(t_atom));
! 	at=x->x_at;
! 	SETFLOAT(at, -1.0f);/*row index*/
! 	at++;
! 	SETFLOAT(at, 1.0f);/*W channel*/
! 
! 	for(i=0; i<=x->x_n_order; i++)
! 			x->x_ambi_order_weight[i] = 1.0f;
! 
! 	outlet_new(&x->x_obj, &s_list);
! 	return (x);
  }
  
  void ambi_encode_setup(void)
  {
! 	ambi_encode_class = class_new(gensym("ambi_encode"), (t_newmethod)ambi_encode_new, (t_method)ambi_encode_free,
! 				   sizeof(t_ambi_encode), 0, A_DEFFLOAT, 0);
! 	class_addlist(ambi_encode_class, (t_method)ambi_encode_list);
! 	class_addfloat(ambi_encode_class, (t_method)ambi_encode_float);
! 	class_addmethod(ambi_encode_class, (t_method)ambi_encode_row, gensym("row"), A_GIMME, 0);
! 	class_addmethod(ambi_encode_class, (t_method)ambi_encode_col, gensym("col"), A_GIMME, 0);
! 	class_addmethod(ambi_encode_class, (t_method)ambi_encode_ambi_weight, gensym("ambi_weight"), A_GIMME, 0);
! 	class_sethelpsymbol(ambi_encode_class, gensym("iemhelp2/ambi_encode-help"));
  }
--- 37,425 ----
  static void ambi_encode_ambi_weight(t_ambi_encode *x, t_symbol *s, int argc, t_atom *argv)
  {
!   if(argc > x->x_n_order)
!   {
!     int i, n=x->x_n_order;
!     
!     for(i=0; i<=n; i++)
!     {
!       x->x_ambi_order_weight[i] = atom_getfloat(argv++);
!     }
!   }
!   else
!     post("ambi_encode-ERROR: ambi_weight needs %d float weights", x->x_n_order+1);
  }
  
  static void ambi_encode_do_2d(t_ambi_encode *x, t_floatarg phi)
  {
!   t_float c, s, cc, ss, c2, s2, c3, s3, s4, c4, s5, c5, s6, c6;
!   t_float *awght = x->x_ambi_order_weight;
!   t_atom *at=x->x_at;
!   
!   phi *= x->x_pi_over_180;
!   c = cos(phi);
!   s = sin(phi);
!   cc = c*c;
!   ss = s*s;
!   
!   SETFLOAT(at, (t_float)x->x_colrow);
!   at++;
!   
!   SETFLOAT(at, awght[0]);
!   at++;
!   
!   SETFLOAT(at, c*awght[1]);
!   at++;
!   SETFLOAT(at, s*awght[1]);
!   at++;
!   
!   if(x->x_n_order >= 2)
!   {
!     c2 = cc - ss;
!     s2 = 2.0f*s*c;
!     SETFLOAT(at, c2*awght[2]);
!     at++;
!     SETFLOAT(at, s2*awght[2]);
!     at++;
!     
!     if(x->x_n_order >= 3)
!     {
!       c3 = c*(4.0f*cc - 3.0f);
!       s3 = s*(3.0f - 4.0f*ss);
!       SETFLOAT(at, c3*awght[3]);
!       at++;
!       SETFLOAT(at, s3*awght[3]);
!       at++;
!       
!       if(x->x_n_order >= 4)
!       {
!         c4 = 1.0f + 8.0f*cc*(cc - 1.0f);
!         s4 = 2.0f*s2*c2;
!         SETFLOAT(at, c4*awght[4]);
!         at++;
!         SETFLOAT(at, s4*awght[4]);
!         at++;
!         
!         if(x->x_n_order >= 5)
!         {
!           c5 = c*(1.0f + 4.0f*ss*(ss - 3.0f*cc));
!           s5 = s*(1.0f + 4.0f*cc*(cc - 3.0f*ss));
!           SETFLOAT(at, c5*awght[5]);
!           at++;
!           SETFLOAT(at, s5*awght[5]);
!           at++;
!           
!           if(x->x_n_order >= 6)
!           {
!             c6 = c3*c3 - s3*s3;
!             s6 = 2.0f*s3*c3;
!             SETFLOAT(at, c6*awght[6]);
!             at++;
!             SETFLOAT(at, s6*awght[6]);
!             at++;
!             
!             if(x->x_n_order >= 7)
!             {
!               SETFLOAT(at, cos(7.0f*phi)*awght[7]);
!               at++;
!               SETFLOAT(at, sin(7.0f*phi)*awght[7]);
!               at++;
!               
!               if(x->x_n_order >= 8)
!               {
!                 SETFLOAT(at, (c4*c4 - s4*s4)*awght[8]);
!                 at++;
!                 SETFLOAT(at, 2.0f*s4*c4*awght[8]);
!                 at++;
!                 
!                 if(x->x_n_order >= 9)
!                 {
!                   SETFLOAT(at, cos(9.0f*phi)*awght[9]);
!                   at++;
!                   SETFLOAT(at, sin(9.0f*phi)*awght[9]);
!                   at++;
!                   
!                   if(x->x_n_order >= 10)
!                   {
!                     SETFLOAT(at, (c5*c5 - s5*s5)*awght[10]);
!                     at++;
!                     SETFLOAT(at, 2.0f*s5*c5*awght[10]);
!                     at++;
!                     
!                     if(x->x_n_order >= 11)
!                     {
!                       SETFLOAT(at, cos(11.0f*phi)*awght[11]);
!                       at++;
!                       SETFLOAT(at, sin(11.0f*phi)*awght[11]);
!                       at++;
!                       
!                       if(x->x_n_order >= 12)
!                       {
!                         SETFLOAT(at, (c6*c6 - s6*s6)*awght[12]);
!                         at++;
!                         SETFLOAT(at, 2.0f*s6*c6*awght[12]);
!                       }
!                       
!                       if(x->x_n_order >= 13)
!                         post("ambi_encode-ERROR: do not support Ambisonic-Order greater than 12 in 2d !!!");
!                       
!                     }
!                   }
!                 }
!               }
!             }
!           }
!         }
!       }
!     }
!   }
  }
  
  static void ambi_encode_do_3d(t_ambi_encode *x, t_symbol *s, int argc, t_atom *argv)
  {
!   t_float delta, phi;
!   t_float cd, x1, y, z, x2, y2, z2, x2my2, x2m3y2, p3x2my2, xy, xz, yz, m1p5z2, m1p7z2, m3p7z2;
!   t_float *awght = x->x_ambi_order_weight;
!   t_atom *at=x->x_at;
!   
!   delta = atom_getfloat(argv++)*x->x_pi_over_180;
!   phi = atom_getfloat(argv)*x->x_pi_over_180;
!   
!   cd = cos(delta);
!   x1 = cd * cos(phi);
!   y = cd * sin(phi);
!   z = sin(delta);
!   
!   xy = x1*y;
!   xz = x1*z;
!   yz = y*z;
!   x2 = x1*x1;
!   y2 = y*y;
!   z2 = z*z;
!   
!   x2my2 = x2 - y2;
!   x2m3y2 = x2my2 - 2.0f*y2;
!   p3x2my2 = 2.0f*x2 + x2my2;
!   m1p5z2 = 5.0f*z2 - 1.0f;
!   m1p7z2 = 2.0f*z2 + m1p5z2;
!   m3p7z2 = m1p7z2 - 2.0f;
!   
!   SETFLOAT(at, (t_float)x->x_colrow);
!   at++;
!   
!   SETFLOAT(at, awght[0]);
!   at++;
!   
!   SETFLOAT(at, x1*awght[1]);
!   at++;
!   SETFLOAT(at, y*awght[1]);
!   at++;
!   SETFLOAT(at, z*awght[1]);
!   at++;
!   
!   if(x->x_n_order >= 2)
!   {
!     SETFLOAT(at, 0.5f*x->x_sqrt3*x2my2*awght[2]);
!     at++;
!     SETFLOAT(at, x->x_sqrt3*xy*awght[2]);
!     at++;
!     SETFLOAT(at, x->x_sqrt3*xz*awght[2]);
!     at++;
!     SETFLOAT(at, x->x_sqrt3*yz*awght[2]);
!     at++;
!     SETFLOAT(at, 0.5f*(3.0f*z2 - 1.0f)*awght[2]);
!     at++;
!     
!     if(x->x_n_order >= 3)
!     {
!       SETFLOAT(at, x->x_sqrt10_4*x1*x2m3y2*awght[3]);
!       at++;
!       SETFLOAT(at, x->x_sqrt10_4*y*p3x2my2*awght[3]);
!       at++;
!       SETFLOAT(at, 0.5f*x->x_sqrt15*z*x2my2*awght[3]);
!       at++;
!       SETFLOAT(at, x->x_sqrt15*xy*z*awght[3]);
!       at++;
!       SETFLOAT(at, x->x_sqrt6_4*x1*m1p5z2*awght[3]);
!       at++;
!       SETFLOAT(at, x->x_sqrt6_4*y*m1p5z2*awght[3]);
!       at++;
!       SETFLOAT(at, 0.5f*z*(m1p5z2 - 2.0f)*awght[3]);
!       at++;
!       
!       if(x->x_n_order >= 4)
!       {
!         SETFLOAT(at, 0.25f*x->x_sqrt35_2*(x2my2*x2my2 - 4.0f*x2*y2)*awght[4]);
!         at++;
!         SETFLOAT(at, x->x_sqrt35_2*xy*x2my2*awght[4]);
!         at++;
!         SETFLOAT(at, x->x_sqrt70_4*xz*x2m3y2*awght[4]);
!         at++;
!         SETFLOAT(at, x->x_sqrt70_4*yz*p3x2my2*awght[4]);
!         at++;
!         SETFLOAT(at, 0.5f*x->x_sqrt5_2*x2my2*m1p7z2*awght[4]);
!         at++;
!         SETFLOAT(at, x->x_sqrt5_2*xy*m1p7z2*awght[4]);
!         at++;
!         SETFLOAT(at, x->x_sqrt10_4*xz*m3p7z2*awght[4]);
!         at++;
!         SETFLOAT(at, x->x_sqrt10_4*yz*m3p7z2*awght[4]);
!         at++;
!         SETFLOAT(at, 0.125f*(5.0f*(z2 - 1.0f)*(m1p7z2 + 2.0f) + 8.0f)*awght[4]);
!         at++;
!         
!         if(x->x_n_order >= 5)
!         {
!           SETFLOAT(at, x->x_sqrt126_16*x1*(x2*(x2 - 10.0f*y2) + 5.0f*y2*y2)*awght[5]);
!           at++;
!           SETFLOAT(at, x->x_sqrt126_16*y*(y2*(y2 - 10.0f*x2) + 5.0f*x2*x2)*awght[5]);
!           at++;
!           SETFLOAT(at, 0.25f*x->x_sqrt315_2*z*(y2*(y2 - 6.0f*x2) + x2*x2)*awght[5]);
!           at++;
!           SETFLOAT(at, x->x_sqrt315_2*xy*z*x2my2*awght[5]);
!           at++;
!           SETFLOAT(at, 0.25f*x->x_sqrt70_4*x1*(9.0f*z2 - 1.0f)*x2m3y2*awght[5]);
!           at++;
!           SETFLOAT(at, 0.25f*x->x_sqrt70_4*y*(9.0f*z2 - 1.0f)*p3x2my2*awght[5]);
!           at++;
!           SETFLOAT(at, 0.5f*x->x_sqrt105_2*x2my2*z*(3.0f*z2 - 1.0f)*awght[5]);
!           at++;
!           SETFLOAT(at, x->x_sqrt105_2*xy*z*(3.0f*z2 - 1.0f)*awght[5]);
!           at++;
!           SETFLOAT(at, 0.125f*x->x_sqrt15*x1*(z2*(21.0f*z2 - 14.0f) + 1.0f)*awght[5]);
!           at++;
!           SETFLOAT(at, 0.125f*x->x_sqrt15*y*(z2*(21.0f*z2 - 14.0f) + 1.0f)*awght[5]);
!           at++;
!           SETFLOAT(at, 0.125f*z*(z2*(63.0f*z2 - 70.0f) + 15.0f)*awght[5]);
!         }
!         
!         if(x->x_n_order > 5)
!           post("ambi_encode-ERROR: do not support Ambisonic-Order greater than 5 in 3d !!!");
!       }
!     }
!   }
  }
  
  static void ambi_encode_float(t_ambi_encode *x, t_floatarg phi)
  {
!   x->x_colrow = -1;
!   ambi_encode_do_2d(x, phi);
!   outlet_list(x->x_obj.ob_outlet, &s_list, x->x_size2d, x->x_at+1);
  }
  
  static void ambi_encode_list(t_ambi_encode *x, t_symbol *s, int argc, t_atom *argv)
  {
!   if(argc <= 0)
!   {
!     post("ambi_encode ERROR: list-input needs 2 angles: delta [rad] and phi [rad]");
!     return;
!   }
!   else if(argc == 1)
!   {
!     ambi_encode_float(x, atom_getfloat(argv));
!   }
!   else
!   {
!     x->x_colrow = -1;
!     ambi_encode_do_3d(x, &s_list, 2, argv);
!     outlet_list(x->x_obj.ob_outlet, &s_list, x->x_size3d, x->x_at+1);
!   }
  }
  
  static void ambi_encode_row(t_ambi_encode *x, t_symbol *s, int argc, t_atom *argv)
  {
!   if(argc == 2)
!   {
!     x->x_colrow = (int)atom_getint(argv++);
!     ambi_encode_do_2d(x, atom_getfloat(argv));
!     outlet_anything(x->x_obj.ob_outlet, s, x->x_size2d+1, x->x_at);
!   }
!   else if(argc >= 3)
!   {
!     x->x_colrow = (int)atom_getint(argv++);
!     ambi_encode_do_3d(x, &s_list, 2, argv);
!     outlet_anything(x->x_obj.ob_outlet, s, x->x_size3d+1, x->x_at);
!   }
!   else
!   {
!     post("ambi_encode-ERROR: row needs <float> row-index + <float> angle ( + <float> angle)");
!   }
  }
  
  static void ambi_encode_col(t_ambi_encode *x, t_symbol *s, int argc, t_atom *argv)
  {
!   if(argc == 2)
!   {
!     x->x_colrow = (int)atom_getint(argv++);
!     ambi_encode_do_2d(x, atom_getfloat(argv));
!     outlet_anything(x->x_obj.ob_outlet, s, x->x_size2d+1, x->x_at);
!   }
!   else if(argc >= 3)
!   {
!     x->x_colrow = (int)atom_getint(argv++);
!     ambi_encode_do_3d(x, &s_list, 2, argv);
!     outlet_anything(x->x_obj.ob_outlet, s, x->x_size3d+1, x->x_at);
!   }
!   else
!   {
!     post("ambi_encode-ERROR: col needs <float> col-index + <float> angle ( + <float> angle)");
!   }
  }
  
  static void ambi_encode_free(t_ambi_encode *x)
  {
!   freebytes(x->x_ambi_order_weight, (x->x_n_order+1) * sizeof(t_float));
!   freebytes(x->x_at, x->x_size * sizeof(t_atom));
  }
  
  static void *ambi_encode_new(t_floatarg forder)
  {
!   t_ambi_encode *x = (t_ambi_encode *)pd_new(ambi_encode_class);
!   t_atom *at;
!   int i=(int)forder;
!   
!   if(i < 1)
!     i = 1;
!   if(i > 12)
!     i = 12;
!   x->x_n_order = i;
!   x->x_size = 6*6 + 1;
!   x->x_size2d = 2*i + 1;
!   x->x_size3d = (i + 1)*(i + 1);
!   
!   x->x_sqrt3      = (t_float)(sqrt(3.0));
!   x->x_sqrt5_2    = (t_float)(sqrt(5.0) / 2.0);
!   x->x_sqrt6_4    = (t_float)(sqrt(6.0) / 4.0);
!   x->x_sqrt10_4   = (t_float)(sqrt(10.0) / 4.0);
!   x->x_sqrt15     = (t_float)(sqrt(15.0));
!   x->x_sqrt35_2   = (t_float)(sqrt(35.0) / 2.0);
!   x->x_sqrt70_4   = (t_float)(sqrt(70.0) / 4.0);
!   x->x_sqrt126_16 = (t_float)(sqrt(126.0) / 16.0);
!   x->x_sqrt315_2  = (t_float)(sqrt(315.0) / 2.0);
!   x->x_sqrt105_2  = (t_float)(sqrt(105.0) / 2.0);
!   x->x_pi_over_180 = (t_float)(4.0 * atan(1.0)/180.0);
!   x->x_colrow = 0;
!   x->x_ambi_order_weight = (t_float *)getbytes((x->x_n_order+1) * sizeof(t_float));
!   x->x_at = (t_atom *)getbytes(x->x_size * sizeof(t_atom));
!   at=x->x_at;
!   SETFLOAT(at, -1.0f);/*row index*/
!   at++;
!   SETFLOAT(at, 1.0f);/*W channel*/
!   
!   for(i=0; i<=x->x_n_order; i++)
!     x->x_ambi_order_weight[i] = 1.0f;
!   
!   outlet_new(&x->x_obj, &s_list);
!   return (x);
  }
  
  void ambi_encode_setup(void)
  {
!   ambi_encode_class = class_new(gensym("ambi_encode"), (t_newmethod)ambi_encode_new, (t_method)ambi_encode_free,
!     sizeof(t_ambi_encode), 0, A_DEFFLOAT, 0);
!   class_addlist(ambi_encode_class, (t_method)ambi_encode_list);
!   class_addfloat(ambi_encode_class, (t_method)ambi_encode_float);
!   class_addmethod(ambi_encode_class, (t_method)ambi_encode_row, gensym("row"), A_GIMME, 0);
!   class_addmethod(ambi_encode_class, (t_method)ambi_encode_col, gensym("col"), A_GIMME, 0);
!   class_addmethod(ambi_encode_class, (t_method)ambi_encode_ambi_weight, gensym("ambi_weight"), A_GIMME, 0);
!   class_sethelpsymbol(ambi_encode_class, gensym("iemhelp2/ambi_encode-help"));
  }

Index: ambi_decode_cube.c
===================================================================
RCS file: /cvsroot/pure-data/externals/iem/iem_ambi/src/ambi_decode_cube.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** ambi_decode_cube.c	10 Mar 2006 01:59:44 -0000	1.2
--- ambi_decode_cube.c	10 Nov 2006 14:31:45 -0000	1.3
***************
*** 4,20 ****
  iem_ambi written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2005 */
  
- #ifdef NT
- #pragma warning( disable : 4244 )
- #pragma warning( disable : 4305 )
- #endif
- 
- 
  #include "m_pd.h"
  #include "iemlib.h"
  #include <math.h>
- #include <stdio.h>
- #include <string.h>
- 
- 
  
  /* -------------------------- ambi_decode_cube ------------------------------ */
--- 4,10 ----
***************
*** 339,349 ****
  		n = x->x_mirrorsum_beg*x->x_n_ambi;
  		real=x->x_prod;
! 		SETFLOAT(at, (float)x->x_n_ambi);
  		at++;
! 		SETFLOAT(at, (float)x->x_mirrorsum_beg);
  		at++;
  		for(i=0; i<n; i++)
  		{
! 			SETFLOAT(at, (float)(*real));
  			real++;
  			at++;
--- 329,339 ----
  		n = x->x_mirrorsum_beg*x->x_n_ambi;
  		real=x->x_prod;
! 		SETFLOAT(at, (t_float)x->x_n_ambi);
  		at++;
! 		SETFLOAT(at, (t_float)x->x_mirrorsum_beg);
  		at++;
  		for(i=0; i<n; i++)
  		{
! 			SETFLOAT(at, (t_float)(*real));
  			real++;
  			at++;
***************
*** 357,367 ****
  
  //		post("real");
! 		SETFLOAT(at, (float)x->x_n_ambi);
  		at++;
! 		SETFLOAT(at, (float)x->x_n_ls);
  		at++;
  		for(i=0; i<n; i++)
  		{
! 			SETFLOAT(at, (float)(*dv));
  			dv++;
  			at++;
--- 347,357 ----
  
  //		post("real");
! 		SETFLOAT(at, (t_float)x->x_n_ambi);
  		at++;
! 		SETFLOAT(at, (t_float)x->x_n_ls);
  		at++;
  		for(i=0; i<n; i++)
  		{
! 			SETFLOAT(at, (t_float)(*dv));
  			dv++;
  			at++;
***************
*** 760,765 ****
  		x->x_s_matrix = gensym("matrix");
  		/*change*/
! 		SETFLOAT(x->x_at, (float)x->x_n_ls);
! 		SETFLOAT(x->x_at+1, (float)x->x_n_ambi);
  		x->x_sqrt3				= sqrt(3.0);
  		x->x_sqrt5_2			= sqrt(5.0) / 2.0;
--- 750,755 ----
  		x->x_s_matrix = gensym("matrix");
  		/*change*/
! 		SETFLOAT(x->x_at, (t_float)x->x_n_ls);
! 		SETFLOAT(x->x_at+1, (t_float)x->x_n_ambi);
  		x->x_sqrt3				= sqrt(3.0);
  		x->x_sqrt5_2			= sqrt(5.0) / 2.0;

Index: ambi_decode.c
===================================================================
RCS file: /cvsroot/pure-data/externals/iem/iem_ambi/src/ambi_decode.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** ambi_decode.c	10 Mar 2006 01:59:44 -0000	1.2
--- ambi_decode.c	10 Nov 2006 14:31:45 -0000	1.3
***************
*** 4,20 ****
  iem_ambi written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2005 */
  
- #ifdef NT
- #pragma warning( disable : 4244 )
- #pragma warning( disable : 4305 )
- #endif
- 
- 
  #include "m_pd.h"
  #include "iemlib.h"
  #include <math.h>
- #include <stdio.h>
- #include <string.h>
- 
- 
  
  /* -------------------------- ambi_decode ------------------------------ */
--- 4,10 ----
***************
*** 326,330 ****
  	for(i=0; i<n; i++)
  	{
! 		SETFLOAT(at, (float)(*dv));
  		dv++;
  		at++;
--- 316,320 ----
  	for(i=0; i<n; i++)
  	{
! 		SETFLOAT(at, (t_float)(*dv));
  		dv++;
  		at++;
***************
*** 691,696 ****
  		x->x_s_matrix = gensym("matrix");
  		/*change*/
! 		SETFLOAT(x->x_at, (float)x->x_n_ls);
! 		SETFLOAT(x->x_at+1, (float)x->x_n_ambi);
  		x->x_sqrt3				= sqrt(3.0);
  		x->x_sqrt5_2			= sqrt(5.0) / 2.0;
--- 681,686 ----
  		x->x_s_matrix = gensym("matrix");
  		/*change*/
! 		SETFLOAT(x->x_at, (t_float)x->x_n_ls);
! 		SETFLOAT(x->x_at+1, (t_float)x->x_n_ambi);
  		x->x_sqrt3				= sqrt(3.0);
  		x->x_sqrt5_2			= sqrt(5.0) / 2.0;

Index: iemlib.h
===================================================================
RCS file: /cvsroot/pure-data/externals/iem/iem_ambi/src/iemlib.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** iemlib.h	9 Mar 2006 17:05:43 -0000	1.1
--- iemlib.h	10 Nov 2006 14:31:45 -0000	1.2
***************
*** 2,6 ****
  * WARRANTIES, see the file, "LICENSE.txt," in this distribution.
  
! iemlib.h written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2005 */
  
  #ifndef __IEMLIB_H__
--- 2,6 ----
  * WARRANTIES, see the file, "LICENSE.txt," in this distribution.
  
! iemlib written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2005 */
  
  #ifndef __IEMLIB_H__
***************
*** 96,102 ****
--- 96,108 ----
  };
  
+ #ifdef __i386__
  #define IEM_DENORMAL(f) ((((*(unsigned int*)&(f))&0x60000000)==0) || \
  (((*(unsigned int*)&(f))&0x60000000)==0x60000000))
  /* more stringent test: anything not between 1e-19 and 1e19 in absolute val */
+ #else
+ 
+ #define IEM_DENORMAL(f) 0
+ 
+ #endif
  
  #endif





More information about the Pd-cvs mailing list