You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
799 B
45 lines
799 B
#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);
|