diff --git a/TODO b/TODO index c330c2b..d376fb0 100644 --- a/TODO +++ b/TODO @@ -2,3 +2,4 @@ LFO Pitch envelope Filter envelope Polyphony +Sequencer diff --git a/data/bg.png b/data/bg.png index b1a73ef..f4f2bb2 100644 Binary files a/data/bg.png and b/data/bg.png differ diff --git a/knob.h b/knob.h index b28daeb..f147a2d 100644 --- a/knob.h +++ b/knob.h @@ -4,38 +4,29 @@ #include #include -#define K_AMP 0 -#define K_FREQ 1 -#define K_OSC1_VOL 2 -#define K_OSC1_WAVEF 3 -#define K_OSC1_PHASE 4 -#define K_OSC1_DET 22 -#define K_OSC2_VOL 5 -#define K_OSC2_WAVEF 6 -#define K_OSC2_PHASE 7 -#define K_OSC2_DET 23 -#define K_OSC3_VOL 8 -#define K_OSC3_WAVEF 9 -#define K_OSC3_PHASE 10 -#define K_OSC3_DET 24 -#define K_OSC4_VOL 11 -#define K_OSC4_WAVEF 12 -#define K_OSC4_PHASE 13 -#define K_OSC4_DET 25 -#define K_HP 14 -#define K_LP 15 -#define K_AENV_ATK 16 -#define K_AENV_REL 17 -#define K_FENV_ATK 18 -#define K_FENV_REL 19 -#define K_DET 20 -#define K_LIM 21 +// Knob indexes +enum +{ + K_AMP, K_FREQ, K_DET, K_LIM, + K_AENV_ATK, K_AENV_REL, + K_OSC1_VOL, K_OSC1_WAVEF, K_OSC1_PHASE, K_OSC1_DET, + K_OSC2_VOL, K_OSC2_WAVEF, K_OSC2_PHASE, K_OSC2_DET, + K_OSC3_VOL, K_OSC3_WAVEF, K_OSC3_PHASE, K_OSC3_DET, + K_OSC4_VOL, K_OSC4_WAVEF, K_OSC4_PHASE, K_OSC4_DET, + K_HP, K_LP, + K_FENV_ATK, K_FENV_REL, + K_LFO1_VOL, +}; -#define K_FMT_PERC 0 // Percent -#define K_FMT_FLOAT 1 -#define K_FMT_WAV 2 -#define K_FMT_FREQ 3 -#define K_FMT_HEX 4 +// Knob value display formats +enum +{ + K_FMT_PERC, + K_FMT_FLOAT, + K_FMT_WAV, + K_FMT_FREQ, + K_FMT_HEX, +}; typedef struct Knob { diff --git a/main.c b/main.c index 31a879a..cdef25f 100644 --- a/main.c +++ b/main.c @@ -107,48 +107,50 @@ int main(void) // Create knobs { - uint32_t x=0+12; - uint32_t y=164; + const uint32_t cell_w=153,cell_h=75; + const uint32_t cell_padx=16,cell_pady=18; + uint32_t x=0+cell_padx; + uint32_t y=cell_h+cell_pady; #define knob_space 32 create_knob(knobs+K_OSC1_VOL,"",x,y);++total_knobs; create_knob(knobs+K_OSC1_WAVEF,"",x+=knob_space,y);++total_knobs; create_knob(knobs+K_OSC1_PHASE,"Phs",x+=knob_space,y);++total_knobs; create_knob(knobs+K_OSC1_DET,"Fine",x+=knob_space,y);++total_knobs; - x=152+12; + x=cell_w+cell_padx; create_knob(knobs+K_OSC2_VOL,"",x,y);++total_knobs; create_knob(knobs+K_OSC2_WAVEF,"",x+=knob_space,y);++total_knobs; create_knob(knobs+K_OSC2_PHASE,"Phs",x+=knob_space,y);++total_knobs; create_knob(knobs+K_OSC2_DET,"Fine",x+=knob_space,y);++total_knobs; - x=152*2+12; + x=cell_w*2+cell_padx; create_knob(knobs+K_OSC3_VOL,"",x,y);++total_knobs; create_knob(knobs+K_OSC3_WAVEF,"",x+=knob_space,y);++total_knobs; create_knob(knobs+K_OSC3_PHASE,"Phs",x+=knob_space,y);++total_knobs; create_knob(knobs+K_OSC3_DET,"Fine",x+=knob_space,y);++total_knobs; - x=152*3+12; + x=cell_w*3+cell_padx; create_knob(knobs+K_OSC4_VOL,"",x,y);++total_knobs; create_knob(knobs+K_OSC4_WAVEF,"",x+=knob_space,y);++total_knobs; create_knob(knobs+K_OSC4_PHASE,"Phs",x+=knob_space,y);++total_knobs; create_knob(knobs+K_OSC4_DET,"Fine",x+=knob_space,y);++total_knobs; - x=0+12; - y=148+90; + x=0+cell_padx; + y+=75; create_knob(knobs+K_AMP,"Amp",x,y);++total_knobs; create_knob(knobs+K_LIM,"Lim",x+=knob_space,y);++total_knobs; create_knob(knobs+K_DET,"Fine",x+=knob_space,y);++total_knobs; create_knob(knobs+K_FREQ,"",x+=knob_space,y);++total_knobs; - x=152*1+12; + x=cell_w*1+cell_padx; create_knob(knobs+K_AENV_ATK,"A",x,y);++total_knobs; create_knob(knobs+K_AENV_REL,"R",x+=knob_space,y);++total_knobs; - x=152*2+12; + x=cell_w*2+cell_padx; create_knob(knobs+K_LP,"LP",x,y);++total_knobs; create_knob(knobs+K_HP,"HP",x+=knob_space,y);++total_knobs; - x=152*3+12; + x=cell_w*3+cell_padx; create_knob(knobs+K_FENV_ATK,"A",x,y);++total_knobs; create_knob(knobs+K_FENV_REL,"R",x+=knob_space,y);++total_knobs; #undef knob_space @@ -604,21 +606,24 @@ int main(void) render_image(r,tex_bg,0,0,640,480); // Draw waveform - SDL_SetRenderDrawColor(r,86,86,86,86); - SDL_RenderDrawLine(r,0,70,640,70); - SDL_SetRenderDrawColor(r,255,0,0,0); - for(size_t i=1;i