aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/crossfade~.c5
-rw-r--r--src/get~.c93
-rw-r--r--src/put~.c89
3 files changed, 185 insertions, 2 deletions
diff --git a/src/crossfade~.c b/src/crossfade~.c
index 6a546cd..98348f9 100644
--- a/src/crossfade~.c
+++ b/src/crossfade~.c
@@ -142,9 +142,10 @@ static void *crossfade_tilde_new(t_floatarg f)
(t_newmethod)crossfade_tilde_new,
(t_method)crossfade_tilde_free, sizeof(t_crossfade_tilde),
0, A_DEFFLOAT, 0);
-
+
+ CLASS_MAINSIGNALIN(crossfade_tilde_class, t_crossfade_tilde, f);
class_addmethod(crossfade_tilde_class,
(t_method)crossfade_tilde_dsp, gensym("dsp"), 0);
// class_addmethod(crossfade_tilde_class, nullfn, gensym("signal"), 0);
- CLASS_MAINSIGNALIN(crossfade_tilde_class, t_crossfade_tilde, f);
+
}
diff --git a/src/get~.c b/src/get~.c
new file mode 100644
index 0000000..4d6356d
--- /dev/null
+++ b/src/get~.c
@@ -0,0 +1,93 @@
+#include "putget~.h"
+
+static t_class *get_tilde_class;
+
+typedef struct _get_tilde {
+ t_object x_obj;
+ t_sample f_put;
+ struct putget* pg;
+ t_sample f;
+} t_get_tilde;
+
+t_int *get_tilde_perform(t_int *w)
+{
+ t_get_tilde *x = (t_get_tilde *)(w[1]);
+ t_sample *out = (t_sample *)(w[2]);
+ int n = (int)(w[3]);
+
+ if ( x->pg) {
+
+ putget_arm( x->pg);
+
+
+ t_sample *samples = x->pg->r;
+
+ while (n--) {
+ *out++ = *samples++;
+ }
+ } else {
+ while (n--) {
+ *out++ = 0;
+ }
+ }
+
+ return (w+4);
+}
+
+static void get_tilde_set(t_get_tilde *x, t_symbol* s) {
+
+ if (gensym("") != s ) {
+ if ( x->pg ) {
+ if ( x->pg->name != s) {
+ putget_unregister(x->pg,0);
+ x->pg = putget_register(s,0);
+ }
+ } else {
+ x->pg = putget_register(s,0);
+ }
+ }
+
+}
+
+void get_tilde_dsp(t_get_tilde *x, t_signal **sp)
+{
+
+ if ( sp[0]->s_n == 64 ) {
+ dsp_add(get_tilde_perform, 3, x,sp[0]->s_vec, sp[0]->s_n);
+ } else {
+ pd_error(x,"get~ only works with a block size of 64");
+ }
+}
+
+static void get_tilde_free( t_get_tilde *x) {
+
+ if (x->pg) putget_unregister(x->pg,0);
+}
+
+
+void *get_tilde_new(t_symbol* s)
+{
+ t_get_tilde *x = (t_get_tilde *)pd_new(get_tilde_class);
+
+
+ if (gensym("") != s ) x->pg = putget_register(s,0);
+
+ outlet_new(&x->x_obj, &s_signal);
+
+ return (void *)x;
+}
+
+void get_tilde_setup(void) {
+ get_tilde_class = class_new(gensym("get~"),
+ (t_newmethod)get_tilde_new,
+ (t_method)get_tilde_free, sizeof(t_get_tilde),
+ CLASS_DEFAULT,
+ A_DEFSYMBOL, 0);
+
+ class_addmethod(get_tilde_class,
+ (t_method)get_tilde_set, gensym("set"), A_SYMBOL, 0);
+
+ class_addmethod(get_tilde_class,
+ (t_method)get_tilde_dsp, gensym("dsp"), 0);
+ //CLASS_MAINSIGNALIN(get_tilde_class, t_get_tilde, f);
+}
diff --git a/src/put~.c b/src/put~.c
new file mode 100644
index 0000000..9074888
--- /dev/null
+++ b/src/put~.c
@@ -0,0 +1,89 @@
+#include "putget~.h"
+
+static t_class *put_tilde_class;
+
+typedef struct _put_tilde {
+ t_object x_obj;
+ //t_sample f_put;
+ struct putget* pg;
+ t_sample f;
+} t_put_tilde;
+
+static t_int* put_tilde_perform(t_int *w)
+{
+
+ t_put_tilde *x = (t_put_tilde *)(w[1]);
+
+ if (x->pg && (x->pg->users > x->pg->writers)) {
+ t_sample *in = (t_sample *)(w[2]);
+ int n = (int)(w[3]);
+ t_sample *samples = x->pg->w;
+
+ while (n--) {
+ *samples = *samples + *in;
+ samples++; in++;
+ }
+
+ }
+ return (w+4);
+}
+
+
+static void put_tilde_set(t_put_tilde *x, t_symbol* s) {
+
+ if (gensym("") != s ) {
+ if ( x->pg ) {
+ if ( x->pg->name != s) {
+ putget_unregister(x->pg,1);
+ x->pg = putget_register(s,1);
+ }
+ } else {
+ x->pg = putget_register(s,1);
+ }
+ }
+
+}
+
+
+static void put_tilde_dsp(t_put_tilde *x, t_signal **sp)
+{
+
+ if ( (int) sp[0]->s_n == 64 ) {
+ dsp_add(put_tilde_perform, 3, x,sp[0]->s_vec, sp[0]->s_n);
+
+ } else {
+ error("put~ only works with a block size of 64");
+ }
+
+}
+
+static void put_tilde_free( t_put_tilde *x) {
+
+ if (x->pg) putget_unregister(x->pg,1);
+}
+
+
+static void *put_tilde_new(t_symbol* s)
+{
+ t_put_tilde *x = (t_put_tilde *)pd_new(put_tilde_class);
+
+ if (gensym("") != s ) x->pg = putget_register(s,1);
+
+
+ return (void *)x;
+}
+
+void put_tilde_setup(void) {
+ put_tilde_class = class_new(gensym("put~"),
+ (t_newmethod)put_tilde_new,
+ (t_method)put_tilde_free, sizeof(t_put_tilde),
+ 0, A_DEFSYM, 0);
+
+ class_addmethod(put_tilde_class,
+ (t_method)put_tilde_dsp, gensym("dsp"), 0);
+
+ class_addmethod(put_tilde_class,
+ (t_method)put_tilde_set, gensym("set"), A_SYMBOL, 0);
+
+ CLASS_MAINSIGNALIN(put_tilde_class, t_put_tilde, f);
+}