tabread

Files: tabread.h, tabread.c

Table Read through an sp_ftbl with linear interpolation.

Functions

sp_tabread_create(sp_tabread **tabread)
sp_tabread_init(sp_data *sp, sp_tabread *tabread, sp_ftbl *ft, SPFLOAT mode)
sp_tabread_compute(sp_data *sp, sp_tabread *tabread, SPFLOAT *in, SPFLOAT *out)
sp_tabread_destroy(sp_tabread **tabread)

Mandatory Parameters

ft: A properly allocated table (using a function like sp_gen_file).
(Recommended value: N/A)
mode: 1 = scaled index, 0 = unscaled index
(Recommended value: 1.0)

Optional Parameters

index: index position, either scaled or unscaled with mode parameter
(Default value: 0)
offset: Offset from beginning of ftable. If the mode is scaled, then it is in range 0-1, other wise it is the index position.
(Default value: 1.0)
wrap: Enable wraparound. 1 = on; 0 = 0ff.
(Default value: 1.0)

Outputs

out: Signal output.

Example Code

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include "soundpipe.h"

typedef struct {
    sp_tabread *tr;
    sp_ftbl *ft;
    sp_phasor *phasor;
} UserData;

void process(sp_data *sp, void *udata) {
    UserData *ud = udata;
    SPFLOAT tab = 0.0, phasor = 0.0;
    sp_phasor_compute(sp, ud->phasor, NULL, &phasor);
    ud->tr->index = phasor;
    sp_tabread_compute(sp, ud->tr, NULL, &tab);
    sp->out[0] = tab;
}

int main() {
    srand(time(NULL));
    UserData ud;
    sp_data *sp;
    sp_create(&sp);

    sp_tabread_create(&ud.tr);

    sp_phasor_create(&ud.phasor);

    sp_ftbl_create(sp, &ud.ft, 395393);
    sp_gen_file(sp, ud.ft, "oneart.wav");

    sp_tabread_init(sp, ud.tr, ud.ft, 1);

    /* since mode = 1, offset 5% into file */
    ud.tr->offset = 0.05;
    /* no wraparound */
    ud.tr->wrap = 0;

    sp_phasor_init(sp, ud.phasor, 0);
    /* set playback rate to half speed, or 1/(t * 2) */
    ud.phasor->freq = 1 / (8.97 * 2);
    sp->len = 44100 * 5;
    sp_process(sp, &ud, process);

    sp_phasor_destroy(&ud.phasor);
    sp_tabread_destroy(&ud.tr);
    sp_ftbl_destroy(&ud.ft);
    sp_destroy(&sp);
    return 0;
}