#define VOICE_OSCILLATORS 4 #define VOICE_FILTERS 2 #define NUM_LFO 4 enum { PAN_FIXED, PAN_OSC, PAN_LFO, }; struct voice_param_t { uint8_t pan_type; uint8_t pan_source; double pan_level; double pan_level_r; struct control_t shape; struct control_t level; struct control_t freq_mult; struct control_t phase; struct envelope_t env; }; struct voice_t { bool playing; uint8_t note; uint32_t sample; uint32_t released; double velocity; struct osc_t osc[VOICE_OSCILLATORS]; //struct filter_t fil[VOICE_FILTERS]; struct bw_filter_t bw[VOICE_FILTERS]; }; struct engine_t; void voice_init(struct voice_t *voice, const struct engine_t *engine, double freq); void voice_run(struct voice_t *voice, const struct engine_t *engine, uint32_t samples, float *left, float *right);