summaryrefslogtreecommitdiffstats
path: root/src/synth_gui.c
diff options
context:
space:
mode:
authorgramanas <anastasis.gramm2@gmail.com>2023-08-31 01:06:56 +0300
committergramanas <anastasis.gramm2@gmail.com>2023-08-31 01:07:16 +0300
commit0ea48752390228224e7f25575b096efc0aacd70b (patch)
tree62756ecadab1459dc02fa19e42c3cbe81deb63e2 /src/synth_gui.c
parent42479d2ed8fcbad5fb3ffb52553dad05a329590f (diff)
downloadsynth-project-0ea48752390228224e7f25575b096efc0aacd70b.tar.gz
synth-project-0ea48752390228224e7f25575b096efc0aacd70b.tar.bz2
synth-project-0ea48752390228224e7f25575b096efc0aacd70b.zip
Lets work on generators
Diffstat (limited to 'src/synth_gui.c')
-rw-r--r--src/synth_gui.c94
1 files changed, 64 insertions, 30 deletions
diff --git a/src/synth_gui.c b/src/synth_gui.c
index ca1acc9..46ec71f 100644
--- a/src/synth_gui.c
+++ b/src/synth_gui.c
@@ -4,6 +4,53 @@
//#include "raylib.h"
void
+draw_text(synth_t * synth, Font f, int x, int y)
+{
+ char buf[64];
+ int count = 0;
+ float text_size = 10;
+ int offset = 12;
+
+ snprintf(buf, sizeof buf, "lfo freq %.4f", synth->cc_lfo_freq.value);
+ DrawText(buf, x, y + offset * count++, text_size, GRAY);
+ snprintf(buf, sizeof buf, "lfo amp %.4f", synth->cc_lfo_amp.value);
+ DrawText(buf, x, y + offset * count++, text_size, GRAY);
+ snprintf(buf, sizeof buf, "filter reso %.4f", synth->cc_resonance.value);
+ DrawText(buf, x, y + offset * count++, text_size, GRAY);
+ snprintf(buf, sizeof buf, "filter cutoff %.1f", synth->cc_cutoff.value);
+ DrawText(buf, x, y + offset * count++, text_size, GRAY);
+ snprintf(buf, sizeof buf, "extra pitch %.4f", synth->cc_pitch.value);
+ DrawText(buf, x, y + offset * count++, text_size, GRAY);
+
+ DrawRectangleLines(x - 6, y - 3, 120, 3 + (count * offset) + 3, GRAY);
+}
+
+void
+mouse(void *synthData, PaStream *stream)
+{
+ synth_t * synth = (synth_t *)synthData;
+ float m = GetMouseWheelMove();
+ int x = 0;
+ if (m < 0) x = -1;
+ else if (m > 0) x = 1;
+ int y = GetMouseY();
+
+ if (x) {
+ if (y > 20 && y <= 32) {
+ cc_step(&synth->cc_lfo_freq, x);
+ } else if (y > 32 && y <= 44) {
+ cc_step(&synth->cc_lfo_amp, x);
+ } else if (y > 44 && y <= 56) {
+ cc_step(&synth->cc_resonance, x);
+ } else if (y > 56 && y <= 68) {
+ cc_step(&synth->cc_cutoff, x);
+ } else if (y > 68 && y <= 80) {
+ cc_step(&synth->cc_pitch, x);
+ }
+ }
+}
+
+void
keyboard(void *synthData, PaStream *stream)
{
synth_t * synth = (synth_t *)synthData;
@@ -104,7 +151,7 @@ keyboard(void *synthData, PaStream *stream)
}
void
-draw_adsr_sliders(synth_t * synth, int x, int y, int width, int height, int offset)
+draw_bars(synth_t * synth, int x, int y, int width, int height, int offset)
{
char buf[64];
int count = 0;
@@ -127,6 +174,8 @@ draw_adsr_sliders(synth_t * synth, int x, int y, int width, int height, int offs
synth->lfo.freq = GuiSliderBar((Rectangle){ x, y + count++ * (height + offset), width, height }, "lfo freq: ", buf, synth->lfo.freq , 0.001f, 10.0f);
snprintf(buf, sizeof buf, "%.3f", synth->lfo.amp);
synth->lfo.amp = GuiSliderBar((Rectangle){ x, y + count++ * (height + offset), width, height }, "lfo amp: ", buf, synth->lfo.amp , 0.0f, 0.93f);
+ snprintf(buf, sizeof buf, "%.3f", synth->gain);
+ synth->gain = GuiSlider((Rectangle){ x, y + count++ * (height + offset), width, height }, "gain: ", buf, synth->gain , 0.0f, 2.0f);
}
void
@@ -161,18 +210,20 @@ draw_signals(synth_t * synth, int x, int y, int width, int height)
}
}
+#include "raystyle.h"
void
-rayrun(void *synthData)
-{
+rayrun(void *synthData){
synth_t * synth = (synth_t *)synthData;
PaTime current_time = 0;
PaTime prev_time = 0;
- InitWindow(WIDTH, HEIGHT, "Raylib synth");
+ InitWindow(WIDTH, HEIGHT, "Raylib synth");
+ Font f = LoadFont("/usr/share/fonts/TTF/DejaVuSans.ttf");
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
while (!WindowShouldClose()) {
keyboard(synth, synth->stream);
+ mouse(synth, synth->stream);
int prec = 100000;
if (IsKeyPressed(KEY_ENTER)) {
@@ -187,31 +238,15 @@ rayrun(void *synthData)
// GUI
char buf[64];
- draw_adsr_sliders(synth, 30, 20, 256, 20, 4);
-
+ draw_bars(synth, 33, 20, 256, 20, 4);
+ draw_text(synth, f, WIDTH / 2 - 108, 20);
/* if ( GuiButton((Rectangle){ WIDTH / 2 - 108, 150 - 42 - 6 - 6, 216, 6 }, "")) { */
/* synth->freq_offset = 0; */
/* } */
- snprintf(buf, sizeof buf, "extra pitch %.4f", synth->cc_pitch.value);
- DrawText(buf, WIDTH / 2 - 108, 150 - 82, 20, LIGHTGRAY);
- snprintf(buf, sizeof buf, "filter cutoff %.1f", synth->cc_cutoff.value);
- DrawText(buf, WIDTH / 2 - 108, 150 - 42, 20, LIGHTGRAY);
- snprintf(buf, sizeof buf, "filter reso %.4f", synth->cc_resonance.value);
- DrawText(buf, WIDTH / 2 - 108, 150 - 62, 20, LIGHTGRAY);
- snprintf(buf, sizeof buf, "lfo amp %.4f", synth->cc_lfo_amp.value);
- DrawText(buf, WIDTH / 2 - 108, 150 - 22, 20, LIGHTGRAY);
- snprintf(buf, sizeof buf, "lfo freq %.4f", synth->cc_lfo_freq.value);
- DrawText(buf, WIDTH / 2 - 108, 150 - 102, 20, LIGHTGRAY);
/* snprintf(buf, sizeof buf, "freq offset %.1f", synth->freq_offset); */
/* DrawText(buf, WIDTH / 2 - 108, 150 - 42, 20, LIGHTGRAY); */
- /* synth->freq_offset = GuiSlider((Rectangle){ WIDTH / 2 - 108, 150 - 42, 216, 24 }, "fine", buf, synth->freq_offset , -20.0f, 20.0f); */
-
- if ( GuiButton((Rectangle){ WIDTH / 2 - 108, 150 - 6 - 6, 216, 6 }, "")) {
- synth->gain = 1;
- }
- snprintf(buf, sizeof buf, "%.1f", synth->gain);
- synth->gain = GuiSlider((Rectangle){ WIDTH / 2 - 108, 150, 216, 24 }, "gain", buf, synth->gain , 0.0f, 2.0f);
+ /* synth->freq_offset = GuiSlider((Rectangle){ WIDTH / 2 - 108, 150 - 42, 216, 24 }, "fine", buf, synth->freq_offset , -20.0f, 20.0f); */
if ( GuiButton((Rectangle){ WIDTH / 2 - 108, 150 - 6 - 6 + 42, 216, 6 }, "")) {
synth->x = 1;
@@ -219,9 +254,9 @@ rayrun(void *synthData)
snprintf(buf, sizeof buf, "%.1f", synth->x);
synth->x = GuiSlider((Rectangle){ WIDTH / 2 - 108, 150 + 42, 216, 24 }, "x", buf, synth->x , 0.0f, 2.0f);
- synth->multi = GuiToggle((Rectangle){ WIDTH - 100 - 50 - 100 - 50 , 50, 100, 24 }, "!MULTI!", synth->multi);
- synth->filter = GuiToggle((Rectangle){ WIDTH - 100 - 50 - 100 - 50 , 50 + 24 + 6, 100, 24 }, "FILTER", synth->filter);
- synth->poly = GuiToggle((Rectangle){ WIDTH - 100 - 50 - 100 - 50 , 50 + 24 + 6 + 24 + 6, 100, 24 }, "POLY", synth->poly);
+ //synth->multi = GuiToggle((Rectangle){ WIDTH - 100 - 50 - 100 - 50 , 50, 100, 24 }, "!MULTI!", synth->multi);
+ synth->filter = GuiToggle((Rectangle){ WIDTH - 100 - 50 - 100 - 50 , 50 , 100, 24 }, "FILTER", synth->filter);
+ //synth->poly = GuiToggle((Rectangle){ WIDTH - 100 - 50 - 100 - 50 , 50 + 24 + 6 + 24 + 6, 100, 24 }, "POLY", synth->poly);
GuiSpinner((Rectangle){ WIDTH - 100 - 50 , 50, 100, 24 }, "oct: ", &(synth->octave), 0, 7, 0);
snprintf(buf, sizeof buf, "generator %d --> ", synth->geni);
@@ -229,14 +264,13 @@ rayrun(void *synthData)
synth->clamp = GuiToggle((Rectangle){ WIDTH - 100 - 50, 50 + 24 + 6 + 24 + 6, 100, 24 }, "clamp", synth->clamp);
-
// signals
draw_signals(synth, 20, 390, WIDTH - 2*20, 200);
//DrawText("THE SYNTH!!!!!!!!!!!!!!!!!!1", WIDTH / 2 - 100, 50, 20, LIGHTGRAY);
- DrawText("KEYBOARD: Q .. ] TOGGLE MULTI: ENTER", WIDTH / 2 -300, HEIGHT - 300 - 50, 20, LIGHTGRAY);
- snprintf(buf, sizeof buf, "%f stream time: %f", synth->viz.wave[0], Pa_GetStreamTime(synth->stream));
- DrawText(buf, WIDTH / 2 -300, HEIGHT - 300, 20, LIGHTGRAY);
+ DrawText("KEYBOARD: Q .. ]", WIDTH / 2 -300, HEIGHT - 300 - 50, 20, LIGHTGRAY);
+ snprintf(buf, sizeof buf, "stream time: %f", Pa_GetStreamTime(synth->stream));
+ DrawText(buf, WIDTH / 2 -300, HEIGHT - 300, 11, LIGHTGRAY);
EndDrawing();
//----------------------------------------------------------------------------------