Max 5 API Reference
00001 /* 00002 jit.transfer.sine.c 00003 00004 Copyright 2001-2005 - Cycling '74 00005 Joshua Kit Clayton jkc@cycling74.com 00006 00007 */ 00008 00009 /* 00010 normalized phase 0-1. i.e. mapped to 0-TWOPI 00011 not positive that this should be the product or 00012 if it the normalized sum of sinewaves. product 00013 implemented below 00014 00015 */ 00016 00017 // ----------------------------------------------------------------------------- 00018 00019 #include "jit.common.h" 00020 #include "jit.functor.h" 00021 00022 #ifndef TWOPI 00023 #define TWOPI 6.28318530717958647692 00024 #endif // TWOPI 00025 00026 // ----------------------------------------------------------------------------- 00027 00028 typedef struct _jit_functor_transfer_sine 00029 { 00030 t_jit_object ob; 00031 } t_jit_functor_transfer_sine; 00032 00033 // ----------------------------------------------------------------------------- 00034 00035 t_jit_object *jit_functor_transfer_sine_new(void); 00036 t_jit_err jit_functor_transfer_sine_free(t_jit_functor_transfer_sine *x); 00037 00038 t_jit_err jit_functor_transfer_sine_recalc(t_jit_functor_transfer_sine *x); 00039 00040 long jit_functor_transfer_sine_eval_fixed(t_jit_functor_transfer_sine *x, long dimcount, long *vals); 00041 float jit_functor_transfer_sine_eval_float32(t_jit_functor_transfer_sine *x, long dimcount, float *vals); 00042 double jit_functor_transfer_sine_eval_float64(t_jit_functor_transfer_sine *x, long dimcount, double *vals); 00043 00044 void jit_functor_transfer_sine_fixlut_init(void); 00045 00046 static long _sine_fixlut_init = 0; 00047 static long *_sine_fixlut; 00048 00049 t_class *_jit_functor_transfer_sine_class; 00050 00051 // ----------------------------------------------------------------------------- 00052 00053 t_jit_err jit_functor_transfer_sine_init(void) 00054 { 00055 // create transfer class 00056 _jit_functor_transfer_sine_class = jit_class_new("jit_functor_transfer_sine", 00057 (method)jit_functor_transfer_sine_new,(method)jit_functor_transfer_sine_free, 00058 sizeof(t_jit_functor_transfer_sine),0L); 00059 00060 // add evaluation methods 00061 jit_class_addmethod(_jit_functor_transfer_sine_class, (method)jit_functor_transfer_sine_eval_fixed, "evalfixed", A_CANT, 0L); 00062 jit_class_addmethod(_jit_functor_transfer_sine_class, (method)jit_functor_transfer_sine_eval_float32, "evalfloat32", A_CANT, 0L); 00063 jit_class_addmethod(_jit_functor_transfer_sine_class, (method)jit_functor_transfer_sine_eval_float64, "evalfloat64", A_CANT, 0L); 00064 00065 // important to add last for subclassing methods 00066 jit_functor_setup_class(_jit_functor_transfer_sine_class,"transfer","sine"); 00067 jit_class_register(_jit_functor_transfer_sine_class); 00068 00069 _sine_fixlut = (long *)jit_newptr(fixed1*sizeof(long)); 00070 00071 return JIT_ERR_NONE; 00072 } 00073 00074 t_jit_object *jit_functor_transfer_sine_new(void) 00075 { 00076 t_jit_functor_transfer_sine *x; 00077 00078 if (x = (t_jit_functor_transfer_sine *)jit_object_alloc(_jit_functor_transfer_sine_class)) { 00079 //initialization 00080 jit_functor_transfer_sine_recalc(x); 00081 } 00082 00083 return (t_jit_object *)x; 00084 } 00085 00086 t_jit_err jit_functor_transfer_sine_free(t_jit_functor_transfer_sine *x) 00087 { 00088 return JIT_ERR_NONE; 00089 } 00090 00091 // ----------------------------------------------------------------------------- 00092 00093 t_jit_err jit_functor_transfer_sine_recalc(t_jit_functor_transfer_sine *x) 00094 { 00095 // calculate intermediary values for efficiency 00096 return JIT_ERR_NONE; 00097 } 00098 00099 // ----------------------------------------------------------------------------- 00100 00101 long jit_functor_transfer_sine_eval_fixed(t_jit_functor_transfer_sine *x, long dimcount, long *vals) 00102 { 00103 if (!_sine_fixlut_init) 00104 jit_functor_transfer_sine_fixlut_init(); 00105 00106 return jit_functor_eval_fixed_with_lut_wrap_product((t_jit_object *)x,dimcount,vals,_sine_fixlut); 00107 } 00108 00109 float jit_functor_transfer_sine_eval_float32(t_jit_functor_transfer_sine *x, long dimcount, float *vals) 00110 { 00111 return jit_functor_eval_float32_with_float64((t_jit_object *)x,dimcount,vals, 00112 (t_jit_functor_float64_sig)jit_functor_transfer_sine_eval_float64); 00113 } 00114 00115 double jit_functor_transfer_sine_eval_float64(t_jit_functor_transfer_sine *x, long dimcount, double *vals) 00116 { 00117 long i; 00118 double rval=jit_math_sin(vals[0]*TWOPI); 00119 00120 for (i=1;i<dimcount;i++) { 00121 rval *= jit_math_sin(vals[i]*TWOPI); 00122 } 00123 00124 return rval; 00125 } 00126 00127 // ----------------------------------------------------------------------------- 00128 00129 void jit_functor_transfer_sine_fixlut_init(void) 00130 { 00131 long i; 00132 00133 for (i=0;i<fixed1;i++) { 00134 _sine_fixlut[i] = DoubleToFixed(jit_math_sin(FixedToDouble(i)*TWOPI)); 00135 } 00136 _sine_fixlut_init = 1; 00137 } 00138 00139 // -----------------------------------------------------------------------------
Copyright © 2008, Cycling '74