Exemplo n.º 1
0
void write_posc3(sp_data *data, void *ud) {
    udata *udp = ud;
    //if(udp->counter == 0){
    //    udp->posc3->freq = 500 + rand() % 2000;
    //}
    sp_posc3_compute(data, udp->posc3, NULL, &data->out[0]);
    udp->counter = (udp->counter + 1) % 4410;
}
Exemplo n.º 2
0
void make_note(sp_data *sp, sp_tenv *tenv, sp_posc3 *posc3, unsigned long counter, unsigned long clock, SPFLOAT *output)
{
    unsigned long count = counter % clock;
    SPFLOAT env = 0, osc = 0;
    SPFLOAT tick = (count == 0) ? 1 : 0;
    sp_tenv_compute(sp, tenv, &tick, &env);
    sp_posc3_compute(sp, posc3, NULL, &osc);
    *output = osc * env; 
}
Exemplo n.º 3
0
int sporth_posc3(sporth_stack *stack, void *ud)
{
    plumber_data *pd = ud;
    SPFLOAT out;
    sp_ftbl *tbl;
    const char *str;
    SPFLOAT freq;
    SPFLOAT amp;
    sp_posc3 *posc3;

    switch(pd->mode) {
        case PLUMBER_CREATE:

#ifdef DEBUG_MODE
            plumber_print(pd, "posc3: Creating\n");
#endif

            sp_posc3_create(&posc3);
            plumber_add_ugen(pd, SPORTH_POSC3, posc3);
            if(sporth_check_args(stack, "ffs") != SPORTH_OK) {
                plumber_print(pd,"Not enough arguments for posc3\n");
                stack->error++;
                return PLUMBER_NOTOK;
            }
            str = sporth_stack_pop_string(stack);
            amp = sporth_stack_pop_float(stack);
            freq = sporth_stack_pop_float(stack);
            if(plumber_ftmap_search(pd, str, &tbl) == PLUMBER_NOTOK) {
                stack->error++;
                return PLUMBER_NOTOK;
            }
            sp_posc3_init(pd->sp, posc3, tbl);
            sporth_stack_push_float(stack, 0);
            break;
        case PLUMBER_INIT:

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

            str = sporth_stack_pop_string(stack);
            amp = sporth_stack_pop_float(stack);
            freq = sporth_stack_pop_float(stack);
            posc3 = pd->last->ud;

            sporth_stack_push_float(stack, 0);
            break;
        case PLUMBER_COMPUTE:
            amp = sporth_stack_pop_float(stack);
            freq = sporth_stack_pop_float(stack);
            posc3 = pd->last->ud;
            posc3->freq = freq;
            posc3->amp = amp;
            sp_posc3_compute(pd->sp, posc3, NULL, &out);
            sporth_stack_push_float(stack, out);
            break;
        case PLUMBER_DESTROY:
            posc3 = pd->last->ud;
            sp_posc3_destroy(&posc3);
            break;
        default:
            plumber_print(pd, "posc3: Unknown mode!\n");
            break;
    }
    return PLUMBER_OK;
}