Example #1
0
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;
}
Example #2
0
int main() {
    srand(time(NULL));
    udata ud;
    ud.counter = 0;
    sp_data *sp;
    sp_create(&sp);
    sp_ftbl_create(sp, &ud.ft, 1024);
    sp_posc3_create(&ud.posc3);

    sp_gen_sine(sp, ud.ft);
    sp_posc3_init(sp, ud.posc3, ud.ft);
    ud.posc3->freq = 500;
    sp->len = 44100 * 5;
    sp_process(sp, &ud, write_posc3);

    sp_ftbl_destroy(&ud.ft);
    sp_posc3_destroy(&ud.posc3);
    sp_destroy(&sp);
    return 0;
}
Example #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;
}