Beispiel #1
0
int main() {
    udata ud;
    sp_data *sp;
    sp_create(&sp);

    sp_vdelay_create(&ud.del);
    sp_ftbl_create(sp, &ud.ft, 2048);
    sp_osc_create(&ud.osc);
    sp_ftbl_create(sp, &ud.sine, 4096);
    sp_osc_create(&ud.lfo);

    sp_vdelay_init(sp, ud.del, 0.5);
    sp_gen_file(sp, ud.ft, "Formant04.wav");
    sp_osc_init(sp, ud.osc, ud.ft, 0);
    ud.osc->freq = sp_midi2cps(50);

    sp_gen_sine(sp, ud.sine);
    sp_osc_init(sp, ud.lfo, ud.sine, 0);
    ud.lfo->freq = 0.2;

    sp->len = 44100 * 5;
    sp_process(sp, &ud, process);

    sp_vdelay_destroy(&ud.del);
    sp_ftbl_destroy(&ud.ft);
    sp_ftbl_destroy(&ud.sine);
    sp_osc_destroy(&ud.osc);
    sp_osc_destroy(&ud.lfo);
    sp_destroy(&sp);
    return 0;
}
Beispiel #2
0
int main()
{
    srand(time(NULL));
    int i;
    UserData ud;
    ud.pdel = 0;
    sp_data *sp;
    sp_create(&sp);
    sp->len = 44100 * 40;
    char *notes[] = {
        "62 69 78",
        "55 62 69 71",
        "43 50"
    };


    for(i = 0; i < NUMLINE; i++) {
        sp_randi_create(&ud.line[i].randi);
        chord_cloud_create(&ud.line[i].cc);
        chord_cloud_init(sp, ud.line[i].cc, notes[i], 0.1);
        sp_randi_init(sp, ud.line[i].randi, rand());
        ud.line[i].randi->cps = 0.1 + randf(1.5);
    }
    sp_revsc_create(&ud.rev);
    sp_revsc_init(sp, ud.rev);
    ud.rev->feedback = 0.95;
    sp_metro_create(&ud.clk);
    sp_metro_init(sp, ud.clk);
    ud.clk->freq = 86.0 / 60.0;
    sp_count_create(&ud.meter);
    sp_count_init(sp, ud.meter);
    ud.meter->count = 5;
    sp_drip_create(&ud.drip);
    sp_drip_init(sp, ud.drip, 0.01);
    sp_vdelay_create(&ud.del);
    /* give some headroom for the delay */
    sp_vdelay_init(sp, ud.del, 0.4);
    ud.del->del = 0.3;

    sp_tenv_create(&ud.master);
    sp_tenv_init(sp, ud.master);
    ud.master->atk = 0;
    ud.master->hold = 30;
    ud.master->rel =  10;


    sp_progress_create(&ud.prog);
    sp_progress_init(sp, ud.prog);

    modal_create(&ud.mod);
    modal_init(sp, ud.mod);
    sp_ftbl_create(sp, &ud.notes, 1);
    sp_gen_vals(sp, ud.notes, "62 64 59 57");
    sp_tseq_create(&ud.seq);
    sp_tseq_init(sp, ud.seq, ud.notes);
    sp_maygate_create(&ud.mg);
    sp_maygate_init(sp, ud.mg);
    ud.mg->prob = 0.3;
    ud.mg->mode = 1;
    sp_process(sp, &ud, process);

    for(i = 0; i < NUMLINE; i++) {
        sp_randi_destroy(&ud.line[i].randi);
        chord_cloud_destroy(&ud.line[i].cc);
    }


    sp_drip_destroy(&ud.drip);
    sp_revsc_destroy(&ud.rev);
    sp_metro_destroy(&ud.clk);
    sp_count_destroy(&ud.meter);
    sp_vdelay_destroy(&ud.del);
    sp_tenv_destroy(&ud.master);
    modal_destroy(&ud.mod);
    sp_ftbl_destroy(&ud.notes);
    sp_tseq_destroy(&ud.seq);
    sp_maygate_destroy(&ud.mg);
    sp_progress_destroy(&ud.prog);

    sp_destroy(&sp);
    return 0;
}
Beispiel #3
0
int sporth_vdelay(sporth_stack *stack, void *ud)
{
    plumber_data *pd = ud;
    SPFLOAT in;
    SPFLOAT out;
    SPFLOAT maxdel;
    SPFLOAT feedback;
    SPFLOAT del;
    sporth_vdelay_d *vd;

    switch(pd->mode) {
        case PLUMBER_CREATE:

#ifdef DEBUG_MODE
            fprintf(stderr, "vdelay: Creating\n");
#endif
            vd = malloc(sizeof(sporth_vdelay_d));
            sp_vdelay_create(&vd->vdelay);
            plumber_add_ugen(pd, SPORTH_VDELAY, vd);
            if(sporth_check_args(stack, "ffff") != SPORTH_OK) {
                fprintf(stderr,"Not enough arguments for vdelay\n");
                stack->error++;
                return PLUMBER_NOTOK;
            }
            maxdel = sporth_stack_pop_float(stack);
            del = sporth_stack_pop_float(stack);
            feedback = sporth_stack_pop_float(stack);
            in = sporth_stack_pop_float(stack);
            vd->prev = 0;
            sporth_stack_push_float(stack, 0);
            break;
        case PLUMBER_INIT:

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

            maxdel = sporth_stack_pop_float(stack);
            del = sporth_stack_pop_float(stack);
            feedback = sporth_stack_pop_float(stack);
            in = sporth_stack_pop_float(stack);
            vd = pd->last->ud;
            vd->prev = 0;
            sp_vdelay_init(pd->sp, vd->vdelay, maxdel);
            sporth_stack_push_float(stack, 0);
            break;
        case PLUMBER_COMPUTE:
            vd = pd->last->ud;
            maxdel = sporth_stack_pop_float(stack);
            del = sporth_stack_pop_float(stack);
            feedback = sporth_stack_pop_float(stack);
            in = sporth_stack_pop_float(stack);
            in += vd->prev * feedback;
            vd->vdelay->del = del;
            sp_vdelay_compute(pd->sp, vd->vdelay, &in, &out);
            sporth_stack_push_float(stack, out);
            vd->prev = out;
            break;
        case PLUMBER_DESTROY:
            vd= pd->last->ud;
            sp_vdelay_destroy(&vd->vdelay);
            free(vd);
            break;
        default:
            fprintf(stderr, "vdelay: Uknown mode!\n");
            break;
    }
    return PLUMBER_OK;
}