int main() { srand(1234567); UserData ud; sp_data *sp; sp_create(&sp); sp_ftbl_loadfile(sp, &ud.wav, "oneart.wav"); sp_ftbl_create(sp, &ud.win, 1024); sp_fog_create(&ud.fog); sp_phasor_create(&ud.phs); sp_gen_composite(sp, ud.win, "0.5 0.5 270 0.5"); sp_fog_init(sp, ud.fog, ud.wav, ud.win, 100, 0); ud.fog->trans = 0.9; sp_phasor_init(sp, ud.phs, 0); ud.phs->freq = 0.3 / ((SPFLOAT)ud.wav->size / sp->sr); sp->len = 44100 * 10; sp_process(sp, &ud, process); sp_fog_destroy(&ud.fog); sp_ftbl_destroy(&ud.wav); sp_ftbl_destroy(&ud.win); sp_phasor_destroy(&ud.phs); sp_destroy(&sp); return 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; }
int sp_gen_line(sp_data *sp, sp_ftbl *ft, const char *argstring) { uint16_t i, n = 0, seglen; SPFLOAT incr, amp = 0; SPFLOAT x1, x2, y1, y2; sp_ftbl *args; sp_ftbl_create(sp, &args, 1); sp_gen_vals(sp, args, argstring); if((args->size % 2) == 1 || args->size == 1) { fprintf(stderr, "Error: not enough arguments for gen_line.\n"); sp_ftbl_destroy(&args); return SP_NOT_OK; } else if(args->size == 2) { for(i = 0; i < ft->size; i++) { ft->tbl[i] = args->tbl[1]; } return SP_OK; } x1 = args->tbl[0]; y1 = args->tbl[1]; for(i = 2; i < args->size; i += 2) { x2 = args->tbl[i]; y2 = args->tbl[i + 1]; if(x2 < x1) { fprintf(stderr, "Error: x coordiates must be sequential!\n"); break; } seglen = (x2 - x1); incr = (SPFLOAT)(y2 - y1) / (seglen - 1); amp = y1; while(seglen != 0){ if(n < ft->size) { ft->tbl[n] = amp; amp += incr; seglen--; n++; } else { break; } } y1 = y2; x1 = x2; } sp_ftbl_destroy(&args); return SP_OK; }
int main() { srand(1234567); UserData ud; sp_data *sp; sp_create(&sp); sp_expon_create(&ud.line); sp_osc_create(&ud.osc); sp_ftbl_create(sp, &ud.ft, 2048); sp_dmetro_create(&ud.dm); sp_expon_init(sp, ud.line); ud.line->a = 100; ud.line->b = 400; ud.line->dur = 1; sp_gen_sine(sp, ud.ft); sp_osc_init(sp, ud.osc, ud.ft, 0); sp_dmetro_init(sp, ud.dm); ud.dm->time = 2; sp->len = 44100 * 5; sp_process(sp, &ud, process); sp_expon_destroy(&ud.line); sp_ftbl_destroy(&ud.ft); sp_osc_destroy(&ud.osc); sp_dmetro_destroy(&ud.dm); sp_destroy(&sp); return 0; }
int main() { srand(time(NULL)); udata ud; SPFLOAT *freqp = &ud.freq; ud.counter = 0; ud.freq = 400; sp_data *sp; sp_create(&sp); sp_tevent_create(&ud.te); sp_ftbl_create(sp, &ud.ft, 2048); sp_osc_create(&ud.osc); 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); ud.osc->freq = *freqp; sp->len = 44100 * 5; sp_process(sp, &ud, write_osc); sp_ftbl_destroy(&ud.ft); sp_osc_destroy(&ud.osc); sp_tevent_destroy(&ud.te); sp_destroy(&sp); return 0; }
int main() { srand(time(NULL)); udata ud; uint32_t bufsize; sp_data *sp; sp_create(&sp); sp_reverse_create(&ud.rv); sp_tenv_create(&ud.tenv); sp_ftbl_create(sp, &ud.ft, 2048); sp_osc_create(&ud.osc); sp_reverse_init(sp, ud.rv, 1.0); sp_tenv_init(sp, ud.tenv); ud.tenv->atk = 0.03; ud.tenv->hold = 0.01; ud.tenv->rel = 0.3; sp_gen_sine(sp, ud.ft); sp_osc_init(sp, ud.osc, ud.ft, 0); ud.osc->freq = 1000; ud.osc->amp = 0.5; sp->len = 44100 * 5; sp_process(sp, &ud, write_osc); sp_reverse_destroy(&ud.rv); sp_tenv_destroy(&ud.tenv); sp_ftbl_destroy(&ud.ft); sp_osc_destroy(&ud.osc); sp_destroy(&sp); return 0; }
int main() { UserData ud; sp_data *sp; sp_create(&sp); sp_srand(sp, 1234567); sp_mincer_create(&ud.mincer); /* allocates loads an audio file into a ftable */ sp_ftbl_loadfile(sp, &ud.ft, "oneart.wav"); sp_randi_create(&ud.randi); sp_mincer_init(sp, ud.mincer, ud.ft); sp_randi_init(sp, ud.randi); ud.randi->min = 0; ud.randi->max = 5; ud.randi->cps = 1; sp->len = 44100 * 5; sp_process(sp, &ud, process); sp_mincer_destroy(&ud.mincer); sp_ftbl_destroy(&ud.ft); sp_randi_destroy(&ud.randi); sp_destroy(&sp); return 0; }
int main() { srand(1234567); UserData ud; sp_data *sp; sp_create(&sp); sp_biscale_create(&ud.biscale); sp_osc_create(&ud.osc); sp_ftbl_create(sp, &ud.ft, 2048); sp_biscale_init(sp, ud.biscale); ud.biscale->min = 0; ud.biscale->max = 880; sp_gen_sine(sp, ud.ft); sp_osc_init(sp, ud.osc, ud.ft, 0); ud.osc->amp = 0.1; sp->len = 44100 * 5; sp_process(sp, &ud, process); sp_biscale_destroy(&ud.biscale); sp_ftbl_destroy(&ud.ft); sp_osc_destroy(&ud.osc); sp_destroy(&sp); return 0; }
int t_osc(sp_test *tst, sp_data *sp, const char *hash) { uint32_t n; int fail = 0; SPFLOAT osc; sp_osc *osc_d; sp_ftbl *ft_d; sp_ftbl_create(sp, &ft_d, 2048); sp_osc_create(&osc_d); sp_gen_sine(sp, ft_d); sp_osc_init(sp, osc_d, ft_d, 0); osc_d->freq = 500; sp->len = 44100 * 5; for(n = 0; n < tst->size; n++) { osc = 0; sp_osc_compute(sp, osc_d, NULL, &osc); sp_out(sp, 0, osc); sp_test_add_sample(tst, sp->out[0]); } 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; } sp_ftbl_destroy(&ft_d); sp_osc_destroy(&osc_d); if(fail) return SP_NOT_OK; else return SP_OK; }
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_mincer *unit[NUM]; sp_ftbl *wav; sp_ftbl_loadfile(sp, &wav, SAMPDIR "oneart.wav"); for(u = 0; u < NUM; u++) { sp_mincer_create(&unit[u]); sp_mincer_init(sp, unit[u], wav, 2048); } for(t = 0; t < sp->len; t++) { for(u = 0; u < NUM; u++) sp_mincer_compute(sp, unit[u], &in, &out); } for(u = 0; u < NUM; u++) sp_mincer_destroy(&unit[u]); sp_destroy(&sp); sp_ftbl_destroy(&wav); return 0; }
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; }
/* port of GEN10 from Csound */ int sp_gen_sinesum(sp_data *sp, sp_ftbl *ft, const char *argstring) { sp_ftbl *args; sp_ftbl_create(sp, &args, 1); sp_gen_vals(sp, args, argstring); int32_t phs; SPFLOAT amp; int32_t flen = (int32_t)ft->size; SPFLOAT tpdlen = 2.0 * M_PI / (SPFLOAT) flen; int32_t i, n; for(i = (int32_t)args->size; i > 0; i--){ amp = args->tbl[args->size - i]; if(amp != 0) { for(phs = 0, n = 0; n < ft->size; n++){ ft->tbl[n] += sin(phs * tpdlen) * amp; phs += i; phs %= flen; } } } sp_ftbl_destroy(&args); return SP_OK; }
int main() { srand(1234567); UserData ud; sp_data *sp; sp_create(&sp); sp_tenv2_create(&ud.tenv2); sp_osc_create(&ud.osc); sp_ftbl_create(sp, &ud.ft, 2048); sp_tenv2_init(sp, ud.tenv2); ud.tenv2->atk = 3; ud.tenv2->rel = 1; sp_gen_sine(sp, ud.ft); sp_osc_init(sp, ud.osc, ud.ft, 0); ud.osc->amp = 0.6; sp->len = 44100 * 5; sp_process(sp, &ud, process); sp_tenv2_destroy(&ud.tenv2); sp_ftbl_destroy(&ud.ft); sp_osc_destroy(&ud.osc); sp_destroy(&sp); return 0; }
int main() { srand(1234567); UserData ud; sp_data *sp; sp_create(&sp); sp_tseg_create(&ud.tseg); sp_osc_create(&ud.osc); sp_ftbl_create(sp, &ud.ft, 2048); sp_tseg_init(sp, ud.tseg, 0.0001); ud.tseg->end = 1.0; ud.tseg->type = 3.0; ud.tseg->dur = 4.0; 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_tseg_destroy(&ud.tseg); sp_ftbl_destroy(&ud.ft); sp_osc_destroy(&ud.osc); sp_destroy(&sp); return 0; }
int main() { srand(time(NULL)); udata ud; sp_data *sp; sp_create(&sp); sp_ftbl_create(sp, &ud.ft, 1024); sp_osc_create(&ud.osc); sp_randi_create(&ud.rnd); sp_gen_sine(sp, ud.ft); sp_osc_init(sp, ud.osc, ud.ft); sp_randi_init(sp, ud.rnd, 12345); ud.rnd->min = 300; ud.rnd->max = 3000; sp->len = 44100 * 5; sp_process(sp, &ud, write_osc); sp_ftbl_destroy(&ud.ft); sp_osc_destroy(&ud.osc); sp_randi_destroy(&ud.rnd); sp_destroy(&sp); return 0; }
int main() { UserData ud; sp_data *sp; sp_createn(&sp, 2); sp_pan2_create(&ud.pan2); sp_osc_create(&ud.osc); sp_osc_create(&ud.lfo); sp_ftbl_create(sp, &ud.ft, 2048); sp_pan2_init(sp, ud.pan2); ud.pan2->type = 2; sp_gen_sine(sp, ud.ft); sp_osc_init(sp, ud.osc, ud.ft, 0); sp_osc_init(sp, ud.lfo, ud.ft, 0); ud.lfo->amp = 1; ud.lfo->freq = 1; sp->len = 44100 * 5; sp_process(sp, &ud, process); sp_pan2_destroy(&ud.pan2); sp_ftbl_destroy(&ud.ft); sp_osc_destroy(&ud.osc); sp_osc_destroy(&ud.lfo); sp_destroy(&sp); return 0; }
int main() { udata ud; sp_data *sp; sp_create(&sp); sp_ftbl_create(sp, &ud.ft, 4096); for(int i = 0; i < 8; i++) sp_posc3_create(&ud.posc[i]); for(int i = 0; i < 8; i++) sp_tenv_create(&ud.tenv[i]); sp_revsc_create(&ud.rev); sp_gen_sine(sp, ud.ft); for(int i = 0; i < 8; i++) sp_tenv_init(sp, ud.tenv[i], 0.01, 0.1, 0.1); for(int i = 0; i < 8; i++) sp_posc3_init(sp, ud.posc[i], ud.ft); ud.posc[0]->freq = sp_midi2cps(48); ud.posc[1]->freq = sp_midi2cps(52); ud.posc[2]->freq = sp_midi2cps(59); ud.posc[3]->freq = sp_midi2cps(62); ud.posc[4]->freq = sp_midi2cps(72); ud.posc[5]->freq = sp_midi2cps(71); ud.posc[6]->freq = sp_midi2cps(69); ud.posc[7]->freq = sp_midi2cps(66); sp_revsc_init(sp, ud.rev); sp->len = 44100 * 20; sp_process(sp, &ud, write_music); for(int i = 0; i < 8; i++) sp_posc3_destroy(&ud.posc[i]); for(int i = 0; i < 8; i++) sp_tenv_destroy(&ud.tenv[i]); sp_revsc_destroy(&ud.rev); sp_ftbl_destroy(&ud.ft); 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 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 t_gen_composite(sp_test *tst, sp_data *sp, const char *hash) { uint32_t n; int fail = 0; SPFLOAT out = 0; sp_ftbl *ft; sp_ftbl_create(sp, &ft, 4096); sp_gen_composite(sp, ft, "0.5 0.5 270 0.5"); for(n = 0; n < tst->size; n++) { if(n < ft->size) { out = ft->tbl[n]; } else { out = 0; } sp_test_add_sample(tst, out); } fail = sp_test_verify(tst, hash); sp_ftbl_destroy(&ft); if(fail) return SP_NOT_OK; else return SP_OK; }
int main() { UserData ud; sp_data *sp; sp_create(&sp); sp_clip_create(&ud.clp); sp_osc_create(&ud.osc); sp_ftbl_create(sp, &ud.ft, 4096); sp_moogladder_create(&ud.filt); sp_gen_line(sp, ud.ft, "0 1 4096 -1"); sp_osc_init(sp, ud.osc, ud.ft, 0); ud.osc->freq = sp_midi2cps(48); sp_clip_init(sp, ud.clp); sp_moogladder_init(sp, ud.filt); ud.filt->freq = 1000; ud.filt->res = 0.8; sp->len = 44100 * 5; sp_process(sp, &ud, write_clip); sp_osc_destroy(&ud.osc); sp_clip_destroy(&ud.clp); sp_ftbl_destroy(&ud.ft); sp_moogladder_destroy(&ud.filt); sp_destroy(&sp); return 0; }
int chord_cloud_destroy(chord_cloud **cc) { int i; chord_cloud *ccp = *cc; sp_dust **tmpdust; sp_ftbl_destroy(&ccp->sine); for(i = 0; i < ccp->notes->size; i++ ) { sp_dust_destroy(&ccp->grains[i].dust); sp_osc_destroy(&ccp->grains[i].osc); sp_tenv_destroy(&ccp->grains[i].env); sp_tevent_destroy(&ccp->grains[i].retrig); } free(ccp->grains); sp_ftbl_destroy(&ccp->notes); free(*cc); return SP_OK; }
int main() { srand(time(NULL)); UserData ud; uint32_t bufsize; sp_data *sp; sp_create(&sp); sp_auxdata rvaux; sp_dtrig_create(&ud.dt); sp_tenv_create(&ud.tenv); sp_ftbl_create(sp, &ud.ft, 2048); sp_ftbl_create(sp, &ud.delta, 4); sp_ftbl_create(sp, &ud.nn, 1); sp_osc_create(&ud.osc); sp_gen_vals(sp, ud.delta, "0.2 0.2 0.2 0.1"); sp_gen_vals(sp, ud.nn, "60 62 64 67"); sp_tseq_create(&ud.seq); sp_tseq_init(sp, ud.seq, ud.nn); sp_dtrig_init(sp, ud.dt, ud.delta); ud.dt->loop = 1.0; sp_tenv_init(sp, ud.tenv); ud.tenv->atk = 0.01; ud.tenv->hold = 0.01; ud.tenv->rel = 0.05; sp_gen_sine(sp, ud.ft); sp_osc_init(sp, ud.osc, ud.ft, 0); ud.osc->freq = 1000; ud.osc->amp = 0.5; sp->len = 44100 * 5; sp_process(sp, &ud, write_osc); sp_dtrig_destroy(&ud.dt); sp_tseq_destroy(&ud.seq); sp_tenv_destroy(&ud.tenv); sp_ftbl_destroy(&ud.ft); sp_ftbl_destroy(&ud.nn); sp_ftbl_destroy(&ud.delta); sp_osc_destroy(&ud.osc); sp_destroy(&sp); return 0; }
int t_pitchamdf(sp_test *tst, sp_data *sp, const char *hash) { uint32_t n; int fail = 0; SPFLOAT freq = 0, amp = 0, blsaw = 0, randh = 0, osc = 0; sp_srand(sp, 1234567); UserData ud; sp_pitchamdf_create(&ud.pitchamdf); sp_osc_create(&ud.osc); sp_ftbl_create(sp, &ud.ft, 2048); sp_blsaw_create(&ud.blsaw); sp_randh_create(&ud.randh); sp_pitchamdf_init(sp, ud.pitchamdf, 200, 500); sp_randh_init(sp, ud.randh); ud.randh->max = 500; ud.randh->min = 200; ud.randh->freq = 6; sp_blsaw_init(sp, ud.blsaw); sp_gen_sine(sp, ud.ft); sp_osc_init(sp, ud.osc, ud.ft, 0); for(n = 0; n < tst->size; n++) { freq = 0, amp = 0, blsaw = 0, randh = 0, osc = 0; sp_randh_compute(sp, ud.randh, NULL, &randh); *ud.blsaw->freq = randh; sp_blsaw_compute(sp, ud.blsaw, NULL, &blsaw); sp_pitchamdf_compute(sp, ud.pitchamdf, &blsaw, &freq, &); ud.osc->freq = freq; sp_osc_compute(sp, ud.osc, NULL, &osc); sp_test_add_sample(tst, osc); } fail = sp_test_verify(tst, hash); sp_blsaw_destroy(&ud.blsaw); sp_randh_destroy(&ud.randh); sp_pitchamdf_destroy(&ud.pitchamdf); sp_ftbl_destroy(&ud.ft); sp_osc_destroy(&ud.osc); if(fail) return SP_NOT_OK; else return SP_OK; }
int main() { srand(time(NULL)); int i; UserData ud; sp_data *sp; sp_create(&sp); sp_ftbl_create(sp, &ud.ft, 4096); for(i = 0; i < 3; i++) sp_osc_create(&ud.osc[i]); sp_lpf18_create(&ud.lpf); sp_osc_create(&ud.lfo); sp_ftbl_create(sp, &ud.sine_ft, 4096); sp_gen_sine(sp, ud.sine_ft); sp_gen_line(sp, ud.ft, "0 1 4096 -1"); sp_osc_init(sp, ud.osc[0], ud.ft); ud.osc[0]->freq = sp_midi2cps(40 - 0.05); sp_osc_init(sp, ud.osc[1], ud.ft); ud.osc[1]->freq = sp_midi2cps(40 - 12); sp_osc_init(sp, ud.osc[2], ud.ft); ud.osc[2]->freq = sp_midi2cps(40 + 0.05); sp_lpf18_init(sp, ud.lpf); sp_osc_init(sp, ud.lfo, ud.sine_ft); ud.lfo->freq = 0.4; sp->len = 44100 * 5; sp_process(sp, &ud, write_osc); sp_ftbl_destroy(&ud.ft); for(i = 0; i < 3; i++) sp_osc_destroy(&ud.osc[i]); sp_lpf18_destroy(&ud.lpf); sp_osc_destroy(&ud.lfo); sp_ftbl_destroy(&ud.sine_ft); sp_destroy(&sp); return 0; }
int main() { UserData ud; /* allocate and initialize */ sp_create(&ud.sp); plumber_register(&ud.pd); plumber_init(&ud.pd); /* create an ftable with a size 1, which will be expanded with gen_vals */ sp_ftbl_create(ud.sp, &ud.seq, 1); /* Gen_vals will create a table from a string of numbers */ sp_gen_vals(ud.sp, ud.seq, "60 63 67 72"); /* Sporth code to be parsed, using a ftable generated in c called 'seq' */ char *str = "0.1 dmetro " "0 'seq' tseq " "0.01 port mtof " "0.5 1 1 1 fm"; /* Tell plumber that that we will take care of removing the following ftables */ /* This is needed for persistant ftables that don't get cleaned for * recompilation */ plumber_ftmap_delete(&ud.pd, 0); /* add ftable to plumber and call it "seq" */ plumber_ftmap_add(&ud.pd, "seq", ud.seq); /* Turn automatic deletion back "on" */ plumber_ftmap_delete(&ud.pd, 1); /* make plumber know about the soundpipe instance */ ud.pd.sp = ud.sp; /* parse string and allocate plumbing */ plumber_parse_string(&ud.pd, str); /* initialize the plumbing */ plumber_compute(&ud.pd, PLUMBER_INIT); /* run */ sp_process(ud.sp, &ud, process); /* Cleanup */ /* Plumber will handle freeing the memory of the ftable we added */ /* no need to call sp_ftbl_destroy */ plumber_clean(&ud.pd); sp_ftbl_destroy(&ud.seq); sp_destroy(&ud.sp); return 0; }
int main() { sp_data *sp; sp_create(&sp); sp_ftbl *ft; sp_ftbl_create(sp, &ft, 4096); sp_gen_line(sp, ft, "0 -1 2048 1 4096 -1"); int i; FILE *fp= fopen("plot.dat", "w"); for(i = 0; i < ft->size; i++) { fprintf(fp, "%d %g\n", i, ft->tbl[i]); } printf("%d plot points written to plot.dat. Run write_plot.sh to see the result.\n", ft->size); fclose(fp); sp_ftbl_destroy(&ft); sp_destroy(&sp); return 0; }
int main() { srand(time(NULL)); udata ud; sp_data *sp; sp_create(&sp); sp_ftbl_create(sp, &ud.ft, 2048); sp_gbuzz_create(&ud.buzz); sp_gen_sine(sp, ud.ft); sp_gbuzz_init(sp, ud.buzz, ud.ft); sp->len = 44100 * 5; sp_process(sp, &ud, process); sp_ftbl_destroy(&ud.ft); sp_gbuzz_destroy(&ud.buzz); sp_destroy(&sp); return 0; }
int main() { srand(time(NULL)); udata ud; sp_data *sp; sp_create(&sp); sp_ftbl_create(sp, &ud.ft, 4096); sp_osc_create(&ud.osc); sp_gen_sinesum(sp, ud.ft, "1 0 0 1"); sp_osc_init(sp, ud.osc, ud.ft); ud.osc->freq = 500; sp->len = 44100 * 5; sp_process(sp, &ud, write_osc); sp_ftbl_destroy(&ud.ft); sp_osc_destroy(&ud.osc); sp_destroy(&sp); return 0; }
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; }