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; }
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; }
static t_int *marimba_perform(t_int *w) { t_marimba *x = (t_marimba *)(w[1]); float sh = x->x_sh; float spos = x->x_spos; float sa = x->x_sa; float vf = x->x_vf; float va = x->x_va; float fr = x->x_fr; t_float *out = (t_float *)(w[2]); long n = w[3]; if(fr != x->fr_save) { Modal4_setFreq(&x->modal, fr); x->fr_save = fr; } if(sh != x->sh_save) { Marimba_setStickHardness(x, sh); x->sh_save = sh; } if(spos != x->spos_save) { Marimba_setStrikePosition(x, spos); x->spos_save = spos; } if(sa != x->sa_save) { Marimba_strike(x, sa); x->sa_save = sa; } HeaderSnd_setFreq(&x->modal.vibr, vf, x->srate); x->modal.vibrGain = va; while(n--) { if (x->multiStrike > 0) { if(x->modal.wave.finished) { HeaderSnd_reset(&x->modal.wave); x->multiStrike -= 1; } } *out++ = Modal4_tick(&x->modal); } return w + 4; }
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; }