/******************************************************************************** void grainstream_setsnd(t_index *x, t_symbol *s) inputs: x -- pointer to this object s -- name of buffer to link description: links buffer holding the grain sound source returns: nothing ********************************************************************************/ void grainstream_setsnd(t_grainstream *x, t_symbol *s) { t_buffer_ref *b = buffer_ref_new((t_object*)x, s); if (buffer_ref_exists(b)) { t_buffer_obj *b_object = buffer_ref_getobject(b); if (buffer_getchannelcount(b_object) != 1) { error("%s: buffer~ > %s < must be mono", OBJECT_NAME, s->s_name); x->next_snd_buf_ptr = NULL; //added 2002.07.15 } else { if (x->snd_buf_ptr == NULL) { // if first buffer make current buffer x->snd_sym = s; x->snd_buf_ptr = b; //x->snd_last_out = 0.0; //removed 2005.02.03 #ifdef DEBUG post("%s: current sound set to buffer~ > %s <", OBJECT_NAME, s->s_name); #endif /* DEBUG */ } else { // else defer to next buffer x->snd_sym = s; x->next_snd_buf_ptr = b; //x->snd_buf_length = b->b_frames; //removed 2002.07.11 //x->snd_last_out = 0.0; //removed 2002.07.24 #ifdef DEBUG post("%s: next sound set to buffer~ > %s <", OBJECT_NAME, s->s_name); #endif /* DEBUG */ } } } else { error("%s: no buffer~ * %s * found", OBJECT_NAME, s->s_name); x->next_snd_buf_ptr = NULL; } }
//external buffer stuff void munger_setbuffer(t_munger *x, t_symbol *s) { if (!x->l_buffer) x->l_buffer = buffer_ref_new((t_object *)x, s); else buffer_ref_set(x->l_buffer, s); if (buffer_ref_exists(x->l_buffer)) { x->externalBuffer = 1; x->l_chan = 0; } else { x->externalBuffer = 0; } }
void *breakgen_new(t_symbol *s, long argc, t_atom *argv) { t_breakgen *x = NULL; if ((x = (t_breakgen *)object_alloc(breakgen_class))) { x->name = gensym(""); if (argc && argv) { x->name = atom_getsym(argv); } if (!x->name || x->name == gensym("")) x->name = symbol_unique(); atom_setlong(&x->val, 0); x->out = outlet_new(x, NULL); x->constsig = 0; x->constval = 1.0; x->rando_gen = NULL; x->rando_gen = new_rando(); if(x->rando_gen == NULL){ post("no memory for random generator\n"); } x->rando_func = no_rando; srand(time(NULL)); x->tick = sinetick; x->sr = 10000.00; x->freq = 100.00; x->osc = NULL; x->osc = new_oscil(x->sr); if(x->osc == NULL){ post("no memory for oscillator\n"); } x->buffy = buffer_ref_new((t_object *)x, gensym("buffy")); if (buffer_ref_exists(x->buffy) != 0) { post("buf ref exists"); } else { post("buf ref doesn't exist"); }; } return (x); }
void breakgen_writebuf(t_breakgen *x, t_symbol *s, long argc, t_atom *argv) { t_atom *ap; t_atom_long framecount; long num_frames; t_buffer_obj *buf; // need to free this float *bufframe; t_max_err buferror; int i; ap = argv; if (atom_gettype(ap) == A_SYM) { x->buffy = buffer_ref_new((t_object *)x, atom_getsym(ap)); if (buffer_ref_exists(x->buffy) != 0) { buf = buffer_ref_getobject(x->buffy); framecount = buffer_getframecount(buf); ap++; if (atom_gettype(ap) == A_LONG) { num_frames = atom_getlong(ap); if (num_frames < framecount) framecount = num_frames; bufframe = buffer_locksamples(buf); if (bufframe) { for (i = 0; i < framecount; i++) { *bufframe = output_val(x) - 1.0; bufframe++; } } buferror = buffer_setdirty(buf); buffer_unlocksamples(buf); } } else { post("buffer doesn't exist"); }; } }
void breakgen_setter(t_breakgen *x, t_symbol *s, long argc, t_atom *argv) { t_atom *ap; int wavetype; ap = argv; if (atom_gettype(ap) == A_SYM) { if (atom_getsym(ap) == gensym("freq")) { ap++; if (atom_gettype(ap) == A_FLOAT) { if (atom_getfloat(ap) > 0.0) { x->freq = atom_getfloat(ap); post("freq set to %f", atom_getfloat(ap)); } else { post("frequency must be positive"); } } else { post("set sr argument of incorrect type"); } } else if (atom_getsym(ap) == gensym("constval")) { ap++; if (atom_gettype(ap) == A_FLOAT) { post("const val set to %f", atom_getfloat(ap)); x->constval = atom_getfloat(ap); } else { post("set const val arg of incorrect type"); } } else if (atom_getsym(ap) == gensym("wavetype")) { ap++; if (atom_gettype(ap) == A_LONG) { wavetype = atom_getlong(ap); if (wavetype < 6) { x->constsig = 0; switch (wavetype) { case 0: /* sine */ x->tick = sinetick; break; case 1: /* triange */ x->tick = tritick; break; case 2: /* square */ x->tick = sqtick; break; case 3: /* sawdown */ x->tick = sawdtick; break; case 4: /* sawup */ x->tick = sawutick; break; case 5: x->constsig = 1; break; default: x->tick = sinetick; break; } post("wavetype set to %i", wavetype); } else { post("wavetype must be between 0 and 5"); } } else { post("set wavetype argument of incorrect type"); } } else if (atom_getsym(ap) == gensym("random")) { ap++; if (atom_gettype(ap) == A_LONG) { wavetype = atom_getlong(ap); if (wavetype < 4) { switch (wavetype) { case 0: /* no random number */ x->rando_func = no_rando; break; case 1: /* replace value with random number */ x->rando_func = rando_replace;; break; case 2: /* scale random and +/- from val */ x->rando_func = rando_multi; break; case 3: /* scale random and +/- from val with interval interp */ x->rando_func = rando_interp; break; default: x->rando_func = no_rando; break; } post("random mode set to %i", wavetype); } else { post("random mode must be between 0 and 3"); } } else { post("set random argument of incorrect type"); } } else if (atom_getsym(ap) == gensym("interval")) { ap++; if (atom_gettype(ap) == A_LONG) { x->rando_gen->interval = atom_getlong(ap); } else { post("set random interval argument of incorrect type"); } } else if (atom_getsym(ap) == gensym("intensity")) { ap++; if (atom_gettype(ap) == A_FLOAT) { x->rando_gen->intensity = atom_getfloat(ap); } else { post("set random intensity argument of incorrect type"); } } else if (atom_getsym(ap) == gensym("buffer")) { t_symbol *symb; ap++; if (atom_gettype(ap) == A_SYM) { symb = atom_getsym(ap); x->buffy = buffer_ref_new((t_object *)x, symb); if (buffer_ref_exists(x->buffy) != 0) { object_post((t_object *)x, "\"%s\" buffer referenced", symb->s_name); } else { object_post((t_object *)x, "\"%s\" buffer referenced but doesn't exist", symb->s_name); }; } else { post("set buffer argument of incorrect type"); } } else if (atom_getsym(ap) == gensym("sr")) { ap++; if (atom_gettype(ap) == A_FLOAT) { if (atom_getfloat(ap) > 0.0) { x->sr = atom_getfloat(ap); free(x->osc); x->osc = new_oscil(x->sr); post("sampling rate set to %f", atom_getfloat(ap)); } else { post("sampling rate can't be negative"); } } else { post("set sr arg of incorrect type"); } } } }