int main() { srand(1234567); UserData ud; sp_data *sp; sp_create(&sp); sp_pluck_create(&ud.pluck); sp_osc_create(&ud.osc); sp_metro_create(&ud.met); sp_ftbl_create(sp, &ud.ft, 2048); sp_pluck_init(sp, ud.pluck, 110); sp_gen_sine(sp, ud.ft); sp_metro_init(sp, ud.met, 2); sp_osc_init(sp, ud.osc, ud.ft, 0); ud.osc->freq = 1; ud.osc->amp = 1; sp->len = 44100 * 5; sp_process(sp, &ud, process); sp_pluck_destroy(&ud.pluck); sp_ftbl_destroy(&ud.ft); sp_osc_destroy(&ud.osc); sp_metro_destroy(&ud.met); sp_destroy(&sp); return 0; }
int main() { UserData ud; sp_data *sp; sp_create(&sp); sp_srand(sp, 1234567); sp_metro_create(&ud.met); sp_trand_create(&ud.trand); sp_osc_create(&ud.osc); sp_ftbl_create(sp, &ud.ft, 2048); sp_metro_init(sp, ud.met); ud.met->freq = 20; sp_trand_init(sp, ud.trand); ud.trand->min = 40; ud.trand->max = 1000; sp_gen_sine(sp, ud.ft); sp_osc_init(sp, ud.osc, ud.ft, 0); sp->len = 44100 * 5; sp_process(sp, &ud, process); sp_trand_destroy(&ud.trand); sp_ftbl_destroy(&ud.ft); sp_osc_destroy(&ud.osc); sp_metro_destroy(&ud.met); sp_destroy(&sp); return 0; }
int main() { srand(time(NULL)); udata ud; SPFLOAT *freqp = &ud.freq; ud.freq = 400; sp_data *sp; sp_create(&sp); sp_tenv_create(&ud.tenv); sp_metro_create(&ud.met); sp_tevent_create(&ud.te); sp_ftbl_create(sp, &ud.ft, 2048); sp_osc_create(&ud.osc); sp_tenv_init(sp, ud.tenv); ud.tenv->atk = 0.03; ud.tenv->hold = 0.01; ud.tenv->rel = 0.1; sp_metro_init(sp, ud.met); ud.met->freq = 3; sp_tevent_init(sp, ud.te, freq_reinit, freq_compute, freqp); sp_gen_sine(sp, ud.ft); sp_osc_init(sp, ud.osc, ud.ft, 0); ud.osc->freq = *freqp; sp->len = 44100 * 5; sp_process(sp, &ud, write_osc); sp_tenv_destroy(&ud.tenv); sp_metro_destroy(&ud.met); sp_ftbl_destroy(&ud.ft); sp_osc_destroy(&ud.osc); sp_tevent_destroy(&ud.te); sp_destroy(&sp); return 0; }
int t_pluck(sp_test *tst, sp_data *sp, const char *hash) { uint32_t n; int fail = 0; UserData ud; sp_srand(sp, 1337); SPFLOAT pluck = 0, met = 0; SPFLOAT notes[] = {60, 63, 67, 70, 74}; sp_pluck_create(&ud.pluck); sp_metro_create(&ud.met); sp_pluck_init(sp, ud.pluck, 400); sp_metro_init(sp, ud.met); ud.met->freq = 4; for(n = 0; n < tst->size; n++) { pluck = 0, met = 0; sp_metro_compute(sp, ud.met, NULL, &met); if(met) { ud.pluck->freq = sp_midi2cps(notes[sp_rand(sp) % 5]); } sp_pluck_compute(sp, ud.pluck, &met, &pluck); sp_test_add_sample(tst, pluck); } fail = sp_test_verify(tst, hash); sp_pluck_destroy(&ud.pluck); sp_metro_destroy(&ud.met); if(fail) return SP_NOT_OK; else return SP_OK; }
int t_delay(sp_test *tst, sp_data *sp, const char *hash) { uint32_t n; int fail = 0; SPFLOAT osc = 0, delay = 0, met = 0, tenv = 0; UserData ud; sp_delay_create(&ud.delay); sp_osc_create(&ud.osc); sp_ftbl_create(sp, &ud.ft, 2048); sp_metro_create(&ud.met); sp_tenv_create(&ud.tenv); sp_delay_init(sp, ud.delay, 0.75 * 0.5); ud.delay->feedback = 0.5; sp_gen_sine(sp, ud.ft); sp_osc_init(sp, ud.osc, ud.ft, 0); ud.osc->amp = 0.5; sp_metro_init(sp, ud.met); ud.met->freq = 1; sp_tenv_init(sp, ud.tenv); ud.tenv->atk = 0.005; ud.tenv->hold = 0.1; ud.tenv->rel = 0.1; for(n = 0; n < tst->size; n++) { osc = 0, delay = 0, met = 0, tenv = 0; sp_metro_compute(sp, ud.met, NULL, &met); sp_tenv_compute(sp, ud.tenv, &met, &tenv); if(met) { ud.osc->freq = 100 + sp_rand(sp) % 500; } sp_osc_compute(sp, ud.osc, NULL, &osc); osc *= tenv; sp_delay_compute(sp, ud.delay, &osc, &delay); sp_test_add_sample(tst, osc + delay); } if(sp_test_compare(tst, hash) == SP_NOT_OK) { printf("Generated hash %s does not match reference hash %s\n", tst->md5string, hash); fail = 1; } if(fail) return SP_NOT_OK; else return SP_OK; }
int t_mode(sp_test *tst, sp_data *sp, const char *hash) { uint32_t n; int fail = 0; UserData ud; SPFLOAT met = 0, mod = 0, nn; modal_create(&ud.mod); modal_init(sp, ud.mod); sp_metro_create(&ud.met); sp_metro_init(sp, ud.met); ud.met->freq = 3.0; sp_ftbl_create(sp, &ud.notes, 1); sp_gen_vals(sp, ud.notes, "60 67 62 69 76"); sp_tseq_create(&ud.seq); sp_tseq_init(sp, ud.seq, ud.notes); for(n = 0; n < tst->size; n++) { met = 0; mod = 0; nn = 0; sp_metro_compute(sp, ud.met, NULL, &met); sp_tseq_compute(sp, ud.seq, &met, &nn); *ud.mod->freq = sp_midi2cps(nn); modal_compute(sp, ud.mod, &met, &mod); sp->out[0] = mod; sp_test_add_sample(tst, sp->out[0]); } fail = sp_test_verify(tst, hash); modal_destroy(&ud.mod); sp_metro_destroy(&ud.met); sp_ftbl_destroy(&ud.notes); sp_tseq_destroy(&ud.seq); if(fail) return SP_NOT_OK; else return SP_OK; }
int sporth_metro(sporth_stack *stack, void *ud) { plumber_data *pd = ud; SPFLOAT freq; SPFLOAT out; sp_metro *data; switch(pd->mode) { case PLUMBER_CREATE: sp_metro_create(&data); plumber_add_ugen(pd, SPORTH_METRO, data); if(sporth_check_args(stack, "f") != SPORTH_OK) { fprintf(stderr,"Not enough arguments for metro\n"); stack->error++; return PLUMBER_NOTOK; } freq = sporth_stack_pop_float(stack); sporth_stack_push_float(stack, 0); break; case PLUMBER_INIT: data = pd->last->ud; sp_metro_init(pd->sp, data); sporth_stack_push_float(stack, 0); break; case PLUMBER_COMPUTE: freq = sporth_stack_pop_float(stack); data = pd->last->ud; data->freq = freq; sp_metro_compute(pd->sp, data, NULL, &out); sporth_stack_push_float(stack, out); break; case PLUMBER_DESTROY: data = pd->last->ud; sp_metro_destroy(&data); break; default: fprintf(stderr,"Error: Unknown mode!"); break; } return PLUMBER_OK; }
int main(){ sp_data *sp; UserData ud; sp_create(&sp); int tempo = 120; sp_rpt_create(&ud.rpt); sp_maygate_create(&ud.mg); sp_osc_create(&ud.osc); sp_ftbl_create(sp, &ud.ft, 4096); sp_metro_create(&ud.mt); sp_tenv_create(&ud.te); sp_maygate_init(sp, ud.mg); ud.mg->prob = 0.5; sp_gen_sine(sp, ud.ft); sp_osc_init(sp, ud.osc, ud.ft, 0); sp_metro_init(sp, ud.mt); ud.mt->freq = tempo / 60.0; sp_rpt_init(sp, ud.rpt, 1.0); ud.rpt->bpm = tempo; ud.rpt->div = 8; ud.rpt->rep = 4; sp_tenv_init(sp, ud.te); ud.te->atk = 0.001; ud.te->hold = 0.1; ud.te->rel = 0.1; sp_process(sp, &ud, compute); sp_tenv_destroy(&ud.te); sp_metro_destroy(&ud.mt); sp_ftbl_destroy(&ud.ft); sp_osc_destroy(&ud.osc); sp_rpt_destroy(&ud.rpt); sp_destroy(&sp); return 0; }
int main() { srand(1234567); UserData ud; sp_data *sp; sp_create(&sp); sp_delay_create(&ud.delay); sp_osc_create(&ud.osc); sp_ftbl_create(sp, &ud.ft, 2048); sp_metro_create(&ud.met); sp_tenv_create(&ud.tenv); sp_delay_init(sp, ud.delay, 0.75 * 0.5); ud.delay->feedback = 0.5; sp_gen_sine(sp, ud.ft); sp_osc_init(sp, ud.osc, ud.ft, 0); ud.osc->amp = 0.5; sp_metro_init(sp, ud.met); ud.met->freq = 1; sp_tenv_init(sp, ud.tenv); ud.tenv->atk = 0.005; ud.tenv->hold = 0.1; ud.tenv->rel = 0.1; sp->len = 44100 * 5; sp_process(sp, &ud, process); sp_delay_destroy(&ud.delay); sp_ftbl_destroy(&ud.ft); sp_osc_destroy(&ud.osc); sp_metro_destroy(&ud.met); sp_tenv_destroy(&ud.tenv); sp_destroy(&sp); return 0; }
int main() { srand(time(NULL)); sp_data *sp; user_data ud; sp_create(&sp); SPFLOAT tempo = 144; ud.tempo = tempo; /* Create */ sp_count_create(&ud.cnt); sp_metro_create(&ud.clk); sp_metro_create(&ud.dblclk); samp_create(sp, &ud.snare, 5574, "snare.wav", "2 0.75 0.25", tempo, 1); samp_create(sp, &ud.kick, 7385, "kick.wav", "0.75 1.25 1 1", tempo, 0); samp_create(sp, &ud.hh, 4507, "hh.wav", "0.5 0.25 0.5 0.5 0.25 0.5 0.25 0.5 0.5 0.25", tempo, 0); sp_revsc_create(&ud.rev); sp_maygate_create(&ud.rthrow); sp_maygate_create(&ud.rgate); sp_rpt_create(&ud.rpt); sp_ftbl_create(sp, &ud.reps, 1); sp_tseq_create(&ud.rpick); sp_gen_vals(sp, ud.reps, "4 8 16 6"); sp_tseq_init(sp, ud.rpick, ud.reps); ud.rpick->shuf = 1.0; sp_reverse_create(&ud.rvs); sp_maygate_create(&ud.rvs_switch); /* Init */ sp->len = 44100 * (60.0 / tempo) * 32; sp_count_init(sp, ud.cnt); ud.cnt->count = 4; sp_metro_init(sp, ud.clk); ud.clk->freq = tempo / 60.0; sp_metro_init(sp, ud.dblclk); ud.dblclk->freq = tempo * 2 / 60.0; sp_revsc_init(sp, ud.rev); ud.rev->feedback = 0.9; ud.rev->lpfreq = 10000; sp_maygate_init(sp, ud.rthrow); ud.rthrow->prob = 0.5; sp_rpt_init(sp, ud.rpt, 1.0); //sp_rpt_set(ud.rpt, tempo, 8, 4); ud.rpt->bpm = tempo; ud.rpt->div = 8; ud.rpt->reps = 4; sp_maygate_init(sp, ud.rgate); ud.rgate->prob = 0.18; ud.rgate->mode = 1.0; sp_reverse_init(sp, ud.rvs, 60.0 / tempo); sp_maygate_init(sp, ud.rvs_switch); ud.rvs_switch->prob = 0.1; /* Process */ sp_process(sp, &ud, process); /* Destroy */ samp_destroy(&ud.snare); samp_destroy(&ud.kick); samp_destroy(&ud.hh); sp_revsc_destroy(&ud.rev); sp_maygate_destroy(&ud.rthrow); sp_maygate_destroy(&ud.rgate); sp_maygate_destroy(&ud.rvs_switch); sp_count_destroy(&ud.cnt); sp_metro_destroy(&ud.clk); sp_metro_destroy(&ud.dblclk); sp_rpt_destroy(&ud.rpt); sp_ftbl_destroy(&ud.reps); sp_tseq_destroy(&ud.rpick); sp_reverse_destroy(&ud.rvs); 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; }