ref: a6875be771d0b79f59abe6529231d294094b4a23
dir: /fs.h/
typedef struct Aux Aux; typedef struct Auxdsp Auxdsp; typedef struct Fs Fs; typedef struct State State; typedef enum { Xclone, Xctl, Xmetadata, Xdsp, Xdspctl, Xdspdata, Xui, Xuictl, Xuimeta, }Auxtype; struct UI; struct Aux { Auxtype type; int id; int ctl; int data; int metadata; int numin; int numout; struct UI *ui; State *state; }; struct Fs { Srv srv; char *metadata; struct { Auxdsp *(*new)(int *numin, int *numout); void (*free)(Auxdsp *dsp); void (*reset)(Auxdsp *dsp); /* optional, atm this one is needed only for autovoicing to work */ Auxdsp *(*clone)(Auxdsp *dsp); /* optional, for autovoicing. this is ugly */ void *(*state)(Auxdsp *dsp, int *sz); /* optional, n is always modulo number of channels */ int (*read)(Auxdsp *dsp, float *b, int n); /* optional, n is always modulo number of channels */ int (*write)(Auxdsp *dsp, float *b, int n); }dsp; }; struct State { float *mixer; int mixersz; Auxdsp **voice; int nvoice; int crossvoice; /* copied from metadata on ctl write (gate) */ int silent; /* that's about the first voice only */ }; void fsinit(void *fs);