Sigrid Solveig Haflínudóttircompile stuff50243ce5 years agoHistory
96 lines · 2.0 KB · C
RawDownload
/* This code is placed in the public domain. */ #include <stdlib.h>#include "soundpipe.h" static int sp_rpt_set(sp_rpt *p, SPFLOAT bpm, int div, int rep); int sp_rpt_create(sp_rpt **p){    *p = malloc(sizeof(sp_rpt));    return SP_OK;} int sp_rpt_destroy(sp_rpt **p){    free((*p)->buf);    free(*p);    return SP_OK;} int sp_rpt_init(sp_data *sp, sp_rpt *p, SPFLOAT maxdur){    uint32_t maxlen;    maxlen = (uint32_t)maxdur * sp->sr;    p->playpos = 0;    p->bufpos = 0;    p->running = 0;    p->reps = 4;    p->count = p->reps;    p->maxlen = maxlen;    p->buf = calloc(1, sizeof(SPFLOAT) * maxlen);    p->size = maxlen;    p->sr = sp->sr;    p->bpm = 130;    p->div = 4;    p->rep = 4;    p->rc = SP_OK;    return SP_OK;} int sp_rpt_compute(sp_data *sp, sp_rpt *p, SPFLOAT *trig,        SPFLOAT *in, SPFLOAT *out){    USED(sp);     SPFLOAT *buf = p->buf;     if (p->rc == SP_NOT_OK) {        *out = 0;        return SP_NOT_OK;    }     if (*trig > 0) {        p->rc = sp_rpt_set(p, p->bpm, p->div, p->rep);        p->running = 1;        p->playpos = 0;        p->bufpos = 0;        p->count = p->reps + 1;    }     if (p->bufpos < p->maxlen) {        p->rc = sp_rpt_set(p, p->bpm, p->div, p->rep);        buf[p->bufpos] = *in;        p->bufpos++;    } else {        p->running = 0;    }     if(p->running && p->count > 0) {        if (p->playpos == 0) {            p->count--;        }        *out = buf[p->playpos];        p->playpos = (p->playpos + 1) % p->size;    } else {        *out = *in;    }     return SP_OK;} static int sp_rpt_set(sp_rpt *p, SPFLOAT bpm, int div, int rep){    uint32_t size = (p->sr * (60.0 / bpm)) / (SPFLOAT) div;    p->reps = rep;    if (size > p->maxlen) {        fprintf(stderr, "Error: not enough memory allocated for buffer.\n");        return SP_NOT_OK;    } else if(size <= 0) {        fprintf(stderr, "Error: Size cannot be zero.\n");        return SP_NOT_OK;    } else {        p->size = size;    }    return SP_OK;}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t