コード例 #1
0
ファイル: nead~.c プロジェクト: sebshader/shadylib
void *nead_new(t_floatarg attack, t_floatarg decay) {
    t_nead *x = (t_nead *)pd_new(nead_class);
    inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("float"), gensym("attack"));  
    inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("float"), gensym("decay"));  
    outlet_new(&x->x_obj, gensym("signal"));
    x->x_ctl.c_state = 0;
    x->x_ctl.c_target = 0;
    x->x_sr = sys_getsr();
    x->x_ctl.c_attack.nsamp = ms2samps(attack, x->x_sr);
    f2axfade(1-(log(1.0/3.0)/log(ENVELOPE_RANGE)), &(x->x_ctl.c_attack), 0); /* 1/3 by default */
    x->x_ctl.c_decay.nsamp = ms2samps(decay, x->x_sr);
    f2rxfade(0.0, &(x->x_ctl.c_decay), 0);
	return (void *)x;
}
コード例 #2
0
ファイル: nead~.c プロジェクト: sebshader/shadylib
static void nead_any(t_nead *x, t_symbol *s, int argc, t_atom *argv) {
	if(!strcmp(s->s_name, "curves")) { 
		switch(argc) {
			default:;
			case 2: if(argv[1].a_type == A_FLOAT) {
				f2rxfade(atom_getfloat(argv + 1), &(x->x_ctl.c_decay), 1);
			}
			case 1: if(argv[0].a_type == A_FLOAT) {
				f2axfade(atom_getfloat(argv), &(x->x_ctl.c_attack), 1);
			}
			case 0:;
		}
	} else {
		t_int samps;
		switch(argc) {
			default:;
			case 2: 
				if(argv[1].a_type == A_FLOAT) {
					samps = ms2samps(atom_getfloat(argv + 1), x->x_sr);
					if(samps != x->x_ctl.c_decay.nsamp){
						x->x_ctl.c_decay.nsamp = samps;
						ms2rxfade(&(x->x_ctl.c_decay));
					}
				}
			case 1: 
				if(argv[0].a_type == A_FLOAT) {
					samps = ms2samps(atom_getfloat(argv), x->x_sr);
					if(samps != x->x_ctl.c_attack.nsamp) {
						x->x_ctl.c_attack.nsamp = samps;
						ms2axfade(&(x->x_ctl.c_attack));
					}
				}
			case 0:;
		}
	}
}
コード例 #3
0
ファイル: nead~.c プロジェクト: sebshader/shadylib
static void nead_decay(t_nead *x, t_symbol *s, int argc, t_atom *argv) {
	t_int samps;
	int abool;
	if(argc > 0) {
		samps = ms2samps(atom_getfloat(argv), x->x_sr);
		abool = samps == x->x_ctl.c_decay.nsamp;
		if(argc > 1) {
			x->x_ctl.c_decay.nsamp = samps;
			f2rxfade(atom_getfloat(argv + 1), &(x->x_ctl.c_decay), 
				abool);
		} else if(!abool) {
			x->x_ctl.c_decay.nsamp = samps;
			ms2rxfade(&(x->x_ctl.c_decay));
		}
	}
}
コード例 #4
0
static void near_attack(t_near *x, t_symbol *s, int argc, t_atom *argv) {
	t_int samps;
	int abool;
	if(argc > 0) {
		samps = ms2samps(atom_getfloat(argv), x->x_sr);
		abool = samps == x->x_ctl.c_attack.nsamp;
		if(argc > 1) {
			x->x_ctl.c_attack.nsamp = samps;
			f2axfade(atom_getfloat(argv + 1), &(x->x_ctl.c_attack), 
				abool);
		} else if(!abool) {
			x->x_ctl.c_attack.nsamp = samps;
			ms2axfade(&(x->x_ctl.c_attack));
		}
	}
}