From cf8355513f9a8b000f24c19ec337a97e9afb4cca Mon Sep 17 00:00:00 2001 From: Paul Brossier Date: Sun, 6 Nov 2005 12:10:41 +0000 Subject: [PATCH] rewrite of the puredata external rewrite of the puredata external --- plugins/puredata/Makefile.am | 12 +- plugins/puredata/aubio_setup.c | 19 ++++ plugins/puredata/aubioonset~.c | 46 +++++--- plugins/puredata/aubioquiet~.c | 119 ++++++++++++++++++++ plugins/puredata/aubiotempo~.c | 157 +++++++++++++++++++++++++++ plugins/puredata/aubiotss~.c | 138 +++++++++++++++++++++++ plugins/puredata/help-aubioonset~.pd | 40 +++---- plugins/puredata/help-aubioquiet~.pd | 20 ++++ plugins/puredata/help-aubiotempo~.pd | 16 +++ plugins/puredata/help-aubiotss~.pd | 60 ++++++++++ 10 files changed, 586 insertions(+), 41 deletions(-) create mode 100644 plugins/puredata/aubio_setup.c create mode 100644 plugins/puredata/aubioquiet~.c create mode 100644 plugins/puredata/aubiotempo~.c create mode 100644 plugins/puredata/aubiotss~.c create mode 100644 plugins/puredata/help-aubioquiet~.pd create mode 100644 plugins/puredata/help-aubiotempo~.pd create mode 100644 plugins/puredata/help-aubiotss~.pd diff --git a/plugins/puredata/Makefile.am b/plugins/puredata/Makefile.am index 23ebc2f1..db1bcce0 100644 --- a/plugins/puredata/Makefile.am +++ b/plugins/puredata/Makefile.am @@ -11,10 +11,14 @@ pddir = $(PDDIR) pdinstalldir = $(pddir)/extra # Automake won't accept something ending in ".pd_linux" as a library -pdinstall_PROGRAMS = aubioonset~.pd_linux - -aubioonset__pd_linux_SOURCES = \ - aubioonset~.c +pdinstall_PROGRAMS = aubio.pd_linux + +aubio_pd_linux_SOURCES = \ + aubio_setup.c \ + aubioonset~.c \ + aubiotempo~.c \ + aubiotss~.c \ + aubioquiet~.c pdincludedir = $(pddir)/src diff --git a/plugins/puredata/aubio_setup.c b/plugins/puredata/aubio_setup.c new file mode 100644 index 00000000..1f90e6fb --- /dev/null +++ b/plugins/puredata/aubio_setup.c @@ -0,0 +1,19 @@ + +#include + +char aubio_version[] = "aubio external for pd, version 0.1"; + +void aubio_setup (void); +extern void aubioonset_tilde_setup (void); +extern void aubiotempo_tilde_setup (void); +extern void aubiotss_tilde_setup (void); +extern void aubioquiet_tilde_setup (void); + +void aubio_setup (void) +{ + post(aubio_version); + aubioonset_tilde_setup(); + aubiotempo_tilde_setup(); + aubiotss_tilde_setup(); + aubioquiet_tilde_setup(); +} diff --git a/plugins/puredata/aubioonset~.c b/plugins/puredata/aubioonset~.c index b0e92d39..af1f58c4 100644 --- a/plugins/puredata/aubioonset~.c +++ b/plugins/puredata/aubioonset~.c @@ -20,14 +20,17 @@ typedef struct _aubioonset_tilde { t_object x_obj; t_float threshold; + t_float threshold2; + t_int pos; /*frames%dspblocksize*/ t_int bufsize; t_int hopsize; aubio_onsetdetection_t *o; aubio_pvoc_t * pv; + aubio_pickpeak_t * parms; fvec_t *vec; fvec_t *onset; cvec_t *fftgrain; - t_outlet *onsetval; + t_outlet *onsetbang; } t_aubioonset_tilde; static t_int *aubioonset_tilde_perform(t_int *w) @@ -35,13 +38,28 @@ static t_int *aubioonset_tilde_perform(t_int *w) t_aubioonset_tilde *x = (t_aubioonset_tilde *)(w[1]); t_sample *in = (t_sample *)(w[2]); int n = (int)(w[3]); - //t_sample f = (x->threshold < 0.) ? 0.2 : - // (x->threshold > 10.) ? 10. : x->threshold; - while (n--) //*(x->vec->data[0])++ = (*in++); - x->vec->data[0][n] = in[n]; - aubio_pvoc_do (x->pv, x->vec, x->fftgrain); - aubio_onsetdetection(x->o, x->fftgrain, x->onset); - outlet_float(x->onsetval, x->onset->data[0][0]); + int j,isonset; + for (j=0;jvec, in[j], 0, x->pos); + /*time for fft*/ + if (x->pos == x->hopsize-1) { + /* block loop */ + aubio_pvoc_do (x->pv,x->vec, x->fftgrain); + aubio_onsetdetection(x->o,x->fftgrain, x->onset); + isonset = aubio_peakpick_pimrt(x->onset,x->parms); + if (isonset) { + /* test for silence */ + if (aubio_silence_detection(x->vec, x->threshold2)==1) + isonset=0; + else + outlet_bang(x->onsetbang); + } + /* end of block loop */ + x->pos = -1; /* so it will be zero next j loop */ + } + x->pos++; + } return (w+4); } @@ -57,7 +75,6 @@ static void aubioonset_tilde_debug(t_aubioonset_tilde *x) post("aubioonset~ threshold:\t%f", x->threshold); post("aubioonset~ audio in:\t%f", x->vec->data[0][0]); post("aubioonset~ onset:\t%f", x->onset->data[0][0]); - outlet_float(x->onsetval, x->threshold); } static void *aubioonset_tilde_new (t_floatarg f) @@ -66,18 +83,20 @@ static void *aubioonset_tilde_new (t_floatarg f) (t_aubioonset_tilde *)pd_new(aubioonset_tilde_class); x->threshold = (f < 1e-5) ? 0.1 : (f > 10.) ? 10. : f; - /* should get from block~ size */ + x->threshold2 = -70.; x->bufsize = 1024; x->hopsize = x->bufsize / 2; x->o = new_aubio_onsetdetection(aubio_onset_complex, x->bufsize, 1); x->vec = (fvec_t *)new_fvec(x->hopsize,1); - x->pv = new_aubio_pvoc(x->bufsize, x->hopsize, 1); - x->fftgrain = new_cvec(x->bufsize,1); + x->pv = (aubio_pvoc_t *)new_aubio_pvoc(x->bufsize, x->hopsize, 1); + x->fftgrain = (cvec_t *)new_cvec(x->bufsize,1); x->onset = (fvec_t *)new_fvec(1,1); + x->parms = new_aubio_peakpicker(x->threshold); floatinlet_new (&x->x_obj, &x->threshold); - x->onsetval = outlet_new (&x->x_obj, &s_float); + x->onsetbang = outlet_new (&x->x_obj, &s_bang); + post(aubioonset_version); return (void *)x; } @@ -97,6 +116,5 @@ void aubioonset_tilde_setup (void) gensym("help-aubioonset~.pd")); CLASS_MAINSIGNALIN(aubioonset_tilde_class, t_aubioonset_tilde, threshold); - post("aubioonset~ v0.1 for puredata"); } diff --git a/plugins/puredata/aubioquiet~.c b/plugins/puredata/aubioquiet~.c new file mode 100644 index 00000000..6d1c7aa2 --- /dev/null +++ b/plugins/puredata/aubioquiet~.c @@ -0,0 +1,119 @@ +/** + * + * a puredata wrapper for aubioquiet + * + * Thanks to Johannes M Zmolnig for writing the excellent HOWTO: + * http://iem.kug.ac.at/pd/externals-HOWTO/ + * + * */ + +#include +#include + +char aubioquiet_version[] = "aubioquiet~ version 0.1"; + +static t_class *aubioquiet_tilde_class; + +void aubioquiet_tilde_setup (void); + +typedef struct _aubioquiet_tilde +{ + t_object x_obj; + t_float threshold; + t_int pos; /*frames%dspblocksize*/ + t_int bufsize; + t_int hopsize; + t_int wassilence; + t_int issilence; + fvec_t *vec; + t_outlet *quietbang; + t_outlet *noisybang; +} t_aubioquiet_tilde; + +static t_int *aubioquiet_tilde_perform(t_int *w) +{ + t_aubioquiet_tilde *x = (t_aubioquiet_tilde *)(w[1]); + t_sample *in = (t_sample *)(w[2]); + int n = (int)(w[3]); + int j; + for (j=0;jvec, in[j], 0, x->pos); + /*time for fft*/ + if (x->pos == x->hopsize-1) { + /* block loop */ + if (aubio_silence_detection(x->vec, x->threshold)==1) { + if (x->wassilence==1) { + x->issilence = 1; + } else { + x->issilence = 2; + outlet_bang(x->quietbang); + } + x->wassilence=1; + } else { + if (x->wassilence<=0) { + x->issilence = 0; + } else { + x->issilence = -1; + outlet_bang(x->noisybang); + } + x->wassilence=0; + } + /* end of block loop */ + x->pos = -1; /* so it will be zero next j loop */ + } + x->pos++; + } + return (w+4); +} + +static void aubioquiet_tilde_dsp(t_aubioquiet_tilde *x, t_signal **sp) +{ + dsp_add(aubioquiet_tilde_perform, 3, x, sp[0]->s_vec, sp[0]->s_n); +} + +static void aubioquiet_tilde_debug(t_aubioquiet_tilde *x) +{ + post("aubioquiet~ bufsize:\t%d", x->bufsize); + post("aubioquiet~ hopsize:\t%d", x->hopsize); + post("aubioquiet~ threshold:\t%f", x->threshold); + post("aubioquiet~ audio in:\t%f", x->vec->data[0][0]); +} + +static void *aubioquiet_tilde_new (t_floatarg f) +{ + t_aubioquiet_tilde *x = + (t_aubioquiet_tilde *)pd_new(aubioquiet_tilde_class); + + x->threshold = (f < -1000.) ? -70 : (f >= 0.) ? -70. : f; + x->bufsize = 1024; + x->hopsize = x->bufsize / 2; + + x->vec = (fvec_t *)new_fvec(x->hopsize,1); + x->wassilence = 1; + + floatinlet_new (&x->x_obj, &x->threshold); + x->quietbang = outlet_new (&x->x_obj, &s_bang); + x->noisybang = outlet_new (&x->x_obj, &s_bang); + post(aubioquiet_version); + return (void *)x; +} + +void aubioquiet_tilde_setup (void) +{ + aubioquiet_tilde_class = class_new (gensym ("aubioquiet~"), + (t_newmethod)aubioquiet_tilde_new, + 0, sizeof (t_aubioquiet_tilde), + CLASS_DEFAULT, A_DEFFLOAT, 0); + class_addmethod(aubioquiet_tilde_class, + (t_method)aubioquiet_tilde_dsp, + gensym("dsp"), 0); + class_addmethod(aubioquiet_tilde_class, + (t_method)aubioquiet_tilde_debug, + gensym("debug"), 0); + class_sethelpsymbol(aubioquiet_tilde_class, + gensym("help-aubioquiet~.pd")); + CLASS_MAINSIGNALIN(aubioquiet_tilde_class, + t_aubioquiet_tilde, threshold); +} + diff --git a/plugins/puredata/aubiotempo~.c b/plugins/puredata/aubiotempo~.c new file mode 100644 index 00000000..f17a1f99 --- /dev/null +++ b/plugins/puredata/aubiotempo~.c @@ -0,0 +1,157 @@ +/** + * + * a puredata wrapper for aubio tempo detection functions + * + * Thanks to Johannes M Zmolnig for writing the excellent HOWTO: + * http://iem.kug.ac.at/pd/externals-HOWTO/ + * + * */ + +#include +#include + +char aubiotempo_version[] = "aubiotempo~ version 0.1"; + +static t_class *aubiotempo_tilde_class; + +void aubiotempo_tilde_setup (void); + +typedef struct _aubiotempo_tilde +{ + t_object x_obj; + t_float threshold; + t_float threshold2; + t_int pos; /*frames%dspblocksize*/ + t_int bufsize; + t_int hopsize; + t_int pos2; + t_int winlen; + t_int step; + aubio_onsetdetection_t *o; + aubio_pvoc_t * pv; + aubio_pickpeak_t * parms; + aubio_beattracking_t * bt; + fvec_t *out; + fvec_t *dfframe; + fvec_t *vec; + fvec_t *onset; + cvec_t *fftgrain; + t_outlet *tempobang; + t_outlet *onsetbang; +} t_aubiotempo_tilde; + +static t_int *aubiotempo_tilde_perform(t_int *w) +{ + t_aubiotempo_tilde *x = (t_aubiotempo_tilde *)(w[1]); + t_sample *in = (t_sample *)(w[2]); + int n = (int)(w[3]); + int winlen = x->winlen; + int step = x->step; + int j,i,isonset,istactus; + smpl_t * btoutput = x->out->data[0]; + for (j=0;jvec, in[j], 0, x->pos); + /*time for fft*/ + if (x->pos == x->hopsize-1) { + /* block loop */ + aubio_pvoc_do (x->pv,x->vec, x->fftgrain); + aubio_onsetdetection(x->o,x->fftgrain, x->onset); + if (x->pos2 == step -1 ) { + aubio_beattracking_do(x->bt,x->dfframe,x->out); + /* rotate dfframe */ + for (i = 0 ; i < winlen - step; i++ ) + x->dfframe->data[0][i] = x->dfframe->data[0][i+step]; + for (i = winlen - step ; i < winlen; i++ ) + x->dfframe->data[0][i] = 0.; + x->pos2 = -1; + } + x->pos2++; + isonset = aubio_peakpick_pimrt_wt(x->onset,x->parms,&(x->dfframe->data[0][winlen - step + x->pos2])); + /* end of second level loop */ + istactus = 0; + i=0; + for (i = 1; i < btoutput[0]; i++ ) { + /* test for silence */ + if (aubio_silence_detection(x->vec, x->threshold2)==1) { + isonset = 0; istactus = 0; + } else { + if (x->pos2 == btoutput[i]) { + outlet_bang(x->tempobang); + } + if (isonset) { + outlet_bang(x->onsetbang); + } + } + } + + /* end of block loop */ + x->pos = -1; /* so it will be zero next j loop */ + } + x->pos++; + } + return (w+4); +} + +static void aubiotempo_tilde_dsp(t_aubiotempo_tilde *x, t_signal **sp) +{ + dsp_add(aubiotempo_tilde_perform, 3, x, sp[0]->s_vec, sp[0]->s_n); +} + +static void aubiotempo_tilde_debug(t_aubiotempo_tilde *x) +{ + post("aubiotempo~ bufsize:\t%d", x->bufsize); + post("aubiotempo~ hopsize:\t%d", x->hopsize); + post("aubiotempo~ threshold:\t%f", x->threshold); + post("aubiotempo~ audio in:\t%f", x->vec->data[0][0]); + post("aubiotempo~ onset:\t%f", x->onset->data[0][0]); +} + +static void *aubiotempo_tilde_new (t_floatarg f) +{ + t_aubiotempo_tilde *x = + (t_aubiotempo_tilde *)pd_new(aubiotempo_tilde_class); + + x->threshold = (f < 1e-5) ? 0.1 : (f > 10.) ? 10. : f; + x->threshold2 = -70.; + /* should get from block~ size */ + x->bufsize = 1024; + x->hopsize = x->bufsize / 2; + x->winlen = 512*512/x->hopsize; + x->step = x->winlen/4; + + x->o = new_aubio_onsetdetection(aubio_onset_complex, x->bufsize, 1); + x->vec = (fvec_t *)new_fvec(x->hopsize,1); + x->pv = (aubio_pvoc_t *)new_aubio_pvoc(x->bufsize, x->hopsize, 1); + x->fftgrain = (cvec_t *)new_cvec(x->bufsize,1); + x->onset = (fvec_t *)new_fvec(1,1); + x->parms = new_aubio_peakpicker(x->threshold); + x->bt = (aubio_beattracking_t *)new_aubio_beattracking(x->winlen,1); + x->dfframe = (fvec_t *)new_fvec(x->winlen,1); + x->out = (fvec_t *)new_fvec(x->step,1); + + floatinlet_new (&x->x_obj, &x->threshold); + x->tempobang = outlet_new (&x->x_obj, &s_bang); + x->onsetbang = outlet_new (&x->x_obj, &s_bang); + post(aubiotempo_version); + return (void *)x; +} + +void aubiotempo_tilde_setup (void) +{ + aubiotempo_tilde_class = class_new (gensym ("aubiotempo~"), + (t_newmethod)aubiotempo_tilde_new, + 0, sizeof (t_aubiotempo_tilde), + CLASS_DEFAULT, A_DEFFLOAT, 0); + class_addmethod(aubiotempo_tilde_class, + (t_method)aubiotempo_tilde_dsp, + gensym("dsp"), 0); + class_addmethod(aubiotempo_tilde_class, + (t_method)aubiotempo_tilde_debug, + gensym("debug"), 0); + class_sethelpsymbol(aubiotempo_tilde_class, + gensym("help-aubiotempo~.pd")); + CLASS_MAINSIGNALIN(aubiotempo_tilde_class, + t_aubiotempo_tilde, threshold); +} + diff --git a/plugins/puredata/aubiotss~.c b/plugins/puredata/aubiotss~.c new file mode 100644 index 00000000..839fe8e2 --- /dev/null +++ b/plugins/puredata/aubiotss~.c @@ -0,0 +1,138 @@ +/** + * + * a puredata wrapper for aubio tss detection functions + * + * Thanks to Johannes M Zmolnig for writing the excellent HOWTO: + * http://iem.kug.ac.at/pd/externals-HOWTO/ + * + * */ + +#include +#include + +char aubiotss_version[] = "aubiotss~ version 0.1"; + +static t_class *aubiotss_tilde_class; + +void aubiotss_tilde_setup (void); + +typedef struct _aubiotss_tilde +{ + t_object x_obj; + t_float thres; + t_float alpha; + t_float beta; + t_int pos; /*frames%dspblocksize*/ + t_int bufsize; + t_int hopsize; + aubio_pvoc_t * pv; + aubio_pvoc_t * pvt; + aubio_pvoc_t * pvs; + aubio_tss_t * tss; + fvec_t *vec; + cvec_t *fftgrain; + cvec_t *cstead; + cvec_t *ctrans; + fvec_t *trans; + fvec_t *stead; +} t_aubiotss_tilde; + +static t_int *aubiotss_tilde_perform(t_int *w) +{ + t_aubiotss_tilde *x = (t_aubiotss_tilde *)(w[1]); + t_sample *in = (t_sample *)(w[2]); + t_sample *outtrans = (t_sample *)(w[3]); + t_sample *outstead = (t_sample *)(w[4]); + int n = (int)(w[5]); + int j; + for (j=0;jvec, in[j], 0, x->pos); + /*time for fft*/ + if (x->pos == x->hopsize-1) { + /* block loop */ + /* test for silence */ + //if (!aubio_silence_detection(x->vec, x->threshold2)) + aubio_pvoc_do (x->pv, x->vec, x->fftgrain); + aubio_tss_set_thres( x->tss, x->thres); + aubio_tss_do (x->tss, x->fftgrain, x->ctrans, x->cstead); + aubio_pvoc_rdo (x->pvt, x->ctrans, x->trans); + aubio_pvoc_rdo (x->pvs, x->cstead, x->stead); + //} + /* end of block loop */ + x->pos = -1; /* so it will be zero next j loop */ + } + x->pos++; + *outtrans++ = x->trans->data[0][x->pos]; + *outstead++ = x->stead->data[0][x->pos]; + } + return (w+6); +} + +static void aubiotss_tilde_dsp(t_aubiotss_tilde *x, t_signal **sp) +{ + dsp_add(aubiotss_tilde_perform, 5, x, + sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[0]->s_n); +} + +static void aubiotss_tilde_debug(t_aubiotss_tilde *x) +{ + post("aubiotss~ bufsize:\t%d", x->bufsize); + post("aubiotss~ hopsize:\t%d", x->hopsize); + post("aubiotss~ threshold:\t%f", x->thres); + post("aubiotss~ audio in:\t%f", x->vec->data[0][0]); + post("aubiotss~ audio out:\t%f", x->stead->data[0][0]); +} + +static void *aubiotss_tilde_new (t_floatarg f) + //, t_floatarg bufsize) +{ + t_aubiotss_tilde *x = + (t_aubiotss_tilde *)pd_new(aubiotss_tilde_class); + + x->thres = (f < 1e-5) ? 0.01 : (f > 1.) ? 1. : f; + x->bufsize = 1024; //(bufsize < 64) ? 1024: (bufsize > 16385) ? 16385: bufsize; + x->hopsize = x->bufsize / 4; + x->alpha = 3.; + x->beta = 4.; + + x->vec = (fvec_t *)new_fvec(x->hopsize,1); + + x->fftgrain = (cvec_t *)new_cvec(x->bufsize,1); + x->ctrans = (cvec_t *)new_cvec(x->bufsize,1); + x->cstead = (cvec_t *)new_cvec(x->bufsize,1); + + x->trans = (fvec_t *)new_fvec(x->hopsize,1); + x->stead = (fvec_t *)new_fvec(x->hopsize,1); + + x->pv = (aubio_pvoc_t *)new_aubio_pvoc(x->bufsize, x->hopsize, 1); + x->pvt = (aubio_pvoc_t *)new_aubio_pvoc(x->bufsize, x->hopsize, 1); + x->pvs = (aubio_pvoc_t *)new_aubio_pvoc(x->bufsize, x->hopsize, 1); + + x->tss = (aubio_tss_t *)new_aubio_tss(x->thres, x->alpha, x->beta, + x->bufsize, x->hopsize, 1); + + floatinlet_new (&x->x_obj, &x->thres); + outlet_new(&x->x_obj, gensym("signal")); + outlet_new(&x->x_obj, gensym("signal")); + post(aubiotss_version); + return (void *)x; +} + +void aubiotss_tilde_setup (void) +{ + aubiotss_tilde_class = class_new (gensym ("aubiotss~"), + (t_newmethod)aubiotss_tilde_new, + 0, sizeof (t_aubiotss_tilde), + CLASS_DEFAULT, A_DEFFLOAT, 0); + class_addmethod(aubiotss_tilde_class, + (t_method)aubiotss_tilde_dsp, + gensym("dsp"), 0); + class_addmethod(aubiotss_tilde_class, + (t_method)aubiotss_tilde_debug, + gensym("debug"), 0); + class_sethelpsymbol(aubiotss_tilde_class, + gensym("help-aubiotss~.pd")); + CLASS_MAINSIGNALIN(aubiotss_tilde_class, + t_aubiotss_tilde, thres); +} diff --git a/plugins/puredata/help-aubioonset~.pd b/plugins/puredata/help-aubioonset~.pd index 83859744..5c2fb9d0 100644 --- a/plugins/puredata/help-aubioonset~.pd +++ b/plugins/puredata/help-aubioonset~.pd @@ -1,24 +1,18 @@ -#N canvas 27 302 238 292 10; +#N canvas 245 501 672 291 10; #X obj 50 33 adc~; -#X obj 59 137 vu 15 120 empty empty -1 -8 0 8 -66577 -1 1 0; -#X obj 58 109 scale 0 2000 -100 12; -#N canvas 270 196 450 300 aubioonset 1; -#X text 71 130 set blocksize to 1024 with 50% overlap; -#X obj 56 90 outlet; -#X obj 57 41 inlet~; -#X obj 55 64 aubioonset~ 0.1; -#X text 29 141 ugly. not required \, but should give better results -; -#X obj 200 95 block~ 1024 2 1; -#X text 129 22 aubioonset~ takes an input signal and outputs the value -of the value of the onset detection function; -#X connect 2 0 3 0; -#X connect 3 0 1 0; -#X restore 58 78 pd aubioonset; -#X obj 108 141 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 0 10 --262144 -1 -1 1310.81 256; -#X connect 0 0 3 0; -#X connect 0 1 3 0; -#X connect 2 0 1 0; -#X connect 3 0 2 0; -#X connect 3 0 4 0; +#X text 181 26 aubioonset~ takes an input signal and outputs a bang +when an onset has been detected; +#X text 180 64 this is somewhat similar to the bonk~ object \, except +it should work on non-percussive attacks too.; +#X obj 50 97 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X text 182 111 the creation argument and right input can be used to +set the detection threshold. values between 0 and 10 are accepted. +low values favorise over-detection. higher values will reduce the number +of onset detected.; +#X obj 50 65 aubioonset~ 0.3; +#X floatatom 128 29 5 0 0 0 - - -; +#X connect 0 0 5 0; +#X connect 0 1 5 0; +#X connect 5 0 3 0; +#X connect 6 0 5 1; diff --git a/plugins/puredata/help-aubioquiet~.pd b/plugins/puredata/help-aubioquiet~.pd new file mode 100644 index 00000000..98370431 --- /dev/null +++ b/plugins/puredata/help-aubioquiet~.pd @@ -0,0 +1,20 @@ +#N canvas 225 643 515 246 10; +#X obj 20 28 adc~; +#X obj 19 192 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 119 192 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 19 156 aubioquiet~ -90; +#X text 140 193 noisy; +#X text 38 192 quiet; +#X text 60 26 aubioquiet~ outputs bangs: - on its left input when a +change to silence is detected - on its right output when a change to +loudness is detected; +#X text 59 82 object creation argument and right input can be used +to set the noise threshold \, in dB. default value is -90; +#X text 182 138 this object was written as an exercise and test. note +that it could also easily be rewritten as a patch.; +#X connect 0 0 3 0; +#X connect 0 1 3 0; +#X connect 3 0 1 0; +#X connect 3 1 2 0; diff --git a/plugins/puredata/help-aubiotempo~.pd b/plugins/puredata/help-aubiotempo~.pd new file mode 100644 index 00000000..500c90a7 --- /dev/null +++ b/plugins/puredata/help-aubiotempo~.pd @@ -0,0 +1,16 @@ +#N canvas 245 501 672 291 10; +#X obj 50 33 adc~; +#X obj 50 97 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X floatatom 128 29 5 0 0 0 - - -; +#X text 180 71 the creation argument and right input can be used to +set the detection threshold of the onset detection function. see the +documentation for aubioonset~; +#X obj 50 65 aubiotempo~ 0.3; +#X text 181 26 aubiotempo~ takes an input signal and outputs a bang +when at each detected beat location.; +#X text 416 45; +#X connect 0 0 4 0; +#X connect 0 1 4 0; +#X connect 2 0 4 1; +#X connect 4 0 1 0; diff --git a/plugins/puredata/help-aubiotss~.pd b/plugins/puredata/help-aubiotss~.pd new file mode 100644 index 00000000..888cf205 --- /dev/null +++ b/plugins/puredata/help-aubiotss~.pd @@ -0,0 +1,60 @@ +#N canvas 332 424 550 443 10; +#X msg 173 64 debug; +#X obj 138 11 adc~; +#X obj 181 356 dac~; +#X floatatom 244 74 5 0 0 0 - - -; +#X obj 179 18 hsl 256 15 0 256 0 0 empty empty empty -2 -6 0 8 -262144 +-1 -1 3600 1; +#X obj 167 182 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 +1; +#X obj 267 185 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 +1; +#X obj 179 293 *~; +#X obj 203 293 *~; +#X obj 199 219 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 +1; +#X text 265 161 play steady states components; +#X text 8 160 play transients; +#X text 185 204 stereo; +#X floatatom 10 226 5 0 0 0 - - -; +#X obj 13 182 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144 +-1 -1 2300 1; +#X floatatom 285 225 5 0 0 0 - - -; +#X obj 288 185 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144 +-1 -1 3900 1; +#X text 236 -1 separation threshold; +#X obj 144 96 aubiotss~ 0.015; +#X text 265 99 transient and steady state separation; +#X obj 244 239 *~ 1; +#X obj 244 267 *~ 1; +#X obj 144 240 *~ 1; +#X obj 144 265 *~ 1; +#X obj 285 204 / 68; +#X obj 10 203 / 68; +#X obj 244 51 / 256; +#X connect 0 0 18 0; +#X connect 1 0 18 0; +#X connect 1 1 18 0; +#X connect 3 0 18 1; +#X connect 4 0 26 0; +#X connect 5 0 23 1; +#X connect 6 0 21 1; +#X connect 7 0 2 1; +#X connect 8 0 2 0; +#X connect 9 0 7 0; +#X connect 9 0 8 1; +#X connect 13 0 22 1; +#X connect 14 0 25 0; +#X connect 15 0 20 1; +#X connect 16 0 24 0; +#X connect 18 0 22 0; +#X connect 18 1 20 0; +#X connect 20 0 21 0; +#X connect 21 0 2 1; +#X connect 21 0 8 0; +#X connect 22 0 23 0; +#X connect 23 0 2 0; +#X connect 23 0 7 0; +#X connect 24 0 15 0; +#X connect 25 0 13 0; +#X connect 26 0 3 0; -- 2.26.2