示例#1
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;
}
示例#2
0
文件: gen_file.c 项目: Luckyncl/3rd
int sporth_gen_file(sporth_stack *stack, void *ud)
{
#ifndef NO_LIBSNDFILE
    plumber_data *pd = ud;

    sp_ftbl *ft;
    char *str;
    char *filename;
    int size;

    switch(pd->mode){
        case PLUMBER_CREATE:
            plumber_add_ugen(pd, SPORTH_GEN_FILE, NULL);
            if(sporth_check_args(stack, "sfs") != SPORTH_OK) {
                fprintf(stderr, "Init: not enough arguments for gen_file\n");
                return PLUMBER_NOTOK;
            }

            filename = sporth_stack_pop_string(stack);
            size = (int)sporth_stack_pop_float(stack);
            str = sporth_stack_pop_string(stack);
            sp_ftbl_create(pd->sp, &ft, size);
            if(sp_gen_file(pd->sp, ft, filename) == SP_NOT_OK) {
                fprintf(stderr, "There was an issue creating the ftable \"%s\".\n", str);
                stack->error++;
                return PLUMBER_NOTOK;
            }
            plumber_ftmap_add(pd, str, ft);
            break;

        case PLUMBER_INIT:
            filename = sporth_stack_pop_string(stack);
            size = (int)sporth_stack_pop_float(stack);
            str = sporth_stack_pop_string(stack);
            break;

        case PLUMBER_COMPUTE:
            sporth_stack_pop_float(stack);
            break;

        case PLUMBER_DESTROY:
            break;

        default:
           printf("Error: Unknown mode!");
           break;
    }
    return PLUMBER_OK;
#else
    return PLUMBER_NOTOK;
#endif
}
示例#3
0
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;
}