aboutsummaryrefslogtreecommitdiff
path: root/src/iemlib1/sigsin_phase.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/iemlib1/sigsin_phase.c')
-rw-r--r--src/iemlib1/sigsin_phase.c258
1 files changed, 129 insertions, 129 deletions
diff --git a/src/iemlib1/sigsin_phase.c b/src/iemlib1/sigsin_phase.c
index 0594962..a6cf6dd 100644
--- a/src/iemlib1/sigsin_phase.c
+++ b/src/iemlib1/sigsin_phase.c
@@ -1,129 +1,129 @@
-/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
-* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
-
-iemlib1 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2003 */
-
-#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>
-
-
-/* --- sin_phase~ - output the phase-difference between 2 sinewaves in samples (sig) ---- */
-
-typedef struct sigsin_phase
-{
- t_object x_obj;
- float x_prev1;
- float x_prev2;
- float x_cur_out;
- int x_counter1;
- int x_counter2;
- int x_state1;
- int x_state2;
- float x_msi;
-} t_sigsin_phase;
-
-t_class *sigsin_phase_class;
-
-static t_int *sigsin_phase_perform(t_int *w)
-{
- float *in1 = (float *)(w[1]);
- float *in2 = (float *)(w[2]);
- float *out = (float *)(w[3]);
- t_sigsin_phase *x = (t_sigsin_phase *)(w[4]);
- int i, n = (t_int)(w[5]);
- float prev1=x->x_prev1;
- float prev2=x->x_prev2;
- float cur_out=x->x_cur_out;
- int counter1=x->x_counter1;
- int counter2=x->x_counter2;
- int state1=x->x_state1;
- int state2=x->x_state2;
-
- for(i=0; i<n; i++)
- {
- if((in1[i] >= 0.0f) && (prev1 < 0.0f))
- {
- state1 = 1;
- counter1 = 0;
- }
- else if((in1[i] < 0.0f) && (prev1 >= 0.0f))
- {
- state2 = 1;
- counter2 = 0;
- }
-
- if((in2[i] >= 0.0f) && (prev2 < 0.0f))
- {
- state1 = 0;
- cur_out = (float)(counter1);
- counter1 = 0;
- }
- else if((in2[i] < 0.0f) && (prev2 >= 0.0f))
- {
- state2 = 0;
- cur_out = (float)(counter2);
- counter2 = 0;
- }
-
- if(state1)
- counter1++;
- if(state2)
- counter2++;
-
- prev1 = in1[i];
- prev2 = in2[i];
- out[i] = cur_out;
- }
-
- x->x_prev1 = prev1;
- x->x_prev2 = prev2;
- x->x_cur_out = cur_out;
- x->x_counter1 = counter1;
- x->x_counter2 = counter2;
- x->x_state1 = state1;
- x->x_state2 = state2;
-
- return(w+6);
-}
-
-static void sigsin_phase_dsp(t_sigsin_phase *x, t_signal **sp)
-{
- dsp_add(sigsin_phase_perform, 5, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, x, sp[0]->s_n);
-}
-
-static void *sigsin_phase_new(void)
-{
- t_sigsin_phase *x = (t_sigsin_phase *)pd_new(sigsin_phase_class);
-
- inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal);
- outlet_new(&x->x_obj, &s_signal);
-
- x->x_prev1 = 0.0f;
- x->x_prev2 = 0.0f;
- x->x_cur_out = 0.0f;
- x->x_counter1 = 0;
- x->x_counter2 = 0;
- x->x_state1 = 0;
- x->x_state2 = 0;
- x->x_msi = 0;
-
- return (x);
-}
-
-void sigsin_phase_setup(void)
-{
- sigsin_phase_class = class_new(gensym("sin_phase~"), (t_newmethod)sigsin_phase_new,
- 0, sizeof(t_sigsin_phase), 0, 0);
- CLASS_MAINSIGNALIN(sigsin_phase_class, t_sigsin_phase, x_msi);
- class_addmethod(sigsin_phase_class, (t_method)sigsin_phase_dsp, gensym("dsp"), 0);
- class_sethelpsymbol(sigsin_phase_class, gensym("iemhelp/help-sin_phase~"));
-}
+/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
+* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+
+iemlib1 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>
+
+
+/* --- sin_phase~ - output the phase-difference between 2 sinewaves in samples (sig) ---- */
+
+typedef struct sigsin_phase
+{
+ t_object x_obj;
+ float x_prev1;
+ float x_prev2;
+ float x_cur_out;
+ int x_counter1;
+ int x_counter2;
+ int x_state1;
+ int x_state2;
+ float x_msi;
+} t_sigsin_phase;
+
+t_class *sigsin_phase_class;
+
+static t_int *sigsin_phase_perform(t_int *w)
+{
+ float *in1 = (float *)(w[1]);
+ float *in2 = (float *)(w[2]);
+ float *out = (float *)(w[3]);
+ t_sigsin_phase *x = (t_sigsin_phase *)(w[4]);
+ int i, n = (t_int)(w[5]);
+ float prev1=x->x_prev1;
+ float prev2=x->x_prev2;
+ float cur_out=x->x_cur_out;
+ int counter1=x->x_counter1;
+ int counter2=x->x_counter2;
+ int state1=x->x_state1;
+ int state2=x->x_state2;
+
+ for(i=0; i<n; i++)
+ {
+ if((in1[i] >= 0.0f) && (prev1 < 0.0f))
+ {
+ state1 = 1;
+ counter1 = 0;
+ }
+ else if((in1[i] < 0.0f) && (prev1 >= 0.0f))
+ {
+ state2 = 1;
+ counter2 = 0;
+ }
+
+ if((in2[i] >= 0.0f) && (prev2 < 0.0f))
+ {
+ state1 = 0;
+ cur_out = (float)(counter1);
+ counter1 = 0;
+ }
+ else if((in2[i] < 0.0f) && (prev2 >= 0.0f))
+ {
+ state2 = 0;
+ cur_out = (float)(counter2);
+ counter2 = 0;
+ }
+
+ if(state1)
+ counter1++;
+ if(state2)
+ counter2++;
+
+ prev1 = in1[i];
+ prev2 = in2[i];
+ out[i] = cur_out;
+ }
+
+ x->x_prev1 = prev1;
+ x->x_prev2 = prev2;
+ x->x_cur_out = cur_out;
+ x->x_counter1 = counter1;
+ x->x_counter2 = counter2;
+ x->x_state1 = state1;
+ x->x_state2 = state2;
+
+ return(w+6);
+}
+
+static void sigsin_phase_dsp(t_sigsin_phase *x, t_signal **sp)
+{
+ dsp_add(sigsin_phase_perform, 5, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, x, sp[0]->s_n);
+}
+
+static void *sigsin_phase_new(void)
+{
+ t_sigsin_phase *x = (t_sigsin_phase *)pd_new(sigsin_phase_class);
+
+ inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal);
+ outlet_new(&x->x_obj, &s_signal);
+
+ x->x_prev1 = 0.0f;
+ x->x_prev2 = 0.0f;
+ x->x_cur_out = 0.0f;
+ x->x_counter1 = 0;
+ x->x_counter2 = 0;
+ x->x_state1 = 0;
+ x->x_state2 = 0;
+ x->x_msi = 0;
+
+ return (x);
+}
+
+void sigsin_phase_setup(void)
+{
+ sigsin_phase_class = class_new(gensym("sin_phase~"), (t_newmethod)sigsin_phase_new,
+ 0, sizeof(t_sigsin_phase), 0, 0);
+ CLASS_MAINSIGNALIN(sigsin_phase_class, t_sigsin_phase, x_msi);
+ class_addmethod(sigsin_phase_class, (t_method)sigsin_phase_dsp, gensym("dsp"), 0);
+ class_sethelpsymbol(sigsin_phase_class, gensym("iemhelp/help-sin_phase~"));
+}