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; 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 sp_tenv_init(sp_data *sp, sp_tenv *p, SPFLOAT atk, SPFLOAT hold, SPFLOAT rel) { p->pos = 0; p->last = 0; p->atk = atk; p->rel = rel; p->hold = hold; p->rel = rel; p->sr = sp->sr; p->atk_end = p->sr * atk; p->rel_start = p->sr * (atk + hold); p->atk_slp = 1.0 / p->atk_end; p->rel_slp = -1.0 / (p->sr * p->rel); p->totaldur = p->sr * (atk + hold + rel); sp_tevent_init(sp, p->te, sp_tenv_reinit, sp_tenv_comp, p); return SP_OK; }
int chord_cloud_init(sp_data *sp, chord_cloud *cc, char *notes, SPFLOAT amp) { int i; sp_osc *tmposc; sp_dust *tmpdust; sp_tenv *tmpenv; sp_tevent *tmpretrig; sp_ftbl_create(sp, &cc->sine, 4096); sp_gen_sinesum(sp, cc->sine, "1 0.5 0.3 0.25, 0.1625"); sp_ftbl_create(sp, &cc->notes, 1); sp_gen_vals(sp, cc->notes, notes); cc->ampmax= amp; cc->grains= malloc(cc->notes->size * sizeof(chord_grain)); for(i = 0; i < cc->notes->size; i++) { chord_grain *grain = &cc->grains[i]; sp_osc_create(&grain->osc); sp_tenv_create(&grain->env); sp_dust_create(&grain->dust); sp_tevent_create(&grain->retrig); tmposc = grain->osc; tmpenv = grain->env; tmpdust = grain->dust; tmpretrig = grain->retrig; sp_dust_init(sp, tmpdust, 1, 8); sp_osc_init(sp, tmposc, cc->sine, 0); tmposc->freq = sp_midi2cps(cc->notes->tbl[i]); tmposc->amp = 1.0; grain->amp = 1.0; sp_tenv_init(sp, tmpenv); tmpenv->atk = 0.01; tmpenv->hold = 0; tmpenv->rel = 0.03; sp_tevent_init(sp, tmpretrig, cloud_reinit, cloud_compute, grain); } return SP_OK; }
void samp_create(sp_data *sp, samp_data *sd, size_t size, char *file, char *dtrig, SPFLOAT tempo, SPFLOAT delay) { int i; SPFLOAT tscale = 60.0 / tempo; sp_ftbl_create(sp, &sd->delta, 1); sp_gen_vals(sp, sd->delta, dtrig); sp_dtrig_create(&sd->dt); for(i = 0; i < sd->delta->size; i++) { sd->delta->tbl[i] *= tscale; } sp_dtrig_init(sp, sd->dt, sd->delta); sd->dt->delay = delay * tscale; sp_ftbl_create(sp, &sd->ft, 5574); sp_gen_file(sp, sd->ft, file); sp_tevent_create(&sd->te); sp_tevent_init(sp, sd->te, samp_reinit, samp_compute, sd); sd->pos = 0; }