[PD-cvs] SF.net SVN: pure-data: [9674] trunk/externals/tof

mrtof at users.sourceforge.net mrtof at users.sourceforge.net
Wed Apr 2 20:09:56 CEST 2008


Revision: 9674
          http://pure-data.svn.sourceforge.net/pure-data/?rev=9674&view=rev
Author:   mrtof
Date:     2008-04-02 11:09:56 -0700 (Wed, 02 Apr 2008)

Log Message:
-----------
Added phasorshot~ external to tof

Modified Paths:
--------------
    trunk/externals/tof/src/w_breakpoints.h

Added Paths:
-----------
    trunk/externals/tof/help/phasorshot~-help.pd
    trunk/externals/tof/src/phasorshot~.c

Added: trunk/externals/tof/help/phasorshot~-help.pd
===================================================================
--- trunk/externals/tof/help/phasorshot~-help.pd	                        (rev 0)
+++ trunk/externals/tof/help/phasorshot~-help.pd	2008-04-02 18:09:56 UTC (rev 9674)
@@ -0,0 +1,70 @@
+#N canvas 67 5 618 599 10;
+#X text 390 204 Arguments:;
+#X obj 372 207 cnv 15 15 15 empty empty empty 20 12 0 14 -258113 -66577
+0;
+#X obj 63 513 snapshot~;
+#X obj 92 488 metro 100;
+#X obj 92 464 loadbang;
+#X obj 59 551 nbx 10 14 -1e+037 1e+037 0 0 empty empty empty 0 -8 0
+10 -1 -262144 -1 0 256;
+#X obj 381 507 soundfiler;
+#X msg 381 469 read -resize \$1 \$2;
+#X obj 381 438 list append \$0table;
+#X obj 381 405 openpanel;
+#X obj 381 381 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X floatatom 381 533 10 0 0 0 - - -;
+#X obj 244 471 table \$0table;
+#X obj 177 297 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X msg 58 154 0.1;
+#X msg 89 156 -0.1;
+#X msg 128 156 -0.5;
+#X msg 134 250 0.9;
+#X msg 166 247 0;
+#X msg 25 154 1;
+#X obj 140 363 print UPPER;
+#X obj 143 401 print LOWER;
+#X obj 222 496 *~;
+#X obj 220 561 dac~;
+#X obj 221 525 tabread4~ \$0table;
+#X msg 169 156 0.5;
+#X msg 201 249 0.5;
+#X obj 62 338 phasorshot~;
+#X text 60 11 Description: A one shot phasor~.;
+#X text 48 33 phasorshot~ is exactly like a phasor except that you
+can disabling it's looping \, therefore making it a one shot lookup
+signal.;
+#X text 55 80 Of course line~ does something similar \, but with phasorshot~
+you can change the speed DURING the ramp.;
+#X text 33 121 Inlet 1: frequency;
+#X text 149 222 Inlet 2: phasee;
+#X text 212 297 Inlet 3: loop off/on;
+#X text 373 225 1) loop off/on;
+#X text 155 329 Outlets 2 and 3 bang if looping is turned off and either
+the upper (1) or lower (0) bound is reached.;
+#X connect 2 0 5 0;
+#X connect 3 0 2 0;
+#X connect 4 0 3 0;
+#X connect 6 0 11 0;
+#X connect 6 0 22 1;
+#X connect 7 0 6 0;
+#X connect 8 0 7 0;
+#X connect 9 0 8 0;
+#X connect 10 0 9 0;
+#X connect 13 0 27 2;
+#X connect 14 0 27 0;
+#X connect 15 0 27 0;
+#X connect 16 0 27 0;
+#X connect 17 0 27 1;
+#X connect 18 0 27 1;
+#X connect 19 0 27 0;
+#X connect 22 0 24 0;
+#X connect 24 0 23 0;
+#X connect 24 0 23 1;
+#X connect 25 0 27 0;
+#X connect 26 0 27 1;
+#X connect 27 0 2 0;
+#X connect 27 0 22 0;
+#X connect 27 1 21 0;
+#X connect 27 2 20 0;


Property changes on: trunk/externals/tof/help/phasorshot~-help.pd
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/externals/tof/src/phasorshot~.c
===================================================================
--- trunk/externals/tof/src/phasorshot~.c	                        (rev 0)
+++ trunk/externals/tof/src/phasorshot~.c	2008-04-02 18:09:56 UTC (rev 9674)
@@ -0,0 +1,213 @@
+#include "m_pd.h"
+#include <math.h>
+
+#define UNITBIT32 1572864.  /* 3*2^19; bit 32 has place value 1 */
+
+    /* machine-dependent definitions.  These ifdefs really
+    should have been by CPU type and not by operating system! */
+#ifdef IRIX
+    /* big-endian.  Most significant byte is at low address in memory */
+#define HIOFFSET 0    /* word offset to find MSB */
+#define LOWOFFSET 1    /* word offset to find LSB */
+#define int32 long  /* a data type that has 32 bits */
+#endif /* IRIX */
+
+#ifdef MSW
+    /* little-endian; most significant byte is at highest address */
+#define HIOFFSET 1
+#define LOWOFFSET 0
+#define int32 long
+#endif
+
+#if defined(__FreeBSD__) || defined(__APPLE__)
+#include <machine/endian.h>
+#endif
+
+#ifdef __linux__
+#include <endian.h>
+#endif
+
+#if defined(__unix__) || defined(__APPLE__)
+#if !defined(BYTE_ORDER) || !defined(LITTLE_ENDIAN)                         
+#error No byte order defined                                                    
+#endif                                                                          
+
+#if BYTE_ORDER == LITTLE_ENDIAN                                             
+#define HIOFFSET 1                                                              
+#define LOWOFFSET 0                                                             
+#else                                                                           
+#define HIOFFSET 0    /* word offset to find MSB */                             
+#define LOWOFFSET 1    /* word offset to find LSB */                            
+#endif /* __BYTE_ORDER */                                                       
+#include <sys/types.h>
+#define int32 int32_t
+#endif /* __unix__ or __APPLE__*/
+
+union tabfudge
+{
+    double tf_d;
+    int32 tf_i[2];
+};
+
+/* -------------------------- phasorshot~ ------------------------------ */
+static t_class *phasorshot_class, *scalarphasorshot_class;
+
+#if 1   /* in the style of R. Hoeldrich (ICMC 1995 Banff) */
+
+typedef struct _phasorshot
+{
+    t_object x_obj;
+    double x_phase;
+    float x_conv;
+    float x_f;      /* scalar frequency */
+    float loop;
+    t_outlet *x_outlet1;        /* bang out for high thresh */
+    t_outlet *x_outlet2;        /* bang out for low thresh */
+    t_clock *x_clock;           /* wakeup for message output */
+    //int previousState;
+    int state;
+} t_phasorshot;
+
+ 
+
+void phasorshot_tick(t_phasorshot *x)  
+{
+    if (x->state == 1) {
+    outlet_bang(x->x_outlet2);
+    } else if ( x->state == 0 ) { 
+    outlet_bang(x->x_outlet1);
+    }
+    //post("bang");
+}
+
+ t_int *phasorshot_perform(t_int *w)
+{
+    t_phasorshot *x = (t_phasorshot *)(w[1]);
+    t_float *in = (t_float *)(w[2]);
+    t_float *out = (t_float *)(w[3]);
+    int n = (int)(w[4]);
+    double dphase = x->x_phase + UNITBIT32;
+    union tabfudge tf;
+    int normhipart;
+
+    float conv = x->x_conv;
+
+    tf.tf_d = UNITBIT32;
+    normhipart = tf.tf_i[HIOFFSET];
+    tf.tf_d = dphase;
+    
+    //clock_delay(x->x_clock, 0L);
+
+    while (n--)
+    {
+        //wrap
+        if (x->loop) { 
+          tf.tf_i[HIOFFSET] = normhipart; 
+        } else {
+          if ( tf.tf_d >= UNITBIT32 + 1 ) {
+            tf.tf_d = UNITBIT32 + 1;
+            if (x->state != 1) clock_delay(x->x_clock, 0L);
+            x->state = 1;
+          } else if ( tf.tf_d <= UNITBIT32 ) {
+            tf.tf_d = UNITBIT32;
+            if (x->state != 0) clock_delay(x->x_clock, 0L);
+            x->state = 0;
+
+          } else {
+            x->state = -1;
+          }
+        }
+        dphase += *in++ * conv; //increment
+        //dphase = UNITBIT32 + 1; //set to one
+        *out++ = tf.tf_d - UNITBIT32;
+        tf.tf_d = dphase;
+    }
+    //if (x->loop) tf.tf_i[HIOFFSET] = normhipart; //wrap
+    //wrap
+        if (x->loop) { 
+          tf.tf_i[HIOFFSET] = normhipart; 
+          x->state = -1;
+        } else {
+          if ( tf.tf_d > UNITBIT32 + 1 ) {
+            tf.tf_d = UNITBIT32 + 1;
+          } else if ( tf.tf_d < UNITBIT32 ) {
+            tf.tf_d = UNITBIT32;
+          }
+          
+        }
+    x->x_phase = tf.tf_d - UNITBIT32;
+    return (w+5);
+}
+
+ void phasorshot_dsp(t_phasorshot *x, t_signal **sp)
+{
+    x->x_conv = 1./sp[0]->s_sr;
+    dsp_add(phasorshot_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n);
+}
+
+ void phasorshot_ft1(t_phasorshot *x, t_float f)
+{
+    if (f < 0) f = 0;
+    if (f > 1) f = 1;
+    x->x_phase = f;
+
+}
+
+ void phasorshot_loop(t_phasorshot *x, t_float f)
+{
+    x->loop = f;
+    if (!f) x->state = -1;
+}
+
+
+void *phasorshot_new(t_symbol *s,int argc,t_atom* argv)
+{
+    t_phasorshot *x = (t_phasorshot *)pd_new(phasorshot_class);
+    
+    x->x_f = 0;
+    if (argc) x->x_f = atom_getfloat(argv++),argc--;
+    
+    inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("ft1"));
+    
+    x->x_phase = 0;
+    x->x_conv = 0;
+   
+    outlet_new(&x->x_obj, gensym("signal"));
+    
+    inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("loop"));
+    x->loop = 0;
+    
+    if (argc) x->loop = atom_getfloat(argv++),argc--;
+     
+     x->state = 0;
+    
+    x->x_outlet1 = outlet_new(&x->x_obj, &s_bang);
+    x->x_outlet2 = outlet_new(&x->x_obj, &s_bang);
+    
+    x->x_clock = clock_new(x, (t_method)phasorshot_tick);
+
+    
+    return (x);
+}
+
+
+void phasorshot_free(t_phasorshot *x)
+{
+    clock_free(x->x_clock);
+}
+
+
+ void phasorshot_tilde_setup(void)
+{
+    phasorshot_class = class_new(gensym("phasorshot~"), (t_newmethod)phasorshot_new, (t_method)phasorshot_free,
+        sizeof(t_phasorshot), 0,A_GIMME,0);
+    CLASS_MAINSIGNALIN(phasorshot_class, t_phasorshot, x_f);
+    class_addmethod(phasorshot_class, (t_method)phasorshot_dsp, gensym("dsp"), 0);
+    
+    class_addmethod(phasorshot_class, (t_method)phasorshot_ft1,
+        gensym("ft1"), A_FLOAT, 0);
+    class_addmethod(phasorshot_class, (t_method)phasorshot_loop,
+        gensym("loop"), A_FLOAT, 0);
+}
+
+#endif  /* Hoeldrich version */


Property changes on: trunk/externals/tof/src/phasorshot~.c
___________________________________________________________________
Name: svn:executable
   + *

Modified: trunk/externals/tof/src/w_breakpoints.h
===================================================================
--- trunk/externals/tof/src/w_breakpoints.h	2008-04-01 14:43:49 UTC (rev 9673)
+++ trunk/externals/tof/src/w_breakpoints.h	2008-04-02 18:09:56 UTC (rev 9674)
@@ -7,7 +7,7 @@
 #define abs fabs
 #endif
 
-#define BACKGROUNDCOLOR "grey"
+#define BACKGROUNDCOLOR "grey86"
 #define LINECOLOR "grey30"
 #ifndef BACKGROUNDWIDTH
 #define BACKGROUNDWIDTH "1"


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Pd-cvs mailing list