From c9906dbf784f170892afc751da352ebd8f7f7d42 Mon Sep 17 00:00:00 2001
From: Jonathan Wilkes <jon.w.wilkes@gmail.com>
Date: Sun, 23 Jul 2017 17:13:55 -0400
Subject: [PATCH] allow all classes to instantiate without any arguments

---
 buffet~.c    |   6 +--
 epluribus~.c |  18 +++++----
 player~.c    |   8 ++--
 samm~.c      |  33 ++++++++++++-----
 shoehorn~.c  |  10 +++--
 stutter~.c   |  10 ++---
 vdb~.c       | 102 +++++++++++++++++++++++++++------------------------
 7 files changed, 107 insertions(+), 80 deletions(-)

diff --git a/buffet~.c b/buffet~.c
index d6ec331..f85240a 100755
--- a/buffet~.c
+++ b/buffet~.c
@@ -1076,9 +1076,9 @@ void *buffet_new(t_symbol *msg, short argc, t_atom *argv)
     if(! x->sr )
         x->sr = 44100;
     
-    if(argc < 1){
-        error("%s: you must provide a valid buffer name",OBJECT_NAME);
-        return 0;
+    if(argc <= 1 || argv[0].a_type != A_SYMBOL) {
+        post("%s: warning: no array name provided: defaulting to empty symbol",
+            OBJECT_NAME);
     }
     atom_arg_getsym(&x->wavename,0,argc,argv);
     atom_arg_getfloat(&x->minframes,1,argc,argv);
diff --git a/epluribus~.c b/epluribus~.c
index e4addc9..6c4200a 100755
--- a/epluribus~.c
+++ b/epluribus~.c
@@ -40,19 +40,23 @@ void epluribus_inverse(t_epluribus *x, t_floatarg tog)
 
 void *epluribus_new(t_symbol *msg, int argc, t_atom *argv)
 {
-	t_epluribus *x;
+    t_epluribus *x;
     int i;
-	x = (t_epluribus *)pd_new(epluribus_class);
-	x->incount = (int) atom_getfloatarg(0,argc,argv);
+    x = (t_epluribus *)pd_new(epluribus_class);
+    x->incount = (int) atom_getfloatarg(0,argc,argv);
+    if(x->incount < 2 || x->incount > 256 ){
+        int defcount = x->incount < 2 ? 2 : 256;
+        post("%s: warning: there must be between 2 and 256 input vectors",
+            OBJECT_NAME);
+        post("defaulting to %d", defcount);
+        x->incount = defcount;
+    }
+
     for(i = 0; i < x->incount - 1; i++){
         inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("signal"),gensym("signal"));
     }
     outlet_new(&x->x_obj, gensym("signal"));
     outlet_new(&x->x_obj, gensym("signal"));
-	if(x->incount < 2 || x->incount > 256 ){
-		error("%s: there must be between 2 and 256 input vectors", OBJECT_NAME);
-		return (NULL);
-	}
 	x->inverse = 0; // by default don't do inverse behaviour
 	return (x);
 }
diff --git a/player~.c b/player~.c
index d31d6c4..dee10cd 100755
--- a/player~.c
+++ b/player~.c
@@ -127,12 +127,12 @@ void *player_new(t_symbol *msg, short argc, t_atom *argv)
 	t_player *x = (t_player *)pd_new(player_class);
 	inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal"));
 	outlet_new(&x->x_obj, gensym("signal") );
+	if(argc < 1 || argv[0].a_type != A_SYMBOL){
+		post("%s: warning: no buffer name given: defaulting to "
+                     "empty symbol",OBJECT_NAME);
+	}
 	x->wavename = atom_getsymbolarg(0,argc,argv);
 	x->b_nchans = 1;	
-	if(argc < 1){
-		error("%s: must specify buffer name",OBJECT_NAME);
-		return 0;
-	}
 	x->overlap_max = atom_getfloatarg(2,argc,argv);
 	if(x->overlap_max <= 0 || x->overlap_max > 128){
 		x->overlap_max = DEFAULT_MAX_OVERLAP;
diff --git a/samm~.c b/samm~.c
index d0bf0c7..91d826e 100755
--- a/samm~.c
+++ b/samm~.c
@@ -238,18 +238,31 @@ void samm_tempo(t_samm *x, t_floatarg f)
 
 void *samm_new(t_symbol *msg, short argc, t_atom *argv)
 {
-	int i,j;
+	int i,j, default_tempo = 120;
 	double divisor;
 	t_samm *x;
+    t_atom sane_defaults[2];
 	
-	if(argc < 2){
-		error("%s: there must be at least 1 beat stream",OBJECT_NAME);
-		return (void *)NULL;
-	}
-	if(argc > MAXBEATS + 1)
+    if(argc < 2){
+        // If no args, set some sane defaults
+        if (!argc){
+            post("%s: warning: no tempo or beat streams provided: setting "
+                 "tempo to 120 BPM and 1 stream to '1'");
+            SETFLOAT(sane_defaults, default_tempo);
+            SETFLOAT(sane_defaults+1, 1.);
+            argc = 2;
+            argv = sane_defaults;
+        }
+        else
+        {
+            error("%s: there must be at least 1 beat stream",OBJECT_NAME);
+            return (void *)NULL;
+        }
+    }
+    if(argc > MAXBEATS + 1)
     {
-		error("%s: exceeded maximum of %d beat values",OBJECT_NAME, MAXBEATS);
-		return (void *)NULL;
+        error("%s: exceeded maximum of %d beat values",OBJECT_NAME, MAXBEATS);
+        return (void *)NULL;
     }
     
     x = (t_samm *)pd_new(samm_class);
@@ -277,8 +290,8 @@ void *samm_new(t_symbol *msg, short argc, t_atom *argv)
 	}
     
 	if( x->tempo <= 0.0 ){
-		x->tempo = 120;
-		post("tempo autoset to 120 BPM");
+		x->tempo = default_tempo;
+		post("tempo autoset to %d BPM", default_tempo);
 	}
 	
 	x->onebeat_samps = (60.0/x->tempo) * x->sr;
diff --git a/shoehorn~.c b/shoehorn~.c
index cd72d9f..4d8cd9b 100755
--- a/shoehorn~.c
+++ b/shoehorn~.c
@@ -44,9 +44,13 @@ void *shoehorn_new(t_symbol *s, int argc, t_atom *argv)
     t_shoehorn *x = (t_shoehorn *)pd_new(shoehorn_class);
     x->inChans = (long) atom_getfloatarg(0,argc,argv);
     x->outChans = (long) atom_getfloatarg(1,argc,argv);
-    if( x->outChans < 2 || x->inChans < 2){
-        error("%s: illegal channel count: [in = %d] [out = %d]",OBJECT_NAME,x->inChans,x->outChans);
-        return NULL;
+    if(x->inChans < 2){
+        post("%s: warning: defaulting to 2 in channels", OBJECT_NAME);
+        x->inChans = 2;
+    }
+    if(x->outChans < 2){
+        post("%s: warning: defaulting to 2 out channels", OBJECT_NAME);
+        x->outChans = 2;
     }
     for(i = 0; i < x->inChans - 1; i++){
         inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("signal"),gensym("signal"));
diff --git a/stutter~.c b/stutter~.c
index e870e61..b656515 100755
--- a/stutter~.c
+++ b/stutter~.c
@@ -149,9 +149,9 @@ void stutter_setarray(t_stutter *x)
 		x->theBuffer = b;
 		garray_usedindsp(b);
 	}
-	if(! x->b_valid ){
-		post("stutter~ got invalid buffer");
-	}	
+        //if(! x->b_valid ){
+        //    post("stutter~ got invalid buffer");
+        //}
 }
 
 t_int *stutter_perform(t_int *w)
@@ -397,8 +397,8 @@ void *stutter_new(t_symbol *msg, short argc, t_atom *argv)
 	srand(time(0));
 	
 	if(argc<1){
-		error("stutter~ requires a buffer name");
-		return NULL;
+		post("stutter~: warning: no array name given (defaulting to "
+                     "empty symbol)");
 	}
 	x->bufchans = 1;
 	x->bufname = atom_getsymbolarg(0,argc,argv);
diff --git a/vdb~.c b/vdb~.c
index 9c79464..a891f48 100755
--- a/vdb~.c
+++ b/vdb~.c
@@ -166,16 +166,16 @@ t_int *vdb_perform(t_int *w)
 	// DSP config
     t_vdb *x = (t_vdb *)(w[1]);
     int n;
-	
+
     float fdelay;
     float insamp; //, insamp2;
     float outsamp;
     float frac;
     t_word *delay_line = x->b_samples;
-	
+
 	int phs = x->phs;
 	long maxdelay_len = x->maxdelay_len;
-	
+
 	float feedback = x->feedback;
 	short *connections = x->connections;
 	float sr = x->sr;
@@ -332,62 +332,68 @@ t_int *vdb_perform(t_int *w)
         return (w + b_nchans * 2 + 5);
         
         
-    }
+}
     
-    void *vdb_new(t_symbol *s, int argc, t_atom *argv)
-    {
-        
-        int i;
-        int user_chans;
-
-        t_vdb *x = (t_vdb *)pd_new(vdb_class);
-        
-        x->sr = sys_getsr();
-        if(argc < 2){
-            error("%s: you must provide a valid buffer name and channel count",OBJECT_NAME);
+void *vdb_new(t_symbol *s, int argc, t_atom *argv)
+{
+    int i;
+    int user_chans;
+
+    t_vdb *x = (t_vdb *)pd_new(vdb_class);
+
+    x->sr = sys_getsr();
+    if(argc < 2){
+        if (!argc)
+        {
+            post("%s: warning: no array name given: defaulting to empty symbol",
+                OBJECT_NAME);
+        } else {
+            error("%s: you must provide a valid buffer name and channel count",
+                OBJECT_NAME);
             return (void *)NULL;
         }
+    }
         
-        if(!x->sr){
-            error("zero sampling rate - set to 44100");
-            x->sr = 44100;
-        }
-        // DSP CONFIG
-        
-        
-        // SET DEFAULTS
-        x->maxdelay = 50.0; // milliseconds
-        x->feedback = 0.5;
-        x->delay_time  = 0.0;
-        
-        // args: name channels [max delay, initial delay, feedback, interpolation_flag]
+    if(!x->sr){
+        error("zero sampling rate - set to 44100");
+        x->sr = 44100;
+    }
+    // DSP CONFIG
+
+
+    // SET DEFAULTS
+    x->maxdelay = 50.0; // milliseconds
+    x->feedback = 0.5;
+    x->delay_time  = 0.0;
+
+    // args: name channels [max delay, initial delay, feedback, interpolation_flag]
         
 
-        x->buffername = atom_getsymbolarg(0,argc,argv);
+    x->buffername = atom_getsymbolarg(0,argc,argv);
         
-        user_chans = 1; // in Pd buffers always mono...
-        x->maxdelay = atom_getfloatarg(1,argc,argv);
-        x->delay_time = atom_getfloatarg(2,argc,argv);
-        x->feedback = atom_getfloatarg(3,argc,argv);
-        x->interpolate = atom_getfloatarg(4,argc,argv);
-        x->b_nchans = user_chans;
-        x->redraw_flag = 1;
+    user_chans = 1; // in Pd buffers always mono...
+    x->maxdelay = atom_getfloatarg(1,argc,argv);
+    x->delay_time = atom_getfloatarg(2,argc,argv);
+    x->feedback = atom_getfloatarg(3,argc,argv);
+    x->interpolate = atom_getfloatarg(4,argc,argv);
+    x->b_nchans = user_chans;
+    x->redraw_flag = 1;
         
-        /* need data checking here */
-        x->inlet_count = x->b_nchans + 2;
-        x->outlet_count = x->b_nchans;
-        x->delay_inlet = x->b_nchans;
-        x->feedback_inlet = x->delay_inlet + 1;
+    /* need data checking here */
+    x->inlet_count = x->b_nchans + 2;
+    x->outlet_count = x->b_nchans;
+    x->delay_inlet = x->b_nchans;
+    x->feedback_inlet = x->delay_inlet + 1;
 
-        for(i = 0; i < x->inlet_count - 1; i++){
-            inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal"));
-        }
-        outlet_new(&x->x_obj, gensym("signal") );
+    for(i = 0; i < x->inlet_count - 1; i++){
+        inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal"));
+    }
+    outlet_new(&x->x_obj, gensym("signal") );
         
         
-        vdb_init(x,0);
-        return (x);
-    }
+    vdb_init(x,0);
+    return (x);
+}
     
     void vdb_free(t_vdb *x)
     {
-- 
GitLab