コード例 #1
0
ファイル: ex_music2.c プロジェクト: OpenDAWN/Soundpipe
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;
}
コード例 #2
0
ファイル: p_maygate.c プロジェクト: PaulBatchelor/Soundpipe
int main() {
    sp_data *sp;
    sp_create(&sp);
    sp_srand(sp, 12345);
    sp->sr = SR;
    sp->len = sp->sr * LEN;
    uint32_t t, u;
    SPFLOAT in = 0, out = 0;

    sp_maygate *unit[NUM];

    for(u = 0; u < NUM; u++) { 
        sp_maygate_create(&unit[u]);
        sp_maygate_init(sp, unit[u]);
    }

    for(t = 0; t < sp->len; t++) {
        for(u = 0; u < NUM; u++) sp_maygate_compute(sp, unit[u], &in, &out);
    }

    for(u = 0; u < NUM; u++) sp_maygate_destroy(&unit[u]);

    sp_destroy(&sp);
    return 0;
}
コード例 #3
0
ファイル: maygate.c プロジェクト: Ferrick90/AudioKit
int sporth_maygate(sporth_stack *stack, void *ud)
{
    plumber_data *pd = ud;
    SPFLOAT trig;
    SPFLOAT out;
    SPFLOAT prob;
    sp_maygate *maygate;

    switch(pd->mode) {
        case PLUMBER_CREATE:

#ifdef DEBUG_MODE
            fprintf(stderr, "maygate: Creating\n");
#endif

            sp_maygate_create(&maygate);
            plumber_add_ugen(pd, SPORTH_MAYGATE, maygate);
            if(sporth_check_args(stack, "ff") != SPORTH_OK) {
                fprintf(stderr,"Not enough arguments for maygate\n");
                stack->error++;
                return PLUMBER_NOTOK;
            }
            prob = sporth_stack_pop_float(stack);
            trig = sporth_stack_pop_float(stack);
            sporth_stack_push_float(stack, 0);
            break;
        case PLUMBER_INIT:

#ifdef DEBUG_MODE
            fprintf(stderr, "maygate: Initialising\n");
#endif

            prob = sporth_stack_pop_float(stack);
            trig = sporth_stack_pop_float(stack);
            maygate = pd->last->ud;
            sp_maygate_init(pd->sp, maygate);
            maygate->mode = 0;
            sporth_stack_push_float(stack, 0);
            break;
        case PLUMBER_COMPUTE:
            prob = sporth_stack_pop_float(stack);
            trig = sporth_stack_pop_float(stack);
            maygate = pd->last->ud;
            maygate->prob = prob;
            sp_maygate_compute(pd->sp, maygate, &trig, &out);
            sporth_stack_push_float(stack, out);
            break;
        case PLUMBER_DESTROY:
            maygate = pd->last->ud;
            sp_maygate_destroy(&maygate);
            break;
        default:
            fprintf(stderr, "maygate: Unknown mode!\n");
            break;
    }
    return PLUMBER_OK;
}
コード例 #4
0
ファイル: ex_rpt.c プロジェクト: PaulBatchelor/Soundpipe
void compute(sp_data *sp, void *udata){
    UserData *ud = udata;
    SPFLOAT met, osc, env, rpt, maygate, trig, dry;
    sp_metro_compute(sp, ud->mt, NULL, &met);
    sp_tenv_compute(sp, ud->te, &met, &env);
    sp_osc_compute(sp, ud->osc, NULL, &osc);
    dry = osc * env;
    sp_maygate_compute(sp, ud->mg, &met, &maygate);
    trig = met * maygate;
    sp_rpt_compute(sp, ud->rpt, &trig, &dry, &rpt);
    sp->out[0] = rpt;
}
コード例 #5
0
ファイル: ex_music3.c プロジェクト: OpenDAWN/Soundpipe
void process(sp_data *sp, void *udata)
{
    UserData *ud = udata;
    int i;
    SPFLOAT line = 0, cloud = 0, tmp = 0, revin = 0, rev = 0, dummy, drip = 0;
    SPFLOAT count = 0;
    SPFLOAT bar = 0, clk = 0, delIn = 0, delOut = 0;
    SPFLOAT mode = 0;

    for(i = 0; i < NUMLINE; i++) {
        sp_randi_compute(sp, ud->line[i].randi, NULL, &line);
        chord_cloud_compute(sp, ud->line[i].cc, NULL, &cloud);
        tmp += cloud * line;
    }
    revin += tmp * 0.5;
    sp_metro_compute(sp, ud->clk, NULL, &clk);
    sp_count_compute(sp, ud->meter, &clk, &count);
    bar = (count == 0 && clk);
    sp_drip_compute(sp, ud->drip, &bar, &drip);
    drip *= 0.5;
    revin += drip * 0.1;

    if(sp->pos > 44100 * 3) {
        SPFLOAT mg = 0, nn = 0;
        sp_maygate_compute(sp, ud->mg, &clk, &mg);
        sp_tseq_compute(sp, ud->seq, &mg, &nn);
        *ud->mod->freq = sp_midi2cps(nn + 12);
        modal_compute(sp, ud->mod, &mg, &mode);
        mode *= 0.3;
        revin += mode * 0.8;
        delIn += mode * 0.5;
    }

    delIn += drip * 0.1 + ud->pdel * 0.6;
    sp_vdelay_compute(sp, ud->del, &delIn, &delOut);
    ud->pdel = delOut;
    revin += delOut * 0.1;


    sp_revsc_compute(sp, ud->rev, &revin, &revin, &rev, &dummy);
    sp->out[0] = tmp * 0.2 + rev * 0.6 + drip * 0.1 + delOut * 0.5 + mode;

    /* Master fader */
    SPFLOAT mtick = (sp->pos == 0) ? 1.0 : 0.0;
    SPFLOAT fader = 0;
    sp_tenv_compute(sp, ud->master, &mtick, &fader);
    sp->out[0] *= fader;
    sp_progress_compute(sp, ud->prog, NULL, NULL);

}