void Marimba_setStrikePosition(t_marimba *x, float position) { float temp,temp2; temp2 = position * PI; x->x_spos = position; /* Hack only first three modes */ temp = sin(temp2); Modal4_setFiltGain(&x->modal, 0, .12 * temp); /* 1st mode function of pos. */ temp = sin(0.05 + (3.9 * temp2)); Modal4_setFiltGain(&x->modal, 1, -.03 * temp); /* 2nd mode function of pos. */ temp = sin(-0.05 + (11. * temp2)); Modal4_setFiltGain(&x->modal, 2, .11 * temp); /* 3rd mode function of pos. */ }
static void *marimba_new(void) { unsigned int i; char file[128]; t_marimba *x = (t_marimba *)pd_new(marimba_class); //zero out the struct, to be careful (takk to jkclayton) if (x) { for(i=sizeof(t_object);i<sizeof(t_marimba);i++) ((char *)x)[i]=0; } outlet_new(&x->x_obj, gensym("signal")); inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("spos")); inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("sa")); inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("vf")); inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("va")); inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("freq")); x->srate = sys_getsr(); x->one_over_srate = 1./x->srate; Modal4_init(&x->modal, x->srate); //strcpy(file, RAWWAVE_PATH); HeaderSnd_alloc(&x->modal.wave, marmstk1, 256, "oneshot"); HeaderSnd_setRate(&x->modal.wave, .5); /* normal stick */ Modal4_setRatioAndReson(&x->modal, 0, 1.00, 0.9996); Modal4_setRatioAndReson(&x->modal, 1, 3.99, 0.9994); Modal4_setRatioAndReson(&x->modal, 2, 10.65, 0.9994); Modal4_setRatioAndReson(&x->modal, 3, 2443.0, 0.999); Modal4_setFiltGain(&x->modal, 0, .04); Modal4_setFiltGain(&x->modal, 1, .01); Modal4_setFiltGain(&x->modal, 2, .01); Modal4_setFiltGain(&x->modal, 3, .008); x->modal.directGain = 0.1; x->multiStrike = 0; x->fr_save = x->x_fr; post("marimba..."); return (x); }
int vibraphnset(CSOUND *csound, VIBRAPHN *p) { Modal4 *m = &(p->m4); MYFLT temp; FUNC *ftp; if (LIKELY((ftp = csound->FTnp2Find(csound, p->ifn)) != NULL)) p->m4.wave = ftp; /* Expect an impulslything */ else { return csound->InitError(csound, Str("No table for Vibraphone strike")); } if (UNLIKELY(make_Modal4(csound, m, p->ivfn, *p->vibAmt, *p->vibFreq)==NOTOK)) return NOTOK; p->m4.w_phaseOffset = FL(0.0); /* p->m4.w_rate = 13.33; */ OnePole_setPole(&p->m4.onepole, FL(0.2)); Modal4_setRatioAndReson(csound, m, 0, FL(1.0), FL(0.99995)); /* Set */ Modal4_setRatioAndReson(csound, m, 1, FL(2.01),FL(0.99991)); /* our */ Modal4_setRatioAndReson(csound, m, 2, FL(3.9), FL(0.99992)); /* resonance */ Modal4_setRatioAndReson(csound, m, 3,FL(14.37),FL(0.99990)); /* values here */ Modal4_setFiltGain(m, 0, FL(0.025)); Modal4_setFiltGain(m, 1, FL(0.015)); Modal4_setFiltGain(m, 2, FL(0.015)); Modal4_setFiltGain(m, 3, FL(0.015)); p->m4.directGain = FL(0.0); /* vibrGain = 0.2; */ p->m4.w_rate = FL(2.0) + (FL(22.66) * *p->hardness); p->m4.masterGain = FL(0.2) + (*p->hardness * FL(1.6)); /* Set Strike position */ temp = (p->strikePosition = *p->spos) * PI_F; BiQuad_setGain(p->m4.filters[0], FL(0.025) * SIN(temp)); BiQuad_setGain(p->m4.filters[1], FL(0.015) * SIN(FL(0.1) + (FL(2.01) * temp))); BiQuad_setGain(p->m4.filters[2], FL(0.015) * SIN(FL(3.95) * temp)); /* Strike */ Modal4_strike(csound, m, *p->amplitude * AMP_RSCALE); Modal4_setFreq(csound, m, *p->frequency); p->first = 1; return OK; }
int agogobelset(CSOUND *csound, VIBRAPHN *p) { Modal4 *m = &(p->m4); FUNC *ftp; MYFLT temp; /* Expect an impulslything */ if (LIKELY((ftp = csound->FTnp2Find(csound, p->ifn)) != NULL)) p->m4.wave = ftp; else { return csound->InitError(csound, Str("No table for Agogobell strike")); } if (UNLIKELY(make_Modal4(csound, m, p->ivfn, *p->vibAmt, *p->vibFreq)==NOTOK)) return NOTOK; p->m4.w_phaseOffset = FL(0.0); /* p->m4.w_rate = 7.0; */ OnePole_setPole(&p->m4.onepole, FL(0.2)); Modal4_setRatioAndReson(csound, m, 0, FL(1.00), FL(0.999)); /* Set */ Modal4_setRatioAndReson(csound, m, 1, FL(4.08), FL(0.999)); /* our */ Modal4_setRatioAndReson(csound, m, 2, FL(6.669),FL(0.999)); /* resonance */ Modal4_setRatioAndReson(csound, m, 3,-FL(3725.0), FL(0.999)); /* values here */ Modal4_setFiltGain(m, 0, FL(0.06)); Modal4_setFiltGain(m, 1, FL(0.05)); Modal4_setFiltGain(m, 2, FL(0.03)); Modal4_setFiltGain(m, 3, FL(0.02)); p->m4.directGain = FL(0.25); /* vibrGain = 0.2; */ p->m4.w_rate = FL(3.0) + (FL(8.0) * *p->hardness); p->m4.masterGain = FL(1.0); /* Set Strike position */ temp = (p->strikePosition = *p->spos) * PI_F; BiQuad_setGain(p->m4.filters[0], FL(0.08) * SIN(FL(0.7) * temp)); BiQuad_setGain(p->m4.filters[1], FL(0.07) * SIN(FL(0.1) + (FL(5.0) * temp))); BiQuad_setGain(p->m4.filters[2], FL(0.04) * SIN(FL(0.2) + (FL(7.0) * temp))); /* Strike */ Modal4_strike(csound, m, *p->amplitude*AMP_RSCALE); Modal4_setFreq(csound, m, *p->frequency); return OK; }
void *marimba_new(double initial_coeff) { int i; char file[128]; t_marimba *x = (t_marimba *)newobject(marimba_class); //zero out the struct, to be careful (takk to jkclayton) if (x) { for(i=sizeof(t_pxobject);i<sizeof(t_marimba);i++) ((char *)x)[i]=0; } dsp_setup((t_pxobject *)x,6); outlet_new((t_object *)x, "signal"); x->srate = sys_getsr(); x->one_over_srate = 1./x->srate; Modal4_init(&x->modal, x->srate); //strcpy(file, RAWWAVE_PATH); HeaderSnd_alloc(&x->modal.wave, marmstk1, 256, "oneshot"); HeaderSnd_setRate(&x->modal.wave, .5); /* normal stick */ Modal4_setRatioAndReson(&x->modal, 0, 1.00, 0.9996); Modal4_setRatioAndReson(&x->modal, 1, 3.99, 0.9994); Modal4_setRatioAndReson(&x->modal, 2, 10.65, 0.9994); Modal4_setRatioAndReson(&x->modal, 3, 2443.0, 0.999); Modal4_setFiltGain(&x->modal, 0, .04); Modal4_setFiltGain(&x->modal, 1, .01); Modal4_setFiltGain(&x->modal, 2, .01); Modal4_setFiltGain(&x->modal, 3, .008); x->modal.directGain = 0.1; x->multiStrike = 0; x->fr_save = x->x_fr; post("marimba..."); return (x); }
int marimbaset(CSOUND *csound, MARIMBA *p) { Modal4 *m = &(p->m4); MYFLT temp,temp2; int itemp; FUNC *ftp; if (LIKELY((ftp = csound->FTnp2Find(csound, p->ifn)) != NULL)) p->m4.wave = ftp; else { /* Expect an impulslything */ return csound->InitError(csound, Str("No table for Marimba strike")); } if (UNLIKELY(make_Modal4(csound, m, p->ivfn, *p->vibAmt, *p->vibFreq)==NOTOK)) return NOTOK; p->m4.w_phaseOffset = FL(0.0); /* p->m4.w_rate = 0.5; */ Modal4_setRatioAndReson(csound,m,0, FL(1.00), FL(0.9996)); /* Set all 132.0 */ Modal4_setRatioAndReson(csound,m,1, FL(3.99), FL(0.9994)); /* of our 523.0 */ Modal4_setRatioAndReson(csound,m,2,FL(10.65), FL(0.9994)); /* default 1405.0 */ Modal4_setRatioAndReson(csound,m,3,-FL(18.50),FL(0.999)); /* resonances 2443 */ Modal4_setFiltGain(m, 0, FL(0.04)); /* and */ Modal4_setFiltGain(m, 1, FL(0.01)); /* gains */ Modal4_setFiltGain(m, 2, FL(0.01)); /* for each */ Modal4_setFiltGain(m, 3, FL(0.008)); /* resonance */ p->m4.directGain = FL(0.1); p->multiStrike = 0; p->strikePosition = *p->spos; /* Set Stick hardness stuff */ p->stickHardness = *p->hardness; p->m4.w_rate = (FL(0.25) * (MYFLT)pow(4.0,(double)p->stickHardness)); p->m4.masterGain = (FL(0.1) + (FL(1.8) * p->stickHardness)); /* Set Strike position */ temp2 = p->strikePosition * PI_F; temp = SIN(temp2); BiQuad_setGain(p->m4.filters[0], FL(0.12)*temp); /* 1st mode function of pos.*/ temp = SIN(FL(0.05) + (FL(3.9) * temp2)); BiQuad_setGain(p->m4.filters[1], -FL(0.03)*temp); /* 2nd mode function of pos.*/ temp = SIN(-FL(0.05) + (FL(11.0) * temp2)); BiQuad_setGain(p->m4.filters[2], FL(0.11)*temp); /* 3rd mode function of pos.*/ /* Strike */ { int triples = (*p->triples<=FL(0.0) ? 20 : (int)*p->triples); int doubles = (*p->doubles<=FL(0.0) ? 40 : triples + (int)*p->doubles); itemp = csound->Rand31(&(csound->randSeed1)) % 100; if (itemp < triples) { p->multiStrike = 2; if (csound->oparms->msglevel & RNGEMSG) csound->Message(csound, Str("striking three times here!!!\n")); } else if (itemp < doubles) { p->multiStrike = 1; if (csound->oparms->msglevel & RNGEMSG) csound->Message(csound, Str("striking twice here!!\n")); } else p->multiStrike = 0; } Modal4_strike(csound, m, *p->amplitude * AMP_RSCALE); Modal4_setFreq(csound, m, *p->frequency); p->first = 1; { int relestim = (int) (CS_EKR * *p->dettack); /* 0.1 second decay extention */ if (relestim > p->h.insdshead->xtratim) p->h.insdshead->xtratim = relestim; } p->kloop = (int) ((int32) (p->h.insdshead->offtim * CS_EKR) - (int32) (CS_EKR * *p->dettack)); return OK; }