Example #1
0
void process(sp_data *sp, void *udata) {
    user_data *ud = udata;
    SPFLOAT dry;
    SPFLOAT kick, snare, hh, clk, dblclk, bar, dtrig, count;
    SPFLOAT revin, revout, rthrow, rgate, rpt, rvs, rvs_switch, foo;
    SPFLOAT reps;
    sp_metro_compute(sp, ud->clk, NULL, &clk);
    sp_metro_compute(sp, ud->dblclk, NULL, &dblclk);
    sp_count_compute(sp, ud->cnt, &clk, &count);
    bar = (count == 0 && clk);
    sp_dtrig_compute(sp, ud->snare.dt, &bar, &dtrig);
    sp_tevent_compute(sp, ud->snare.te, &dtrig, &snare);

    sp_maygate_compute(sp, ud->rthrow, &dtrig, &rthrow);
    revin = snare * rthrow;
    sp_revsc_compute(sp, ud->rev, &revin, &revin, &revout, &foo);

    sp_dtrig_compute(sp, ud->kick.dt, &bar, &dtrig);
    sp_tevent_compute(sp, ud->kick.te, &dtrig, &kick);
    sp_dtrig_compute(sp, ud->hh.dt, &bar, &dtrig);
    sp_tevent_compute(sp, ud->hh.te, &dtrig, &hh);

    dry = snare + kick + hh * 0.5 + revout * 0.1;
    sp_maygate_compute(sp, ud->rgate, &dblclk, &rgate);
    sp_tseq_compute(sp, ud->rpick, &dblclk, &reps);

    sp_rpt_compute(sp, ud->rpt, &rgate, &dry, &rpt);
    sp_reverse_compute(sp, ud->rvs, &rpt, &rvs);
    sp_maygate_compute(sp, ud->rvs_switch, &clk, &rvs_switch);

    sp->out[0] = (rvs_switch) ? rvs : rpt;
}
Example #2
0
void write_osc(sp_data *data, void *ud) {
    udata *udp = ud;
    SPFLOAT trig = 0;
    if(udp->counter == 0){
        trig = 1.0;
    }
    sp_tevent_compute(data, udp->te, &trig, &udp->osc->freq);
    sp_osc_compute(data, udp->osc, NULL, &data->out[0]);
    udp->counter = (udp->counter + 1) % 4410;
}
Example #3
0
void write_osc(sp_data *data, void *ud) {
    udata *udp = ud;
    SPFLOAT trig = 0;
    SPFLOAT env = 0;
    SPFLOAT osc = 0;
    sp_metro_compute(data, udp->met, NULL, &trig);
    sp_tevent_compute(data, udp->te, &trig, &udp->osc->freq);
    sp_osc_compute(data, udp->osc, NULL, &osc);
    sp_tenv_compute(data, udp->tenv, &trig, &env);

    data->out[0] = osc * env;
}
Example #4
0
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;
}
Example #5
0
int sp_tenv_compute(sp_data *sp, sp_tenv *p, SPFLOAT *in, SPFLOAT *out)
{
    sp_tevent_compute(sp, p->te, in, out);
    return SP_OK;
}