From 402f6791150d503fc29ed75a7b8be9abfdd3867f Mon Sep 17 00:00:00 2001 From: gramanas Date: Sat, 29 Apr 2023 14:34:36 +0300 Subject: midi cc --- src/synth_engine.h | 46 +++++++++++++++++++++++++++++++--------------- 1 file changed, 31 insertions(+), 15 deletions(-) (limited to 'src/synth_engine.h') diff --git a/src/synth_engine.h b/src/synth_engine.h index b88f3d5..a434b53 100644 --- a/src/synth_engine.h +++ b/src/synth_engine.h @@ -8,29 +8,30 @@ #include "notes.h" #include "filter.h" +#include "adsr.h" -#define SAMPLE_RATE (44100) -//#define SAMPLE_RATE (48000) +//#define SAMPLE_RATE (44100) +#define SAMPLE_RATE (48000) #define FRAMES_PER_BUFFER (210) +#define VIZ_BUF 1024 + #define WIDTH 1024 #define HEIGHT 600 +#define MIDI_NOTES 128 + #ifndef M_PI #define M_PI (3.14159265) #endif - -typedef struct { - float a; - float peak; - float d; - float s; - float r; +typedef struct lfo_t { + float freq; + float amp; unsigned long long elapsed; -} adsr_t; +} lfo_t; -typedef struct { +typedef struct note_t { float freq; PaTime noteOn; PaTime noteOff; @@ -38,9 +39,20 @@ typedef struct { unsigned long long elapsed; } note_t; -typedef struct { +typedef struct midi_note_t { + float freq; + int channel; + PaTime noteOn; + PaTime noteOff; + float velocity; // normalized + unsigned long long elapsed; + adsr_t * adsr; + int active; +} midi_note_t; + +typedef struct viz_t { int sample_rate_divider; - float wave[1000200]; + float wave[VIZ_BUF]; int wi; } viz_t; @@ -51,9 +63,13 @@ typedef struct { float gain; float x; + midi_note_t midi_note[MIDI_NOTES]; + note_t n; adsr_t adsr; + lfo_t lfo; + int octave; int poly; @@ -75,11 +91,11 @@ typedef struct { viz_t viz; } synth_t; -float adsr_amplitude(void *synthData, unsigned long long elapsed); float make_sample(unsigned long long phase, void *synthData, unsigned int sample_rate, int viz); void init_synth(synth_t * synth); void free_synth(synth_t * synth); -int sound_gen(const void *inputBuffer, void *outputBuffer, +int sound_gen(const void *inputBuffer, + void *outputBuffer, unsigned long framesPerBuffer, const PaStreamCallbackTimeInfo* timeInfo, PaStreamCallbackFlags statusFlags, -- cgit v1.2.3