int vibraphn(CSOUND *csound, VIBRAPHN *p) { Modal4 *m = &(p->m4); MYFLT *ar = p->ar; uint32_t offset = p->h.insdshead->ksmps_offset; uint32_t early = p->h.insdshead->ksmps_no_end; uint32_t n, nsmps = CS_KSMPS; MYFLT amp = (*p->amplitude)*AMP_RSCALE; /* Normalise */ if (p->kloop>0 && p->h.insdshead->relesing) p->kloop=1; if ((--p->kloop) == 0) { Modal4_damp(csound, m, FL(1.0) - (amp * FL(0.03))); } if (UNLIKELY(p->first)) { Modal4_strike(csound, m, *p->amplitude * AMP_RSCALE); Modal4_setFreq(csound, m, *p->frequency); p->first = 0; } p->m4.v_rate = *p->vibFreq; p->m4.vibrGain =*p->vibAmt; if (UNLIKELY(offset)) memset(ar, '\0', offset*sizeof(MYFLT)); if (UNLIKELY(early)) { nsmps -= early; memset(&ar[nsmps], '\0', early*sizeof(MYFLT)); } for (n=offset;n<nsmps;n++) { MYFLT lastOutput = Modal4_tick(m); ar[n] = lastOutput*FL(8.0)*AMP_SCALE;/* Times 8 as seems too quiet */ } return OK; }
int agogobel(CSOUND *csound, VIBRAPHN *p) { Modal4 *m = &(p->m4); MYFLT *ar = p->ar; uint32_t offset = p->h.insdshead->ksmps_offset; uint32_t early = p->h.insdshead->ksmps_no_end; uint32_t n, nsmps = CS_KSMPS; p->m4.v_rate = *p->vibFreq; p->m4.vibrGain =*p->vibAmt; if (UNLIKELY(p->first)) { Modal4_strike(csound, m, *p->amplitude * AMP_RSCALE); Modal4_setFreq(csound, m, *p->frequency); p->first = 0; } if (UNLIKELY(offset)) memset(ar, '\0', offset*sizeof(MYFLT)); if (UNLIKELY(early)) { nsmps -= early; memset(&ar[nsmps], '\0', early*sizeof(MYFLT)); } for (n=offset;n<nsmps;n++) { MYFLT lastOutput = Modal4_tick(m); ar[n] = lastOutput*AMP_SCALE; } return OK; }
static void Marimba_strike(t_marimba *x, float amplitude) { int temp; temp = rand() >> 10; if (temp < 2) { x->multiStrike = 1; } else if (temp < 1) { x->multiStrike = 2; } else x->multiStrike = 0; Modal4_strike(&x->modal, amplitude); }
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; }
int marimba(CSOUND *csound, MARIMBA *p) { Modal4 *m = &(p->m4); MYFLT *ar = p->ar; uint32_t offset = p->h.insdshead->ksmps_offset; uint32_t early = p->h.insdshead->ksmps_no_end; uint32_t n, nsmps = CS_KSMPS; MYFLT amp = (*p->amplitude) * AMP_RSCALE; /* Normalise */ if (p->kloop>0 && p->h.insdshead->relesing) p->kloop=1; if ((--p->kloop) == 0) { Modal4_damp(csound, m, FL(1.0) - (amp * FL(0.03))); } p->m4.v_rate = *p->vibFreq; /* 6.0; */ p->m4.vibrGain = *p->vibAmt; /* 0.05; */ if (UNLIKELY(p->first)) { Modal4_strike(csound, m, *p->amplitude * AMP_RSCALE); Modal4_setFreq(csound, m, *p->frequency); p->first = 0; } if (UNLIKELY(offset)) memset(ar, '\0', offset*sizeof(MYFLT)); if (UNLIKELY(early)) { nsmps -= early; memset(&ar[nsmps], '\0', early*sizeof(MYFLT)); } for (n=offset;n<nsmps;n++) { MYFLT lastOutput; if (p->multiStrike>0) if (p->m4.w_allDone) { p->m4.w_time = FL(0.0); //p->m4.w_lastOutput = FL(0.0); p->m4.w_allDone = 0; p->multiStrike -= 1; } lastOutput = Modal4_tick(m); ar[n] = lastOutput*AMP_SCALE*FL(0.5); } return OK; }
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; }