예제 #1
0
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;
}
예제 #2
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;
}
예제 #3
0
파일: ftbl.c 프로젝트: IanSmith89/AudioKit
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;
}
예제 #4
0
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;
}
예제 #5
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;
}
예제 #6
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;
}
예제 #7
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;
}
예제 #8
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;
}
예제 #9
0
파일: t_osc.c 프로젝트: OpenDAWN/Soundpipe
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;
}
예제 #10
0
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;
}
예제 #11
0
파일: ex_pluck.c 프로젝트: aure/Soundpipe
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;
}
예제 #12
0
파일: ftbl.c 프로젝트: IanSmith89/AudioKit
/* 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;
}
예제 #13
0
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;
}
예제 #14
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;
}
예제 #15
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;
}
예제 #16
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;
}
예제 #17
0
파일: ex_music4.c 프로젝트: aure/Soundpipe
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;
}
예제 #18
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;
}
예제 #19
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;
}
예제 #20
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;
}
예제 #21
0
파일: ex_clip.c 프로젝트: eriser/Soundpipe
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;
}
예제 #22
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;
}
예제 #23
0
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;
}
예제 #24
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, &amp);
        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;
}
예제 #25
0
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;
}
예제 #26
0
파일: ftable.c 프로젝트: narner/Sporth
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;
}
예제 #27
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;
}
예제 #28
0
파일: ex_gbuzz.c 프로젝트: aure/Soundpipe
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;
}
예제 #29
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;
}
예제 #30
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;
}