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; }
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; }
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; }