#ifndef SYNTH_ENGINE_H #define SYNTH_ENGINE_H #include #include #include #include #include "synth_common.h" #include "notes.h" #include "filter.h" #include "adsr.h" #include "control.h" #include "osc.h" #ifndef M_PI #define M_PI (3.14159265) #endif typedef struct lfo_t { float freq; float amp; unsigned long long elapsed; } lfo_t; typedef struct midi_note_t { float freq; int channel; PaTime noteOn; PaTime noteOff; float velocity; // normalized float wvt_index; float lfo_index; unsigned long long elapsed; unsigned long long noteOffSample; adsr_t * adsr; int active; } midi_note_t; typedef struct viz_t { int sample_rate_divider; float wave[VIZ_BUF]; int wi; } viz_t; typedef struct { PaStream *stream; cc_t * ccs[128]; int cci; cc_t cc_pitch; cc_t cc_cutoff; cc_t cc_resonance; cc_t cc_lfo_freq; cc_t cc_lfo_amp; float gain; float x; midi_note_t midi_note[MIDI_NOTES]; adsr_t adsr; lfo_t lfo; int octave; int delay; float del[SAMPLE_RATE * 10]; int deli; float del_time; float del_feedback; unsigned long long counter; int poly; int multi; int filter; int clamp; int modifiers[16]; int modi; float (*gen[7]) (float freq, midi_note_t * midi_note, float x, unsigned int sample_rate); int geni; float cutoff; BWLowPass* fff; BWBandStop* fff2; int active; viz_t viz; osc_t * osctri; } synth_t; void init_synth(synth_t * synth); void free_synth(synth_t * synth); #endif /* SYNTH_ENGINE_H */