예제 #1
0
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;
}
예제 #2
0
파일: ex_pluck.c 프로젝트: aure/Soundpipe
void process(sp_data *sp, void *udata) {
    UserData *ud = udata;
    SPFLOAT osc = 0, pluck = 0, met = 0;
    sp_osc_compute(sp, ud->osc, NULL, &osc);
    sp_metro_compute(sp, ud->met, NULL, &met);
    if(met) {
        ud->pluck->reflect = 0.5;
        ud->pluck->freq = ud->pluck->ifreq + rand() % 500;
    }
    sp_pluck_compute(sp, ud->pluck, &met, &osc, &pluck);
    sp->out[0] = pluck;
}
예제 #3
0
int sporth_pluck(sporth_stack *stack, void *ud)
{
    plumber_data *pd = ud;
    sp_pluck *pluck;
    SPFLOAT freq = 0;
    SPFLOAT amp = 0;
    SPFLOAT trig = 0;
    SPFLOAT ifreq = 0;
    SPFLOAT out = 0;
    switch(pd->mode) {
        case PLUMBER_CREATE:

#ifdef DEBUG_MODE
            plumber_print(pd, "pluck: Creating\n");
#endif
            sp_pluck_create(&pluck);
            plumber_add_ugen(pd, SPORTH_PLUCK, pluck);
            if(sporth_check_args(stack, "ffff") != SPORTH_OK) {
                plumber_print(pd,"Not enough arguments for pluck\n");
                stack->error++;
                return PLUMBER_NOTOK;
            }

            ifreq = sporth_stack_pop_float(stack);
            amp = sporth_stack_pop_float(stack);
            freq = sporth_stack_pop_float(stack);
            trig = sporth_stack_pop_float(stack);

            sporth_stack_push_float(stack, 0);
            break;
        case PLUMBER_INIT:

#ifdef DEBUG_MODE
            plumber_print(pd, "pluck: Initialising\n");
#endif

            pluck = pd->last->ud;

            ifreq = sporth_stack_pop_float(stack);
            amp = sporth_stack_pop_float(stack);
            freq = sporth_stack_pop_float(stack);
            trig = sporth_stack_pop_float(stack);

            sp_pluck_init(pd->sp, pluck, ifreq);
            sporth_stack_push_float(stack, 0);
            break;
        case PLUMBER_COMPUTE:
            pluck = pd->last->ud;

            ifreq = sporth_stack_pop_float(stack);
            amp = sporth_stack_pop_float(stack);
            freq = sporth_stack_pop_float(stack);
            trig = sporth_stack_pop_float(stack);

            pluck->freq = freq;
            pluck->amp = amp;

            sp_pluck_compute(pd->sp, pluck, &trig, &out);
            sporth_stack_push_float(stack, out);
            break;
        case PLUMBER_DESTROY:
            pluck = pd->last->ud;
            sp_pluck_destroy(&pluck);
            break;
        default:
            plumber_print(pd, "pluck: Unknown mode!\n");
            break;
    }
    return PLUMBER_OK;
}