void write_osc(sp_data *sp, void *ud) { UserData *udp = ud; SPFLOAT trig, rev1, rev2, drip; sp_dust_compute(sp, udp->trig, NULL, &trig); sp_drip_compute(sp, udp->drip, &trig, &drip); sp_revsc_compute(sp, udp->rev, &drip, &drip, &rev1, &rev2); sp->out[0] = drip + rev1 * 0.05; }
int chord_cloud_compute(sp_data *sp, chord_cloud *cc, SPFLOAT *in, SPFLOAT *out) { int i; SPFLOAT dust = 0, osc = 0, env = 0, tmp = 0, dummy; for(i = 0; i < cc->notes->size; i++) { chord_grain *grain = &cc->grains[i]; sp_dust_compute(sp, grain->dust, NULL, &dust); sp_tenv_compute(sp, grain->env, &dust, &env); sp_osc_compute(sp, grain->osc, NULL, &osc); sp_tevent_compute(sp, grain->retrig, &dust, &dummy); tmp += osc * env * cc->ampmax * grain->amp; } *out = tmp; return SP_OK; }
void write_dust(sp_data *data, void *ud) { udata *udata = ud; SPFLOAT in = 0; sp_dust_compute(data, udata->dst, NULL, &data->out[0]); }