int t_decimator(sp_test *tst, sp_data *sp, const char *hash) { uint32_t n; int fail = 0; SPFLOAT noise = 0, decimator = 0; UserData ud; sp_decimator_create(&ud.decimator); sp_noise_create(&ud.nz); sp_noise_init(sp, ud.nz); sp_decimator_init(sp, ud.decimator); ud.decimator->bitdepth = 8; ud.decimator->srate = 10000; for(n = 0; n < tst->size; n++) { noise = 0, decimator = 0; sp_noise_compute(sp, ud.nz, NULL, &noise); sp_decimator_compute(sp, ud.decimator, &noise, &decimator); sp_test_add_sample(tst, decimator); } 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_decimator_destroy(&ud.decimator); sp_noise_destroy(&ud.nz); if(fail) return SP_NOT_OK; else return SP_OK; }
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 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 t_blsaw(sp_test *tst, sp_data *sp, const char *hash) { uint32_t n; int fail = 0; SPFLOAT blsaw; sp_blsaw *blsaw_d; sp_blsaw_create(&blsaw_d); sp_blsaw_init(sp, blsaw_d); *blsaw_d->freq = 500; sp->len = 44100 * 5; for(n = 0; n < tst->size; n++) { blsaw = 0; sp_blsaw_compute(sp, blsaw_d, NULL, &blsaw); sp_out(sp, 0, blsaw); sp_test_add_sample(tst, sp->out[0]); } fail = sp_test_verify(tst, hash); sp_blsaw_destroy(&blsaw_d); if(fail) return SP_NOT_OK; else return SP_OK; }
int t_spa(sp_test *tst, sp_data *sp, const char *hash) { UserData ud; uint32_t n; SPFLOAT spa; int fail = 0; sp_srand(sp, 1234567); sp_spa_create(&ud.spa); sp_spa_init(sp, ud.spa, SAMPDIR "oneart.spa"); for(n = 0; n < tst->size; n++) { spa = 0; sp_spa_compute(sp, ud.spa, NULL, &spa); sp_test_add_sample(tst, spa); } fail = sp_test_verify(tst, hash); sp_spa_destroy(&ud.spa); if(fail) return SP_NOT_OK; else return SP_OK; }
int t_compressor(sp_test *tst, sp_data *sp, const char *hash) { uint32_t n; int fail = 0; SPFLOAT diskin = 0, compressor = 0; sp_srand(sp, 1234567); UserData ud; sp_compressor_create(&ud.compressor); sp_diskin_create(&ud.diskin); sp_compressor_init(sp, ud.compressor); *ud.compressor->ratio = 4; *ud.compressor->thresh = -30; *ud.compressor->atk = 0.2; *ud.compressor->rel = 0.2; sp_diskin_init(sp, ud.diskin, SAMPDIR "oneart.wav"); for(n = 0; n < tst->size; n++) { diskin = 0; compressor = 0; sp_diskin_compute(sp, ud.diskin, NULL, &diskin); sp_compressor_compute(sp, ud.compressor, &diskin, &compressor); sp_test_add_sample(tst, compressor); } fail = sp_test_verify(tst, hash); sp_compressor_destroy(&ud.compressor); sp_diskin_destroy(&ud.diskin); if(fail) return SP_NOT_OK; else return SP_OK; }
int t_atone(sp_test *tst, sp_data *sp, const char *hash) { sp_srand(sp, 0); uint32_t n; int fail = 0; SPFLOAT noise = 0, atone = 0; sp_atone *atone_d; sp_noise *noise_d; sp_atone_create(&atone_d); sp_noise_create(&noise_d); sp_atone_init(sp, atone_d); sp_noise_init(sp, noise_d); for(n = 0; n < tst->size; n++) { noise = 0, atone = 0; sp_noise_compute(sp, noise_d, NULL, &noise); sp_atone_compute(sp, atone_d, &noise, &atone); sp_test_add_sample(tst, atone); } fail = sp_test_verify(tst, hash); sp_atone_destroy(&atone_d); sp_noise_destroy(&noise_d); if(fail) return SP_NOT_OK; else return SP_OK; }
int t_buthp(sp_test *tst, sp_data *sp, const char *hash) { sp_srand(sp, 0); uint32_t n; int fail = 0; SPFLOAT in = 0; SPFLOAT out = 0; UserData ud; sp_noise_create(&ud.ns); sp_buthp_create(&ud.buthp); sp_noise_init(sp, ud.ns); sp_buthp_init(sp, ud.buthp); ud.buthp->freq = 5000; for(n = 0; n < tst->size; n++) { in = 0; out = 0; sp_noise_compute(sp, ud.ns, NULL, &in); sp_buthp_compute(sp, ud.buthp, &in, &out); sp_test_add_sample(tst, out); } fail = sp_test_verify(tst, hash); sp_noise_destroy(&ud.ns); sp_buthp_destroy(&ud.buthp); if(fail) return SP_NOT_OK; else return SP_OK; }
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_buthp(sp_test *tst, sp_data *sp, const char *hash) { uint32_t n; int fail = 0; SPFLOAT in = 0; SPFLOAT out = 0; udata ud; sp_noise_create(&ud.ns); sp_buthp_create(&ud.buthp); sp_noise_init(sp, ud.ns); sp_buthp_init(sp, ud.buthp); ud.buthp->freq = 5000; for(n = 0; n < tst->size; n++) { in = 0; out = 0; sp_noise_compute(sp, ud.ns, NULL, &in); sp_buthp_compute(sp, ud.buthp, &in, &out); sp_test_add_sample(tst, out); } 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_noise_destroy(&ud.ns); sp_buthp_destroy(&ud.buthp); if(fail) return SP_NOT_OK; else return SP_OK; }
int t_tbvcf(sp_test *tst, sp_data *sp, const char *hash) { uint32_t n; int fail = 0; sp_srand(sp, 0); UserData ud; sp_noise_create(&ud.ns); sp_tbvcf_create(&ud.tn); sp_noise_init(sp, ud.ns); sp_tbvcf_init(sp, ud.tn); ud.tn->dist = 1.0; SPFLOAT in = 0; for(n = 0; n < tst->size; n++) { in = 0; sp_noise_compute(sp, ud.ns, NULL, &in); sp_tbvcf_compute(sp, ud.tn, &in, &sp->out[0]); sp_test_add_sample(tst, sp->out[0]); } fail = sp_test_verify(tst, hash); sp_noise_destroy(&ud.ns); sp_tbvcf_destroy(&ud.tn); 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_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 t_allpass(sp_test *tst, sp_data *sp, const char *hash) { uint32_t n; int fail = 0; sp_allpass *ap_d; sp_tenv *env_d; sp_noise *nz_d; SPFLOAT tick = 0, env = 0, noise = 0, allpass = 0; sp_allpass_create(&ap_d); sp_tenv_create(&env_d); sp_noise_create(&nz_d); sp_allpass_init(sp, ap_d, 0.1); sp_tenv_init(sp, env_d); env_d->atk = 0.001; env_d->hold = 0.00; env_d->rel = 0.1; sp_noise_init(sp, nz_d); for(n = 0; n < tst->size; n++) { tick = 0, env = 0, noise = 0, allpass = 0; tick = (n == 0) ? 1 : 0; sp_tenv_compute(sp, env_d, &tick, &env); sp_noise_compute(sp, nz_d, NULL, &noise); noise *= env * 0.5; sp_allpass_compute(sp, ap_d, &noise, &allpass); sp_test_add_sample(tst, allpass); } 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_noise_destroy(&nz_d); sp_tenv_destroy(&env_d); sp_allpass_destroy(&ap_d); if(fail) return SP_NOT_OK; else return SP_OK; }
int t_allpass(sp_test *tst, sp_data *sp, const char *hash) { sp_srand(sp, 0); uint32_t n; int fail = 0; sp_allpass *ap_d; sp_tenv *env_d; sp_noise *nz_d; SPFLOAT tick = 0, env = 0, noise = 0, allpass = 0; sp_allpass_create(&ap_d); sp_tenv_create(&env_d); sp_noise_create(&nz_d); sp_allpass_init(sp, ap_d, 0.1); sp_tenv_init(sp, env_d); env_d->atk = 0.001; env_d->hold = 0.00; env_d->rel = 0.1; sp_noise_init(sp, nz_d); for(n = 0; n < tst->size; n++) { tick = 0, env = 0, noise = 0, allpass = 0; tick = (n == 0) ? 1 : 0; sp_tenv_compute(sp, env_d, &tick, &env); sp_noise_compute(sp, nz_d, NULL, &noise); noise *= env * 0.5; sp_allpass_compute(sp, ap_d, &noise, &allpass); sp_test_add_sample(tst, allpass); } fail = sp_test_verify(tst,hash); sp_noise_destroy(&nz_d); sp_tenv_destroy(&env_d); sp_allpass_destroy(&ap_d); if(fail) return SP_NOT_OK; else return SP_OK; }
int t_foo(sp_test *tst, sp_data *sp, const char *hash) { uint32_t n; int fail = 0; /* allocate / initialize modules here */ for(n = 0; n < tst->size; n++) { /* compute samples and add to test buffer */ sp_test_add_sample(tst, 0); } fail = sp_test_verify(tst, hash); /* destroy functions here */ 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 t_tseg(sp_test *tst, sp_data *sp, const char *hash) { uint32_t n; int fail = 0; sp_srand(sp, 1234567); UserData ud; SPFLOAT osc = 0, tseg = 0; SPFLOAT trig = (sp->pos == 0); 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); for(n = 0; n < tst->size; n++) { osc = 0; tseg = 0; trig = (sp->pos == 0); sp_tseg_compute(sp, ud.tseg, &trig, &tseg); ud.osc->freq = 100 + (tseg * 1000); sp_osc_compute(sp, ud.osc, NULL, &osc); sp_test_add_sample(tst, osc); } fail = sp_test_verify(tst, hash); sp_tseg_destroy(&ud.tseg); sp_ftbl_destroy(&ud.ft); sp_osc_destroy(&ud.osc); if(fail) return SP_NOT_OK; else return SP_OK; }
int t_tenv2(sp_test *tst, sp_data *sp, const char *hash) { uint32_t n; int fail = 0; sp_srand(sp, 1234567); UserData ud; SPFLOAT osc = 0, tenv2 = 0, tick = 0; 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; for(n = 0; n < tst->size; n++) { osc = 0, tenv2 = 0, tick = 0; if(sp->pos == 0 || sp->pos == sp->sr * 1) tick = 1; sp_osc_compute(sp, ud.osc, NULL, &osc); sp_tenv2_compute(sp, ud.tenv2, &tick, &tenv2); sp->out[0] = osc * tenv2; sp_test_add_sample(tst, sp->out[0]); } fail = sp_test_verify(tst, hash); sp_tenv2_destroy(&ud.tenv2); sp_ftbl_destroy(&ud.ft); sp_osc_destroy(&ud.osc); if(fail) return SP_NOT_OK; else return SP_OK; }
int t_revsc(sp_test *tst, sp_data *sp, const char *hash) { uint32_t n; int fail = 0; SPFLOAT in = 0; SPFLOAT foo = 0; sp_srand(sp, 123456); UserData ud; ud.counter = 0; sp_noise_create(&ud.ns); sp_revsc_create(&ud.rev); sp_noise_init(sp, ud.ns); sp_revsc_init(sp, ud.rev); sp->len = 44100 * 5; for(n = 0; n < tst->size; n++) { in = 0; foo = 0; sp_noise_compute(sp, ud.ns, NULL, &in); if(ud.counter < 2000) { ud.counter = (ud.counter + 1) % 5000; }else{ in = 0; } sp_revsc_compute(sp, ud.rev, &in, &in, &sp->out[0], &foo); sp_test_add_sample(tst, sp->out[0]); } fail = sp_test_verify(tst, hash); sp_noise_destroy(&ud.ns); sp_revsc_destroy(&ud.rev); if(fail) return SP_NOT_OK; else return SP_OK; }
int t_line(sp_test *tst, sp_data *sp, const char *hash) { sp_srand(sp, 1234567); uint32_t n; int fail = 0; SPFLOAT osc = 0, line = 0; UserData ud; sp_line_create(&ud.line); sp_osc_create(&ud.osc); sp_ftbl_create(sp, &ud.ft, 2048); sp_line_init(sp, ud.line, 100, 3, 400); sp_gen_sine(sp, ud.ft); sp_osc_init(sp, ud.osc, ud.ft, 0); sp->len = 44100 * 5; for(n = 0; n < tst->size; n++) { sp_line_compute(sp, ud.line, NULL, &line); ud.osc->freq = line; sp_osc_compute(sp, ud.osc, NULL, &osc); sp->out[0] = osc; sp_test_add_sample(tst, sp->out[0]); } fail = sp_test_verify(tst, hash); sp_line_destroy(&ud.line); sp_ftbl_destroy(&ud.ft); sp_osc_destroy(&ud.osc); if(fail) return SP_NOT_OK; else return SP_OK; }
int t_tseq(sp_test *tst, sp_data *sp, const char *hash) { uint32_t n; int fail = 0; SPFLOAT env = 0; SPFLOAT osc = 0; SPFLOAT trig; SPFLOAT dtrig = 0; SPFLOAT note = 0; sp_srand(sp, 123456); UserData ud; 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; for(n = 0; n < tst->size; n++) { env = 0; osc = 0; dtrig = 0; note = 0; if(sp->pos == 0){ trig = 1.0; }else{ trig = 0.0; } sp_dtrig_compute(sp, ud.dt, &trig, &dtrig); sp_tseq_compute(sp, ud.seq, &dtrig, ¬e); ud.osc->freq = sp_midi2cps(note + 24); env = 1.0; sp_tenv_compute(sp, ud.tenv, &dtrig, &env); sp_osc_compute(sp, ud.osc, NULL, &osc); sp->out[0] = osc * env; sp_test_add_sample(tst, sp->out[0]); } fail = sp_test_verify(tst, hash); 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); if(fail) return SP_NOT_OK; else return SP_OK; }