tabread
Files: tabread.h, tabread.c
Table
Read through an sp_ftbl with linear interpolation.
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;
}