Ejemplo n.º 1
0
/********************************************************************************
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;
	}
}
Ejemplo n.º 2
0
//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;
	}
}
Ejemplo n.º 3
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);
}
Ejemplo n.º 4
0
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");
        };
    }
}
Ejemplo n.º 5
0
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");
            }
        }
    }
}